上一篇给大家分享了《Sping入门》的一些知识,这篇文章分享spring如何整合hibernate和Struts。
Spring整合hibernate
整合hibernate的思想
加入Spring的支持
加入hibernate的支持,最好是将hibernate的配置信息放在applicationContext.xml中
如果使用的是myeclipse2014,生成的数据源中缺少driverClassName的配置,自己加上即可
在配置文件中,生成了四个bean,分别是:数据库连接池 Session工厂 定义事物管理器对象 使用事物驱动的Annotation注解
注:在数据库连接池的数据库连接字符串后面记得加上字符转码
<property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8"></property>
编写PO,HBM及DAO;如果使用生成的DAO,将@TRANSACTION去掉,不要在DAO中控制事务
编写Service接口,在接口中控制事务,可以在接口或接口的方法中增加@Transtraction
编写service实现类;在service实现类中注入dao;
事务:transaction
- 事务是用户自定义的一个操作序列,是一个最小的执行单元,不能再分
自定义Dao(推荐使用的方法)
- BaseDao:所有Dao中实现的方法,是个接口
- BaseDaoImpl:具体实现
- XXXDaoImp:具体实体类的dao;
整合struts2
- 在web.xml中增加一个监听器,这个监听器再启动工程时加载applicationContext.xml配置文件;
- 并将此BeanFactory存储到Application作用于对象中;
- 增加一个struts-spring-plugin.jar的插件;
- 在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" %>