在上一篇文章中写了如何直接利用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的实现的更多相关文章

  1. spring+springmvc+hibernate 整合

    三大框架反反复复搭了很多次,虽然每次都能搭起来,但是效率不高.最近重新搭了一次,理顺了思路,整理了需要注意的地方,分享出来. 工具:Eclipse(jdk 1.7) spring和hibernate版 ...

  2. 轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)

    轻量级Java EE企业应用实战(第4版):Struts 2+Spring 4+Hibernate整合开发(含CD光盘1张)(国家级奖项获奖作品升级版,四版累计印刷27次发行量超10万册的轻量级Jav ...

  3. Spring与Hibernate整合,实现Hibernate事务管理

    1.所需的jar包 连接池/数据库驱动包 Hibernate相关jar Spring 核心包(5个) Spring aop 包(4个) spring-orm-3.2.5.RELEASE.jar     ...

  4. 框架篇:Spring+SpringMVC+hibernate整合开发

    前言: 最近闲的蛋疼,搭个框架写成博客记录下来,拉通一下之前所学知识,顺带装一下逼. 话不多说,我们直接步入正题. 准备工作: 1/ IntelliJIDEA的安装配置:jdk/tomcat等..(本 ...

  5. spring和hibernate整合,事务管理

    一.spring和hibernate整合开发步骤 1 引入jar文件,用户libarary列表如下 //spring_core spring3..9core\commons-logging-1.2.j ...

  6. spring+springmvc+hibernate整合遇到的问题

    spring+springmvc+hibernate整合遇到的问题2016年10月20日 23:24:03 守望dfdfdf 阅读数:702 标签: ssh学习经历的异常exception异常框架更多 ...

  7. Java进阶知识25 Spring与Hibernate整合到一起

    1.概述 1.1.Spring与Hibernate整合关键点 1) Hibernate的SessionFactory对象交给Spring创建.    2) hibernate事务交给spring的声明 ...

  8. springMVC,spring和Hibernate整合(重要)

    springMVC,spring和Hibernate整合 https://my.oschina.net/hugohxb/blog/184715 第一步:搭建一个springmvc工程,需要的jar有: ...

  9. Spring与Hibernate整合中,使用OpenSessionInViewFilter后出现sessionFactory未注入问题

    近期在知乎看到一句话,保持学习的有一种是你看到了很多其它的牛人,不甘心,真的不甘心. Spring和hibernate整合的时候,jsp页面做展现,发现展现属性出现: org.apache.jaspe ...

随机推荐

  1. POJ2001Shortest Prefixes(字典树)

    题目大意就是帮你给N条字符串,每条长度不超过20.问要将他们单一识别出来,每个字符串最短可以缩为多短. 如: abc abcdefg bc adef 这四个字符串就可分别缩写为 abc abcd b ...

  2. Spring的ControllerAdvice注解

    @ControllerAdvice,是spring3.2提供的新注解,其实现如下所示: @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUN ...

  3. hdu 4781 Assignment For Princess (2013ACMICPC 成都站 A)

    http://acm.hdu.edu.cn/showproblem.php?pid=4781 由于题目太长,这里就不直接贴了,直接说大意吧. 题目大意:有一个n个点,m条边的有向图,每条边的权值分别为 ...

  4. FOR XML PATH的用法

    USE [ChangHongWMS612]GO/****** Object: StoredProcedure [dbo].[st_WMS_SelStockInBillList] Script Date ...

  5. SSH三大框架整合使用的配置文件 注解实现

    1 Struts.xml 使用拦截器 <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE str ...

  6. ubuntu为IDE(Eclipse WebStorm)添加桌面快捷方式

    在ubuntu15.10环境配置webstorm和eclipse的时候会下载官网上编译好的包, bin目录下面会有一个.sh文件(linux版本), 那么一般情况下,执行 ./sh就会启动IDE, 但 ...

  7. idea 搭建java项目

    IntelliJ IDEA 12.0搭建Maven Web SSH2架构项目示例         以IDEA为环境,搭建SSH架构示例程序,用Maven管理依赖.这篇文章是一个示例,你需要首先搭建好M ...

  8. android开发在adapter中使用反射添加元素

    android开发中最常用的控件之一就是listview,伴随listview还要有adapter和放入适配器的item.然后假设其中有一部分item的生成符合一定规律,Item item = new ...

  9. Codeforces Round #330 (Div. 1) C. Edo and Magnets 暴力

    C. Edo and Magnets Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/594/pr ...

  10. DashClock

    https://github.com/romannurik/dashclock/ https://github.com/nhaarman/DashPinkpop dashclock-master.zi ...