`
wxinpeng
  • 浏览: 589416 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

重写Spring的HibernateDaoSupport 简化Dao层写法

阅读更多

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支持配置

    在Spring框架中,DAO(Data Access Object)层是应用程序与数据库交互的核心部分。Spring提供了多种方式来支持DAO的配置,使得开发人员可以灵活地选择最适合项目需求的数据访问策略。以下将详细阐述Spring对DAO支持...

    spring 理解文件HibernateDaoSupport

    根据给定的信息,我们可以深入探讨Spring框架中与Hibernate集成的相关知识点,特别关注“HibernateDaoSupport”类及其在Spring环境中的应用。以下是对标题、描述以及部分文件内容的详细解析: ### 一、Spring与...

    Spring的作用贯穿了整个中间层,将Web层、Service层、DAO层及PO无缝整合,其数据服务层用来存放数据。

    具体来说,Spring可以将Web层、Service层、DAO层以及PO(Plain Old Java Object)对象无缝整合在一起,形成一个完整而高效的应用程序架构。 - **Web层**:处理与用户交互相关的部分,如HTTP请求的接收、处理以及...

    HibernateDaoSupport的使用

    总结,`HibernateDaoSupport`是Spring框架中为了简化Hibernate DAO层实现的一个重要工具,它通过提供SessionFactory注入、自动Session管理以及封装的HibernateTemplate,极大地提高了开发效率,降低了出错概率。...

    springboot2.0多数据源集成hibernate配置hibernateDaoSupport示例

    本示例主要介绍如何实现Spring Boot 2.0多数据源的集成,并结合Hibernate进行配置,特别是在DAO层使用`HibernateDaoSupport`进行操作,而非使用JPA(Java Persistence API)。 首先,让我们了解Spring Boot 2.0的...

    HibernateDaoSupport 与@Autowired

    首先,`HibernateDaoSupport`是Hibernate提供的一种用于简化DAO(Data Access Object)层开发的抽象基类。它属于`org.springframework.orm.hibernate5.support`包,为自定义DAO类提供了便捷的初始化和会话管理功能。...

    spring 对dao 的操作

    标题提到的"spring 对dao 的操作",指的是Spring如何协助我们实现数据访问对象(DAO)层的编程。在这个基于SSH(Spring、Struts、Hibernate)的项目中,DAO层是连接业务逻辑与数据库的关键部分。 首先,我们需要...

    JPA(hibernate) Dao 和 DaoSupport

    不过,现在更推荐使用Spring Data JPA,它提供了更高级别的抽象,减少了手动编写DAO层代码的需求。 **相关类解析:** 1. **PageView.java** - 这个类可能表示分页视图,通常用于处理数据的分页展示。在JPA和...

    spring和数据库层的结合

    综上所述,Spring框架通过与持久化层技术(如JDBC和Hibernate)的紧密集成,极大地简化了数据库操作的复杂性。Spring不仅提供了数据源的配置与管理机制,还提供了模板模式的支持,使得开发者能够更加关注业务逻辑的...

    HibernateDaoSupport分页.

    Spring框架中的`HibernateDaoSupport`类提供了与Hibernate集成的基础支持,简化了开发过程。本文将详细介绍如何利用`HibernateDaoSupport`来实现分页功能。 #### 二、代码分析 ##### 1. MyHibernateDaoSupport 类...

    使用配置文件对DAO层封装具有分页功能的S2SH整合实例_好资源0分送

    本文档旨在详细介绍如何使用配置文件的方式完成DAO层的封装,并在此基础上实现分页功能,最终达成S2SH(Struts、Spring、Hibernate)的整合。此文档作为对《使用Annotation并对DAO层封装具有分页功能的S2SH整合实例...

    hibernateTemplate和HibernateDaoSupport

    hibernateTemplate 和 HibernateDaoSupport 是 Spring 框架中针对 Hibernate 数据库访问层的两个重要组件,它们简化了基于 Hibernate 的数据操作,使得开发者能够更高效地进行 CRUD(创建、读取、更新、删除)操作。...

    SSH整合(其中dao用extends HibernateDaoSupport方式)总结【图解】

    SSH整合(其中dao用extends HibernateDaoSupport方式)总结【图解】

    hibernateDaoSupport类的运用实例

    通过上述步骤,我们了解了如何使用`hibernateDaoSupport`类来简化Hibernate与Spring的集成。这种方法不仅提高了代码的可读性和可维护性,还大大减少了开发过程中的错误可能。在实际开发过程中,开发者可以根据项目...

    spring-note spring 读书笔记

    4. **Spring与Hibernate的集成**: Spring通过HibernateTemplate和HibernateDaoSupport简化了Hibernate的使用。`spring集成hibernate配置文件.txt`可能包含了整合步骤、事务配置以及如何处理SessionFactory和Session...

    SpringHibernate万能DAO组件

    标题中的"SpringHibernate万能DAO组件"指的是一个用于简化Spring和Hibernate集成的工具包,它扩展了HibernateDAOSupport类,提供了更为通用和便捷的数据访问操作。这个组件旨在提高开发效率,减少代码重复,使开发者...

    SpringDB(SSH)

    Spring提供了HibernateTemplate和HibernateDaoSupport类,简化了DAO层的编写,使得在DAO中可以直接调用Hibernate的CRUD操作。 4. **AOP集成**:Spring的AOP模块可以用来实现如日志记录、性能监控等功能,这些通常...

    第24次课-1 Spring与Hibernate的整合

    Spring提供了DAO支持,可以简化DAO组件的开发,特别是IoC容器的使用,提供了DAO组件与业务逻辑组件之间的松耦合组合方式。 所有的DAO组件,都由容器负责注入到业务逻辑组件中,使用业务逻辑组件无需关心DAO组件的...

    HibernateDaoSupport二次封装组件,快速统计和查询,修改

    `HibernateDaoSupport`是Spring框架中为Hibernate提供的一个辅助类,用于简化DAO(数据访问对象)层的开发。本文将深入探讨`HibernateDaoSupport`的二次封装,以及如何通过封装来实现快速的统计、查询、修改和删除...

Global site tag (gtag.js) - Google Analytics