Spring学习day1-Spring数据库

5 Spring数据库

5.1 Spring+JDBC

5.1.1 Jdbc编程特点

         静态代码+动态变量 = jdbc编程。在spring中动态变量可以用注入的形式给予。这样的编程方式适合包装成模板。静态代码构成了模板,而动态变量则是需要传入的参数。

5.1.2引入DataSource

           在spring中注入DataSource

5.1.3 核心类JdbcTemplate

  1. 基于模板的设置(为什么可以设置成基于模板的形式)
  2. 完成了资源的创建和释放的工作
  3. 简化为我们对JDBC的操作
  4. 完成了对JDBC的核心流程的工作,包括SQL语句的创建和执行
  5. 仅需要传递DataSource就可以把它实例化
  6. JdbcTemplate只需要创建一次
  7. 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的使用

  1. 产生原因:在Jdbc的操作中,有很多情况下是要将ResultSet里的数据封装到一个持久化Bean里,再把持久化Bean封装到集合中。这样会造成大量的代码的重复,不利于代码重用。而RowMapper正好解决了这个问题。
  2. 使用:
  1. 写一个类实现RowMapper接口

  1. 在回调接口中,作为参数进行传入即可。

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形式配置事务

  1. 业务逻辑类不能实现接口
  2. 客户端调用返回的是目标类(代理类的父类)

5.2 Spring+Hibernate

5.2.1 HibernateTemplate模板

  1. 如果一个DAO类继承了HibernateDaoSupport,只需要在spring配置文件中注入SessionFactory就可以了。
  2. 如果一个DAO类没有继承HibernateDaoSupport,需要有一个SessionFactory的属性,并且在配置文件中进行注入。

5.2.2 声明式事务

配置XML文件

注解形式:

  1. 在配置文件中引用spring的自动扫描机制。

  1. 在配置文件中引入注解解析器

  1.  在service层通过@Transaction进行注解

 

6 Struts2+spring+hibernate

6.1 需要添加的jar包

6.2 Spring融合web服务器

         1、  在web.xml文件中,添加如下配置:

     

      说明:

在web.xml中加载applicationContext.xml文件有几种方式:

  1.  

如果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>

  1. 也可以利用上图中的方式来配置:

           利用classpath来配置

  1. 我们一般采用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模式。

猜你喜欢

转载自blog.csdn.net/a5421901/article/details/88073685