
springMVC+spring+hibernate整合的基本配置
@新手学习
1 导入相关包,就不在多讲。
2 在web.xml中配置。
2.1 配置servlet
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
2.2 配置启动spring监听器
<!-- 启动spring的监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring.xml</param-value>
</context-param>
2.3 可以配置一个字符编码过滤器,用于解决乱码问题
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3 spring的配置文件编写
3.1 将连接数据库的属性配置在properties文件中,并在spring配置文件中加载它
jdbc.properties文件内容:
jdbc.driver_class=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql:///spring?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root
spring配置文件加载它:
<!-- 加载properties文件 -->
<context:property-placeholder location="classpath:jdbc.properties"/>
3.2 创建c3p0连接池(数据源)
<!-- 创建C3p0连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="driverClass" value="${jdbc.driver_class}"/>
<property name="user" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
3.3 spring整合hibernate的配置
<!-- spring整合hibernate -->
<!-- 构造一个spring中hibernate5的LocalSessionFactoryBean实例 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<!-- 需要加载一个数据源 -->
<property name="dataSource" ref="dataSource"/>
<!-- hibernate功能属性 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<!-- 开启自动维护表 -->
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<!-- 映射实体类,扫描实体类所在的包 -->
<property name="packagesToScan">
<list>
<value>cn.home.domain</value>
</list>
</property>
</bean>
3.4 开启spring事务的注解功能
transaction-manager:需要注入一个事务管理器的实例:
<!-- 开启spring的事务管理,注解 -->
<tx:annotation-driven transaction-manager="transactionManager"/>
3.5 创建事务管理器实例
PS:配置的所有与hibernate有关的类,都是来自于spring给我们提供的jar中的类(springframework.orm.hibernate5),并且hibernate版本必须统一
``` ``` ## 3.6 将注解扫描的功能开启,否则无法使用注解注入DAO和Service层对象 ``` ```这样,spring与hibernate的基本环境就配置完成,
如果需要其他功能,可以自定义添加
4 springMVC的配置文件编写
4.1 开启注解扫描
<context:component-scan base-package="cn.home.controller"/>
4.2 开启官方推荐的spring的HandlerMapping和HandlerAdapter
<!-- 开启官方推荐的spring的HandlerMapping和HandlerAdapter -->
<mvc:annotation-driven/>
4.3 配置视图解析器,可以让controller返回的视图路径更加简洁(也就是逻辑路径),如果不配置的话,返回的就必须是物理路径,否则会无法response给浏览器。
这里,放出视图解析器的配置:
<!-- 视图解析器 -->
<!-- <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value=""/>
<property name="suffix" value=".jsp"/>
</bean> -->
PS:由于springMVC和本就是spring的一个子模块,与spring是无缝链接的,所以并未在spring的配置文件中去配置springMVC的节点。
5 一些在DAO层中需要注意的细节
- 在DAO层中要想使用hibernate的CURD,需要让DAO对象继承HibernateDaoSupport这个类,并且给父类提供一个sessionfactory对象,在源文件中编写如下代码:
//给父类提供一个sessionfactory对象
@Resource
public void setMySessionFactory(SessionFactory sessionFactory){
super.setSessionFactory(sessionFactory);
}
//获取hibernate的HibernateTemplate对象并调用其方法
@Override
public void save(Customer cust) {
this.getHibernateTemplate().save(cust);
}
6 JavaBean的编写细节
- 代码:
@Entity
@Table(name="t_customer")
public class Customer {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="cust_id")
private Integer custId;
@Column(name="cust_name")
private String custName;
@Column(name="cust_gender")
private String custGender;
- 使用JDK自带的持久类(persistence)的注解包
- @Entity : 注解为实体类
- @Table :实体类对应的表名,name="表名"
- @Id:定义为这张表的主键
- @GeneratedValue(strategy=GenerationType.IDENTITY):主键策略>>主键自增策略;strategy属性:静态变量>>策略
- @Column(name="cust_id"):实体类对应表的字段。