在上一篇文章中写了如何直接利用HibernateTemplate进行数据库操作,但在一般的项目中很少直接得到HibernateTemplate的
Bean对象从而操作数据库的,下面就简要介绍一下实现通用的数据库操作对象Dao类:

1、最基本的数据库操作接口BaseDao<T>:

  1. import java.io.Serializable;
  2. import java.util.List;
  3.  
  4. public interface BaseDao<T> {
  5.  
  6. Serializable save (T entity);
  7.  
  8. void delete (T entity);
  9. void delete (Class<T> clazz,Serializable id);
  10.  
  11. void update(T entity);
  12.  
  13. T get(Class<T> clazz,Serializable id);
  14.  
  15. List<T> findAll(Class<T> clazz);
  16.  
  17. List<T> findAll(Class<T> clazz,String where);
  18.  
  19. }

2、实现BaseDao<T>的实现类BaseDaoImpl<T>:

  1. import java.io.Serializable;
  2. import java.util.List;
  3.  
  4. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
  5.  
  6. public class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T>{
  7.  
  8. @Override
  9. public Serializable save(T entity) {
  10. // TODO Auto-generated method stub
  11. return getHibernateTemplate().save(entity);
  12. }
  13.  
  14. @Override
  15. public void delete(T entity) {
  16. // TODO Auto-generated method stub
  17. getHibernateTemplate().delete(entity);
  18.  
  19. }
  20.  
  21. @Override
  22. public void delete(Class clazz, Serializable id) {
  23. // TODO Auto-generated method stub
  24. delete(get(clazz,id));
  25.  
  26. }
  27.  
  28. @Override
  29. public void update(T entity) {
  30. // TODO Auto-generated method stub
  31. getHibernateTemplate().saveOrUpdate(entity);
  32.  
  33. }
  34.  
  35. @Override
  36. public T get(Class clazz, Serializable id) {
  37. // TODO Auto-generated method stub
  38. return (T) getHibernateTemplate().get(clazz, id);
  39. }
  40.  
  41. @Override
  42. public List<T> findAll(Class clazz) {
  43. // TODO Auto-generated method stub
  44. return (List<T>) getHibernateTemplate().find("select en from "+clazz.getSimpleName()+" en");
  45. }
  46.  
  47. @Override
  48. public List findAll(Class clazz, String where) {
  49. // TODO Auto-generated method stub
  50. return getHibernateTemplate().find("select en from "+clazz.getSimpleName()+" en where "+where);
  51. }
  52.  
  53. }

3、实体User:

  1. import java.util.Date;
  2.  
  3. import javax.persistence.Column;
  4. import javax.persistence.Entity;
  5. import javax.persistence.GeneratedValue;
  6. import javax.persistence.GenerationType;
  7. import javax.persistence.Id;
  8. import javax.persistence.Temporal;
  9. import javax.persistence.TemporalType;
  10.  
  11. @Entity
  12. public class User {
  13.  
  14. @Id
  15. @Column(name="user_id")
  16. @GeneratedValue(strategy=GenerationType.IDENTITY)
  17. private Integer id;
  18. @Column(name="user_name")
  19. private String name;
  20. private String pass;
  21. @Temporal(TemporalType.DATE)
  22. private Date birth;
  23.  
  24. public User() {
  25.  
  26. }
  27.  
  28. public User( String name, String pass, Date birth) {
  29. super();
  30. this.name = name;
  31. this.pass = pass;
  32. this.birth = birth;
  33. }
  34.  
  35. public Integer getId() {
  36. return id;
  37. }
  38.  
  39. public void setId(Integer id) {
  40. this.id = id;
  41. }
  42.  
  43. public String getName() {
  44. return name;
  45. }
  46. public void setName(String name) {
  47. this.name = name;
  48. }
  49. public String getPass() {
  50. return pass;
  51. }
  52. public void setPass(String pass) {
  53. this.pass = pass;
  54. }
  55.  
  56. public Date getBirth() {
  57. return birth;
  58. }
  59.  
  60. public void setBirth(Date birth) {
  61. this.birth = birth;
  62. }
  63.  
  64. }

4、针对User类的数据库操作Dao的接口,由于继承了BaseDao<User>,基本的函数接口也不用再写了,空的接口是为了日后的扩展:

  1. import com.csu.comm.dao.BaseDao;
  2. import com.csu.domain.User;
  3.  
  4. public interface UserDao extends BaseDao<User>{
  5.  
  6. }

5、实现了BaseDao<User>的类UserDaoImpl,也因为继承了BaseDaoImpl<User>,基本的操作已经都实现了,空体也是为了日后的扩展:

  1. import java.io.Serializable;
  2. import java.util.List;
  3.  
  4. import com.csu.comm.dao.BaseDaoImpl;
  5. import com.csu.dao.UserDao;
  6. import com.csu.domain.User;
  7.  
  8. public class UserDaoImpl extends BaseDaoImpl<User> implements UserDao {
  9.  
  10. }

6、c3p0数据库连接池所需要的数据库配置信息,放置在jdbc.properties文件中,这样也方便日后修改只需要改动属性文件,
而不需要改动配置文件:

  1. user=root
  2. password=7890
  3. driverClass=com.mysql.jdbc.Driver
  4. jdbcUrl=jdbc:mysql://localhost:3306/spring
  5. maxPoolSize=200
  6. minPoolSize=2
  7. initialPoolSize=2

7、hibernate配置文件hibernate.cfg.xml:

  1. <?xml version='1.0' encoding='utf-8'?>
  2. <!DOCTYPE hibernate-configuration PUBLIC
  3. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  4. "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
  5.  
  6. <hibernate-configuration>
  7.  
  8. <session-factory>
  9. <!-- hibernate 所需的配置信息 -->
  10. <property name="show_sql">true</property>
  11. <property name="dialect">org.hibernate.dialect.MySQLDialect</property><!--方言-->
  12. <property name="format_sql">true</property>
  13. <property name="hbm2ddl.auto">update</property>
  14.  
  15. <!-- hibernate 指定映射类 -->
  16. <mapping class="com.csu.domain.User"/>
  17.  
  18. </session-factory>
  19.  
  20. </hibernate-configuration>

8、spring的配置文件:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <!-- 整个Spring 文件的根元素就是beans -->
  4. <beans xmlns="http://www.springframework.org/schema/beans"
  5. xmlns:p="http://www.springframework.org/schema/p"
  6. xmlns:util="http://www.springframework.org/schema/util"
  7. xmlns:context="http://www.springframework.org/schema/context"
  8. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  9. xsi:schemaLocation="http://www.springframework.org/schema/beans
  10. http://www.springframework.org/schema/beans/spring-beans.xsd
  11.  
  12. http://www.springframework.org/schema/util
  13. http://www.springframework.org/schema/util/spring-util.xsd
  14.  
  15. http://www.springframework.org/schema/context
  16. http://www.springframework.org/schema/context/spring-context.xsd
  17. ">
  18.  
  19. <!-- *****************配置数据源*********************** -->
  20.  
  21. <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  22.  
  23. <property name="locations">
  24. <!-- 列出需要读取的属性文件 -->
  25. <list>
  26. <value>classpath:jdbc.properties</value>
  27. </list>
  28. </property>
  29.  
  30. </bean>
  31.  
  32. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
  33. p:user="${user}"
  34. p:password="${password}"
  35. p:driverClass="${driverClass}"
  36. p:jdbcUrl="${jdbcUrl}"
  37. p:maxPoolSize="${maxPoolSize}"
  38. p:minPoolSize="${minPoolSize}"
  39. p:initialPoolSize="${initialPoolSize}"
  40. />
  41. <!-- *****************配置数据源*********************** -->
  42.  
  43. <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
  44. p:dataSource-ref="dataSource"
  45. p:configLocation="classpath:hibernate.cfg.xml"
  46. />
  47.  
  48. <!--因为UserDaoImpl继承了BaseDaoImpl<T>, BaseDaoImpl<T> 继承了 HibernateDaoSupport,HibernateDaoSupport有setSessionFactory函数-->
  49. <bean id="userDao" class="com.csu.dao.impl.UserDaoImpl"
  50. p:sessionFactory-ref="sessionFactory"
  51.  
  52. />
  53.  
  54. </beans>

10、测试主类:

  1. import java.sql.SQLException;
  2. import java.util.Date;
  3. import java.util.List;
  4.  
  5. import org.hibernate.FlushMode;
  6. import org.hibernate.HibernateException;
  7. import org.hibernate.Session;
  8. import org.springframework.context.ApplicationContext;
  9. import org.springframework.context.support.ClassPathXmlApplicationContext;
  10. import org.springframework.orm.hibernate3.HibernateCallback;
  11. import org.springframework.orm.hibernate3.HibernateTemplate;
  12.  
  13. import com.csu.dao.UserDao;
  14. import com.csu.domain.User;
  15.  
  16. public class SpHiTest {
  17.  
  18. public static void main(String[] args) {
  19. ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
  20.  
  21. UserDao userDao = ctx.getBean("userDao",UserDao.class);
  22. List<User> users = userDao.findAll(User.class);
  23. for(Object u : users){
  24. System.out.println(((User) u).getName());
  25. }
  26.  
  27. }
  28. }

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. Java日期处理类

    1.Date java.util.Date 2.Calendar 日历类,通过getInstance()获取实例对象,可以获取年月日时分秒 3.SimpleDateFormat 日期格式化,forma ...

  2. C#获取当前应用程序所在路径及环境变量

    一.获取当前文件的路径 string str1=Process.GetCurrentProcess().MainModule.FileName;//可获得当前执行的exe的文件名. string st ...

  3. servler--请求重定向

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExcepti ...

  4. 解决mysql导入导出数据乱码问题

    最近在linux上面用mysqldump导出数据,放在windows系统中导入就会出现中文乱码,然后就会导致出现: Unknown MySQL server host和Can't connect to ...

  5. C++ 对象没有显式初始化

    C++ 对象没有显式初始化,结果是什么? 首先考虑非静态对象 1.方法内的局部对象: a.类类型:调用default构造方法 b.基本类型:值不确定 2.类中的数据成员: a.类类型:调用defaul ...

  6. 算法:排序----Java选择排序

    public static void selectionSort(int[] arr) { int len = arr.length; for (int i = 0; i < len; i++) ...

  7. C++ AppendMenu

    主题 1.  系统菜单下面添加自定义菜单 2. 3. 4. 5.         AppendMenu The AppendMenu function appends a new item to th ...

  8. 网络IPC:套接字之非阻塞和异步I/O

    通常,recv函数没有数据可用时会阻塞等待.同样地,当套接字输出队列没有足够空间来发送消息时函数send会阻塞.在套接字非阻塞模式下,行为会改变.在这种情况下,这些函数不会阻塞而是失败,设置errno ...

  9. cocos2dx libiconv 转码

    iconv下载(Android)已编译完的iconv包(用这个即可) ios自带libiconv,只需#include <iconv.h>即可  步骤 1.libiconv解压文件放置 直 ...

  10. 实例源码--Android手机狗(防盗)源码

      下载源码   技术要点: 1. SharedPreferences数据保存 2. SIM卡状态监 听 3. 发短信.发邮 箱.获取通讯信息 4. 源码带详细的 中文注释 ...... 详细介绍: ...