Dao写的多了,两个问题。1,spring的配置文件中对每个Dao都配置注入SessionFactory。2,Dao中好多代码雷同性太高。对于第一个问题,使用spring的自动扫描机制加annotation解决,第二个问题,则重新书写HibernateDaoSupport解决。在重写的support类中使用annotation完成SessionFactory的注入,并抽象Dao中常用的代码。
附件中用源码 及打好的jar包。直接将jar包导入即可使用。
使用范例:
spring配置文件:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd"> <!-- 打开Spring自动扫描机制 --> <context:component-scan base-package="org.qrsx" /> <!-- 定义数据源Bean,使用C3P0数据源实现 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <!-- 指定连接数据库的驱动 --> <property name="driverClass" value="com.mysql.jdbc.Driver" /> <!-- 指定连接数据库的URL --> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/11OA" /> <!-- 指定连接数据库的用户名 --> <property name="user" value="root" /> <!-- 指定连接数据库的密码 --> <property name="password" value="root" /> <!--连接池中保留的最大连接数。Default: 15 --> <property name="maxPoolSize" value="40" /> <!-- 指定连接数据库连接池的最小连接数 --> <property name="minPoolSize" value="10" /> <!-- 指定连接数据库连接池的初始化连接数 取值应在minPoolSize与maxPoolSize之间。Default: 3 --> <property name="initialPoolSize" value="15" /> <!--最大空闲时间,25000秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 --> <property name="maxIdleTime" value="25000" /> <!--如果设为true那么在取得连接的同时将校验连接的有效性。Default: false --> <property name="testConnectionOnCheckin" value="true" /> <!--每18000秒检查所有连接池中的空闲连接。Default: 0 --> <property name="idleConnectionTestPeriod" value="18000" /> </bean> <!--定义了Hibernate的SessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!-- 配置Hibernate的参数 --> <property name="hibernateProperties"> <props> <!-- 指定数据库的方言 --> <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> <!-- JDBC执行批量更新语句的大小 清除缓存(定期清除缓存,减小压力 --> <prop key="hibernate.jdbc.batch_size">30</prop> </props> </property> <property name="mappingResources"> <!-- 映射的文件 --> <list> <value>org/qrsx/model/Hibernate.hbm.xml</value> </list> </property> </bean> </beans>
Dao
public interface RoleDao extends EntityDao<Role> { /** * 根据角色名称查询. * @param roleName * @return */ Role get(String roleName); /** * 查询最大排序。 * @return */ Integer findMaxSort(); /** * 根据序号查询。 * @param sort * @return */ Role getBySort(Integer sort); /** * 排序。所有大于此排序号的role全部排序减一。 * @param sort * @return */ Integer updateBatch(Integer sort); /** * 查询数据的数量 * @return */ Integer findCount(); /** * 分页查询 * @param firstResult * @param maxResults * @return */ List<Role>find(Integer firstResult,Integer maxResults); }
DaoImpl
@Repository public class RoleDaoHibernate extends EntityHibernateDaoSupport<Role> implements RoleDao { @Override public List<Role> find() { final String HQL="from Role order by sort"; return super.find(HQL); } @Override public Role get(String roleName) { final String HQL= "from Role where roleName=?"; return super.get(HQL, roleName); } @Override public Integer findMaxSort() { final String HQL= "select max(sort) from Role"; return super.findAgg(HQL); } @Override public Role getBySort(Integer sort) { final String HQL= "from Role where sort=?"; return super.get(HQL, sort); } @Override public Integer updateBatch(Integer sort) { final String HQL="update Role set sort=sort-1 where sort>?"; return super.execute(HQL,sort); } @Override public Integer findCount() { final String HQL="select count(id) from Role"; return super.getAgg(HQL); } @Override public List<Role> find(Integer firstResult, Integer maxResults) { final String HQL="from Role"; return super.find(HQL, maxResults, firstResult); } }
相关推荐
在Spring框架中,DAO(Data Access Object)层是应用程序与数据库交互的核心部分。Spring提供了多种方式来支持DAO的配置,使得开发人员可以灵活地选择最适合项目需求的数据访问策略。以下将详细阐述Spring对DAO支持...
根据给定的信息,我们可以深入探讨Spring框架中与Hibernate集成的相关知识点,特别关注“HibernateDaoSupport”类及其在Spring环境中的应用。以下是对标题、描述以及部分文件内容的详细解析: ### 一、Spring与...
具体来说,Spring可以将Web层、Service层、DAO层以及PO(Plain Old Java Object)对象无缝整合在一起,形成一个完整而高效的应用程序架构。 - **Web层**:处理与用户交互相关的部分,如HTTP请求的接收、处理以及...
总结,`HibernateDaoSupport`是Spring框架中为了简化Hibernate DAO层实现的一个重要工具,它通过提供SessionFactory注入、自动Session管理以及封装的HibernateTemplate,极大地提高了开发效率,降低了出错概率。...
本示例主要介绍如何实现Spring Boot 2.0多数据源的集成,并结合Hibernate进行配置,特别是在DAO层使用`HibernateDaoSupport`进行操作,而非使用JPA(Java Persistence API)。 首先,让我们了解Spring Boot 2.0的...
首先,`HibernateDaoSupport`是Hibernate提供的一种用于简化DAO(Data Access Object)层开发的抽象基类。它属于`org.springframework.orm.hibernate5.support`包,为自定义DAO类提供了便捷的初始化和会话管理功能。...
标题提到的"spring 对dao 的操作",指的是Spring如何协助我们实现数据访问对象(DAO)层的编程。在这个基于SSH(Spring、Struts、Hibernate)的项目中,DAO层是连接业务逻辑与数据库的关键部分。 首先,我们需要...
不过,现在更推荐使用Spring Data JPA,它提供了更高级别的抽象,减少了手动编写DAO层代码的需求。 **相关类解析:** 1. **PageView.java** - 这个类可能表示分页视图,通常用于处理数据的分页展示。在JPA和...
综上所述,Spring框架通过与持久化层技术(如JDBC和Hibernate)的紧密集成,极大地简化了数据库操作的复杂性。Spring不仅提供了数据源的配置与管理机制,还提供了模板模式的支持,使得开发者能够更加关注业务逻辑的...
Spring框架中的`HibernateDaoSupport`类提供了与Hibernate集成的基础支持,简化了开发过程。本文将详细介绍如何利用`HibernateDaoSupport`来实现分页功能。 #### 二、代码分析 ##### 1. MyHibernateDaoSupport 类...
本文档旨在详细介绍如何使用配置文件的方式完成DAO层的封装,并在此基础上实现分页功能,最终达成S2SH(Struts、Spring、Hibernate)的整合。此文档作为对《使用Annotation并对DAO层封装具有分页功能的S2SH整合实例...
hibernateTemplate 和 HibernateDaoSupport 是 Spring 框架中针对 Hibernate 数据库访问层的两个重要组件,它们简化了基于 Hibernate 的数据操作,使得开发者能够更高效地进行 CRUD(创建、读取、更新、删除)操作。...
SSH整合(其中dao用extends HibernateDaoSupport方式)总结【图解】
通过上述步骤,我们了解了如何使用`hibernateDaoSupport`类来简化Hibernate与Spring的集成。这种方法不仅提高了代码的可读性和可维护性,还大大减少了开发过程中的错误可能。在实际开发过程中,开发者可以根据项目...
4. **Spring与Hibernate的集成**: Spring通过HibernateTemplate和HibernateDaoSupport简化了Hibernate的使用。`spring集成hibernate配置文件.txt`可能包含了整合步骤、事务配置以及如何处理SessionFactory和Session...
标题中的"SpringHibernate万能DAO组件"指的是一个用于简化Spring和Hibernate集成的工具包,它扩展了HibernateDAOSupport类,提供了更为通用和便捷的数据访问操作。这个组件旨在提高开发效率,减少代码重复,使开发者...
Spring提供了HibernateTemplate和HibernateDaoSupport类,简化了DAO层的编写,使得在DAO中可以直接调用Hibernate的CRUD操作。 4. **AOP集成**:Spring的AOP模块可以用来实现如日志记录、性能监控等功能,这些通常...
Spring提供了DAO支持,可以简化DAO组件的开发,特别是IoC容器的使用,提供了DAO组件与业务逻辑组件之间的松耦合组合方式。 所有的DAO组件,都由容器负责注入到业务逻辑组件中,使用业务逻辑组件无需关心DAO组件的...
`HibernateDaoSupport`是Spring框架中为Hibernate提供的一个辅助类,用于简化DAO(数据访问对象)层的开发。本文将深入探讨`HibernateDaoSupport`的二次封装,以及如何通过封装来实现快速的统计、查询、修改和删除...