笔记:springMVC+spring+hibernate整合的基本配置

619 阅读4分钟

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)的注解包
  1. @Entity : 注解为实体类
  2. @Table :实体类对应的表名,name="表名"
  3. @Id:定义为这张表的主键
  4. @GeneratedValue(strategy=GenerationType.IDENTITY):主键策略>>主键自增策略;strategy属性:静态变量>>策略
  5. @Column(name="cust_id"):实体类对应表的字段。

基本配置就完成了。