5 Spring数据库
5.1 Spring+JDBC
5.1.1 Jdbc编程特点
静态代码+动态变量 = jdbc编程。在spring中动态变量可以用注入的形式给予。这样的编程方式适合包装成模板。静态代码构成了模板,而动态变量则是需要传入的参数。
5.1.2引入DataSource
在spring中注入DataSource
5.1.3 核心类JdbcTemplate
- 基于模板的设置(为什么可以设置成基于模板的形式)
- 完成了资源的创建和释放的工作
- 简化为我们对JDBC的操作
- 完成了对JDBC的核心流程的工作,包括SQL语句的创建和执行
- 仅需要传递DataSource就可以把它实例化
- JdbcTemplate只需要创建一次
- JdbcTemplate是线程安全类
5.1.4 使用JdbcTemplate
在Dao类中,用JdbcTemplate作为属性,用spring对JdbcTemplate进行注入。再对JdbcTemplate进行DataSource注入。
注:为什么只要对JdbcTemplate注入DataSource就可以了?
5.1.5 继承JdbcDaoSupport
在Dao类中,继承JdbcDaoSupport。因为JdbcDaoSupport已经有了JdbcTemplate的引用,所以只要继承JdbcDaoSupport就相当于有了JdbcTemplate属性。
5.1.6 使用properties文件
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>jdbc.properties</value>
</list>
</property>
</bean>
5.1.7 RowMapper的使用
- 产生原因:在Jdbc的操作中,有很多情况下是要将ResultSet里的数据封装到一个持久化Bean里,再把持久化Bean封装到集合中。这样会造成大量的代码的重复,不利于代码重用。而RowMapper正好解决了这个问题。
- 使用:
- 写一个类实现RowMapper接口
- 在回调接口中,作为参数进行传入即可。
5.1.8声明式事务管理
5.1.8.1Spring的事务管理器
5.1.8.2Spring事务的传播属性
5.1.8.3Spring事务的隔离级别
5.1.8.4以XML配置的 形式
5.1.8.5以注解方式配置
5.1.9使用CGLIB以XML形式配置事务
- 业务逻辑类不能实现接口
- 客户端调用返回的是目标类(代理类的父类)
5.2 Spring+Hibernate
5.2.1 HibernateTemplate模板
- 如果一个DAO类继承了HibernateDaoSupport,只需要在spring配置文件中注入SessionFactory就可以了。
- 如果一个DAO类没有继承HibernateDaoSupport,需要有一个SessionFactory的属性,并且在配置文件中进行注入。
5.2.2 声明式事务
配置XML文件
注解形式:
- 在配置文件中引用spring的自动扫描机制。
- 在配置文件中引入注解解析器
- 在service层通过@Transaction进行注解
6 Struts2+spring+hibernate
6.1 需要添加的jar包
6.2 Spring融合web服务器
1、 在web.xml文件中,添加如下配置:
说明:
在web.xml中加载applicationContext.xml文件有几种方式:
如果spring配置文件被命名为applicationContext.xml,并且放在WEB-INF目录下,则不需要配置<context-param>,因为ContextLoaderListener默认在WEB-INF目录下寻找名为applicationContext.xml的文件。若存在多个Spring配置文件,则在<param-value>中依次列出,之间以逗号隔开。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
- 也可以利用上图中的方式来配置:
利用classpath来配置
- 我们一般采用classpath的方式来配置
上面的配置说明在web容器启动的时候,spring容器也启动了。
6.3 struts.xml文件
在struts.xml文件中,添加struts2的常量:
struts.objectFactory = spring
在spring中的文件配置:
6.4 OpenInSessionView
由于使用的是spring的声明式事务处理方式,所以在调用this.getHibernateTemplate().load方法时,使用了hibernate的懒加载技术。当把一个实体Bean从数据库中加载完以后,只能加载其ID值。这个时候spring的声明式事务处理方式已经把session给关闭掉了。所以当值在页面输出时会产生异常。
处理方式为:OpenSessionInview模式。