Spring与Hibernate整合之通用Dao的实现
在上一篇文章中写了如何直接利用HibernateTemplate进行数据库操作,但在一般的项目中很少直接得到HibernateTemplate的
Bean对象从而操作数据库的,下面就简要介绍一下实现通用的数据库操作对象Dao类:
1、最基本的数据库操作接口BaseDao<T>:
import java.io.Serializable;
import java.util.List; public interface BaseDao<T> { Serializable save (T entity); void delete (T entity);
void delete (Class<T> clazz,Serializable id); void update(T entity); T get(Class<T> clazz,Serializable id); List<T> findAll(Class<T> clazz); List<T> findAll(Class<T> clazz,String where); }
2、实现BaseDao<T>的实现类BaseDaoImpl<T>:
import java.io.Serializable;
import java.util.List; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; public class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T>{ @Override
public Serializable save(T entity) {
// TODO Auto-generated method stub
return getHibernateTemplate().save(entity);
} @Override
public void delete(T entity) {
// TODO Auto-generated method stub
getHibernateTemplate().delete(entity); } @Override
public void delete(Class clazz, Serializable id) {
// TODO Auto-generated method stub
delete(get(clazz,id)); } @Override
public void update(T entity) {
// TODO Auto-generated method stub
getHibernateTemplate().saveOrUpdate(entity); } @Override
public T get(Class clazz, Serializable id) {
// TODO Auto-generated method stub
return (T) getHibernateTemplate().get(clazz, id);
} @Override
public List<T> findAll(Class clazz) {
// TODO Auto-generated method stub
return (List<T>) getHibernateTemplate().find("select en from "+clazz.getSimpleName()+" en");
} @Override
public List findAll(Class clazz, String where) {
// TODO Auto-generated method stub
return getHibernateTemplate().find("select en from "+clazz.getSimpleName()+" en where "+where);
} }
3、实体User:
import java.util.Date; import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Temporal;
import javax.persistence.TemporalType; @Entity
public class User { @Id
@Column(name="user_id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@Column(name="user_name")
private String name;
private String pass;
@Temporal(TemporalType.DATE)
private Date birth; public User() { } public User( String name, String pass, Date birth) {
super();
this.name = name;
this.pass = pass;
this.birth = birth;
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
} public Date getBirth() {
return birth;
} public void setBirth(Date birth) {
this.birth = birth;
} }
4、针对User类的数据库操作Dao的接口,由于继承了BaseDao<User>,基本的函数接口也不用再写了,空的接口是为了日后的扩展:
import com.csu.comm.dao.BaseDao;
import com.csu.domain.User; public interface UserDao extends BaseDao<User>{ }
5、实现了BaseDao<User>的类UserDaoImpl,也因为继承了BaseDaoImpl<User>,基本的操作已经都实现了,空体也是为了日后的扩展:
import java.io.Serializable;
import java.util.List; import com.csu.comm.dao.BaseDaoImpl;
import com.csu.dao.UserDao;
import com.csu.domain.User; public class UserDaoImpl extends BaseDaoImpl<User> implements UserDao { }
6、c3p0数据库连接池所需要的数据库配置信息,放置在jdbc.properties文件中,这样也方便日后修改只需要改动属性文件,
而不需要改动配置文件:
user=root
password=7890
driverClass=com.mysql.jdbc.Driver
jdbcUrl=jdbc:mysql://localhost:3306/spring
maxPoolSize=200
minPoolSize=2
initialPoolSize=2
7、hibernate配置文件hibernate.cfg.xml:
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory>
<!-- hibernate 所需的配置信息 -->
<property name="show_sql">true</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property><!--方言-->
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">update</property> <!-- hibernate 指定映射类 -->
<mapping class="com.csu.domain.User"/> </session-factory> </hibernate-configuration>
8、spring的配置文件:
<?xml version="1.0" encoding="UTF-8"?> <!-- 整个Spring 文件的根元素就是beans -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util.xsd http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
"> <!-- *****************配置数据源*********************** --> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations">
<!-- 列出需要读取的属性文件 -->
<list>
<value>classpath:jdbc.properties</value>
</list>
</property> </bean> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
p:user="${user}"
p:password="${password}"
p:driverClass="${driverClass}"
p:jdbcUrl="${jdbcUrl}"
p:maxPoolSize="${maxPoolSize}"
p:minPoolSize="${minPoolSize}"
p:initialPoolSize="${initialPoolSize}"
/>
<!-- *****************配置数据源*********************** --> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
p:dataSource-ref="dataSource"
p:configLocation="classpath:hibernate.cfg.xml"
/> <!--因为UserDaoImpl继承了BaseDaoImpl<T>, BaseDaoImpl<T> 继承了 HibernateDaoSupport,HibernateDaoSupport有setSessionFactory函数-->
<bean id="userDao" class="com.csu.dao.impl.UserDaoImpl"
p:sessionFactory-ref="sessionFactory" /> </beans>
10、测试主类:
import java.sql.SQLException;
import java.util.Date;
import java.util.List; import org.hibernate.FlushMode;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.HibernateTemplate; import com.csu.dao.UserDao;
import com.csu.domain.User; public class SpHiTest { public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml"); UserDao userDao = ctx.getBean("userDao",UserDao.class);
List<User> users = userDao.findAll(User.class);
for(Object u : users){
System.out.println(((User) u).getName());
} }
}
11、结果;
Spring与Hibernate整合之通用Dao的实现的更多相关文章
- spring+springmvc+hibernate 整合
三大框架反反复复搭了很多次,虽然每次都能搭起来,但是效率不高.最近重新搭了一次,理顺了思路,整理了需要注意的地方,分享出来. 工具:Eclipse(jdk 1.7) spring和hibernate版 ...
- 轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)
轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)(国家级奖项获奖作品升级版,四版累计印刷27次发行量超10万册的轻量级Jav ...
- Spring与Hibernate整合,实现Hibernate事务管理
1.所需的jar包 连接池/数据库驱动包 Hibernate相关jar Spring 核心包(5个) Spring aop 包(4个) spring-orm-3.2.5.RELEASE.jar ...
- 框架篇:Spring+SpringMVC+hibernate整合开发
前言: 最近闲的蛋疼,搭个框架写成博客记录下来,拉通一下之前所学知识,顺带装一下逼. 话不多说,我们直接步入正题. 准备工作: 1/ IntelliJIDEA的安装配置:jdk/tomcat等..(本 ...
- spring和hibernate整合,事务管理
一.spring和hibernate整合开发步骤 1 引入jar文件,用户libarary列表如下 //spring_core spring3..9core\commons-logging-1.2.j ...
- spring+springmvc+hibernate整合遇到的问题
spring+springmvc+hibernate整合遇到的问题2016年10月20日 23:24:03 守望dfdfdf 阅读数:702 标签: ssh学习经历的异常exception异常框架更多 ...
- Java进阶知识25 Spring与Hibernate整合到一起
1.概述 1.1.Spring与Hibernate整合关键点 1) Hibernate的SessionFactory对象交给Spring创建. 2) hibernate事务交给spring的声明 ...
- springMVC,spring和Hibernate整合(重要)
springMVC,spring和Hibernate整合 https://my.oschina.net/hugohxb/blog/184715 第一步:搭建一个springmvc工程,需要的jar有: ...
- Spring与Hibernate整合中,使用OpenSessionInViewFilter后出现sessionFactory未注入问题
近期在知乎看到一句话,保持学习的有一种是你看到了很多其它的牛人,不甘心,真的不甘心. Spring和hibernate整合的时候,jsp页面做展现,发现展现属性出现: org.apache.jaspe ...
随机推荐
- CodeForces 589I Lottery (暴力,水题)
题意:给定 n 和 k,然后是 n 个数,表示1-k的一个值,问你修改最少的数,使得所有的1-k的数目都等于n/k. 析:水题,只要用每个数减去n/k,然后取模,加起来除以2,就ok了. 代码如下: ...
- Spring Data JPA教程,第一部分: Configuration(翻译)
Spring Data JPA项目旨在简化基于仓库的JPA的创建并减少与数据库交互的所需的代码量.本人在自己的工作和个人爱好项目中已经使用一段时间,它却是是事情如此简单和清洗,现在是时候与你分享我的知 ...
- MES系统的有用存储过程
USE [ChiefmesNEW]GO/****** Object: StoredProcedure [dbo].[st_WMS_ImportStockInBill] Script Date: 10/ ...
- DotNetZip封装类
DotnetZip是一个开源类库,支持.NET的任何语言,可很方便的创建,读取,和更新zip文件.而且还可以使用在.NETCompact Framework中. 下载地址在这里: http://d ...
- @Override must override a superclass method 问题解决
一.问题的由来 最近接手了了一个合作企业的项目,前期不是我司开发的,上周做了几天的技术对接,客户端界面由我负责对接,从svn检出之后,迫不及待的导入到了本地的myeclipse中,谁知立马就出现了那个 ...
- [置顶] Quartz的DateBuilder详解
DateBuilder类有两个方法: nextGivenMinuteDate和nextGivenSecondDate: Method: (a) public static Date nextG ...
- delphi TTreeView组件遍历磁盘目录
TTreeView组件遍历磁盘目录 实例说明 TTreeView组件是一个以分枝结构或者说树状结构显示数据的组件,以该组件显示数据具有较好的等级关系和逻辑层次,并且易于操作.在组件中显示的数据结构与系 ...
- Eclipse 环境下安装PhoneGap开发插件
phoneGap开发跨所有移动平台软件已经成为未来移动终端开发的总趋势,如何在大家所熟悉的Eclipse IDE中快速安装PhoneGap开发插件,介绍如下: 点击help——>install ...
- maven学习(二)
为了兼容之前基于ant构建的项目发布包结构,在基于maven做构建的时候,需要自定义打包方式. maven的maven-assembly-plugin插件支持任意格式的打包,比如:dir,zip等形式 ...
- PAT 1004
1004. Counting Leaves (30) A family hierarchy is usually presented by a pedigree tree. Your job is t ...