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 ...
随机推荐
- Java日期处理类
1.Date java.util.Date 2.Calendar 日历类,通过getInstance()获取实例对象,可以获取年月日时分秒 3.SimpleDateFormat 日期格式化,forma ...
- C#获取当前应用程序所在路径及环境变量
一.获取当前文件的路径 string str1=Process.GetCurrentProcess().MainModule.FileName;//可获得当前执行的exe的文件名. string st ...
- servler--请求重定向
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExcepti ...
- 解决mysql导入导出数据乱码问题
最近在linux上面用mysqldump导出数据,放在windows系统中导入就会出现中文乱码,然后就会导致出现: Unknown MySQL server host和Can't connect to ...
- C++ 对象没有显式初始化
C++ 对象没有显式初始化,结果是什么? 首先考虑非静态对象 1.方法内的局部对象: a.类类型:调用default构造方法 b.基本类型:值不确定 2.类中的数据成员: a.类类型:调用defaul ...
- 算法:排序----Java选择排序
public static void selectionSort(int[] arr) { int len = arr.length; for (int i = 0; i < len; i++) ...
- C++ AppendMenu
主题 1. 系统菜单下面添加自定义菜单 2. 3. 4. 5. AppendMenu The AppendMenu function appends a new item to th ...
- 网络IPC:套接字之非阻塞和异步I/O
通常,recv函数没有数据可用时会阻塞等待.同样地,当套接字输出队列没有足够空间来发送消息时函数send会阻塞.在套接字非阻塞模式下,行为会改变.在这种情况下,这些函数不会阻塞而是失败,设置errno ...
- cocos2dx libiconv 转码
iconv下载(Android)已编译完的iconv包(用这个即可) ios自带libiconv,只需#include <iconv.h>即可 步骤 1.libiconv解压文件放置 直 ...
- 实例源码--Android手机狗(防盗)源码
下载源码 技术要点: 1. SharedPreferences数据保存 2. SIM卡状态监 听 3. 发短信.发邮 箱.获取通讯信息 4. 源码带详细的 中文注释 ...... 详细介绍: ...