在上一篇文章中写了如何直接利用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. windbg命令分类与概述

    WinDBG的大多数功能是以命令方式工作的, 本系列将介绍WinDBG的三类命令, 标准命令, 元命令和扩展命令. =============== 标准命令 =============== 标准命令用 ...

  2. python视频教程大全

    python3英文视频教程(全87集) http://pan.baidu.com/s/1dDnGBvV python从入门到精通视频(全60集)链接:http://pan.baidu.com/s/1e ...

  3. js 限定上传文件大小 类型

    方案1 :限定大小 <html> <head> <script type="text/javascript">   var isIE = /ms ...

  4. wikioi 3027 线段覆盖 2

    题目描述 Description 数轴上有n条线段,线段的两端都是整数坐标,坐标范围在0~1000000,每条线段有一个价值,请从n条线段中挑出若干条线段,使得这些线段两两不覆盖(端点可以重合)且线段 ...

  5. android 对一个合并后的联系人选择编辑,手机屏幕会缓慢变暗后再进入编辑界面的问题

    1.       手机上有一个合并过的联系人 2.       编辑合并后的联系人 3.       手机屏幕会缓慢变暗之后再进入编辑界面. 首先找到contacts源码包下的EditContactA ...

  6. java对象转JSON JS取JSON数据

    JsonConfig config = new JsonConfig(); config.setJsonPropertyFilter(new PropertyFilter() { @Override ...

  7. google域名邮箱申请 gmail域名邮箱申请(企业应用套件)指南

    近期一直有朋友问我怎么注冊域名邮箱,于是整理出来,贴出来吧.已经非常具体了,你能够直接对比着做了.什么是域名邮箱? 假设你有一个自己的域名,通过对域名dns进行设置,创建以自己的域名作为邮箱后缀的邮箱 ...

  8. Python 类型的分类

    1.存储模型,对象可以保存多少个值.如果只能保存一个值,是原子类型.如果可以保存多个值,是容器类型.数值是原子类型,元组,列表,字典是容器类型.考虑字符串,按道理,字符串应该是容器类型,因为它包含多个 ...

  9. PS常见错误-无法完成请求,因为文件格式模块不能解析该文件

    无法完成请求,因为文件格式模块不能解析该文件 将图片格式变成.jpg格式就可以了

  10. Codeforces Round #250 (Div. 1) A. The Child and Toy 水题

    A. The Child and Toy Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/438/ ...