文章目录
  1. 1. Spring整合hibernate
    1. 1.1. 整合hibernate的思想
    2. 1.2. 整合的步骤
    3. 1.3. 事务:transaction
    4. 1.4. 自定义Dao(推荐使用的方法)
    5. 1.5. 整合struts2
    6. 1.6. 解决hibernate的懒加载
    7. 1.7. 分页实现
      1. 1.7.1. 实例代码下载

Spring整合hibernate

整合hibernate的思想

  • dao
  • service:控制事务

    整合的步骤

  1. 加入Spring的支持
  2. 加入hibernate的支持,最好是将hibernate的配置信息放在applicationContext.xml中
  3. 如果使用的是myeclipse2014,生成的数据源中缺少driverClassName的配置,自己加上即可
  4. 在配置文件中,生成了四个bean,分别是:数据库连接池    Session工厂    定义事物管理器对象     使用事物驱动的Annotation注解

    注:在数据库连接池的数据库连接字符串后面记得加上字符转码

    <property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8"></property>
    
  5. 编写PO,HBM及DAO;如果使用生成的DAO,将@TRANSACTION去掉,不要在DAO中控制事务

  6. 编写Service接口,在接口中控制事务,可以在接口或接口的方法中增加@Transtraction
  7. 编写service实现类;在service实现类中注入dao;

    事务:transaction

  • 事务是用户自定义的一个操作序列,是一个最小的执行单元,不能再分

    自定义Dao(推荐使用的方法)

  • BaseDao:所有Dao中实现的方法,是个接口
  • BaseDaoImpl:具体实现
  • XXXDaoImp:具体实体类的dao;

    整合struts2

  1. 在web.xml中增加一个监听器,这个监听器再启动工程时加载applicationContext.xml配置文件;
  2. 并将此BeanFactory存储到Application作用于对象中;
  3. 增加一个struts-spring-plugin.jar的插件;
  4. 在struts.xml配置文件中配置action时,class属性的值应该是由spring创建的Action实例

    解决hibernate的懒加载

  • 将lazy改成false:每次代码执行时,自动将数据库所有数据加载到对象,不管需不需要使用,效率慢。
  • 可以采用迫切左外连语句
  • 延迟session的关闭时间(jsp显示完毕后才关闭)

    通过OpenSessionInView的过滤器来实现,在web.xml中配置,配置时,应该放在第一个Filter的位置上;

     <filter>
         <filter-name>openSession</filter-name>
    <filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
     </filter>
     <filter-mapping>
         <filter-name>openSession</filter-name>
         <url-pattern>/*</url-pattern>
     </filter-mapping>
    

分页实现

1.sql语句;
      查询当前页的数据库的分页sql;在hibernate中可以使用setMaxResult,setFristResult两个方法来进行设置;
      查询总记录数;
  //分页
  @Override
  public void getAll(Class<T> clazz, PageInfo info) {
      //设置总记录数
      info.setRecordCount(this.getCount(clazz));
      //设置总页数
      info.setPageCount( info.getRecordCount()%info.getPageSize()==0 ? 
      info.getRecordCount()/info.getPageSize() : info.getRecordCount()/info.getPageSize()+1 );
      Criteria c =  this.getSession().createCriteria(clazz);
      //每页的记录数
      c.setMaxResults(info.getPageSize());
      c.setFirstResult((info.getCurrentPage()-1)*info.getPageSize());
      //查询,并将查询结果赋给info
      info.setList(c.list());
  }
  2.封装分页信息;
      PageInfo;
          action;总记录数,总页数;当前页号,当页的数据;等
  3.将页面封装起来;
      @include
      @自定义标记;
  eg:<%@ include file="subPage.jsp" %>

实例代码下载


更多精彩内容,请关注公众号:轮子工厂,公众号内回复:我要造轮子,可免费获得100本计算机经典电子图书; 回复:福利,获取大学生礼包; 回复:加群,邀请您进高手如云技术交流群。

文章目录
  1. 1. Spring整合hibernate
    1. 1.1. 整合hibernate的思想
    2. 1.2. 整合的步骤
    3. 1.3. 事务:transaction
    4. 1.4. 自定义Dao(推荐使用的方法)
    5. 1.5. 整合struts2
    6. 1.6. 解决hibernate的懒加载
    7. 1.7. 分页实现
      1. 1.7.1. 实例代码下载