使用HibernateDaoSupport抽取BaseDao
一、BaseDao接口及实现的代码
package com.tax.core.dao;
import java.io.Serializable;
import java.util.List;
/**
* BaseDao
* @author ZENG.XIAO.YAN
* @date 2017年6月29日 上午10:36:57
* @version v1.0
*/
public interface BaseDao<T> {
/**
* 新增
* @param entity
*/
public void save(T entity);
/**
* 更新
* @param entity
*/
public void update(T entity);
/**
* 根据id删除
* @param id
*/
public void deleteById(Serializable id);
/**
* 通过id查找
* @param id
* @return 实体
*/
public T findById(Serializable id);
/**
* 查找所有
* @return List集合
*/
public List<T> findAll();
}
package com.tax.core.dao;
import java.io.Serializable;
import java.util.List;
/**
* BaseDao
* @author ZENG.XIAO.YAN
* @date 2017年6月29日 上午10:36:57
* @version v1.0
*/
public interface BaseDao<T> {
/**
* 新增
* @param entity
*/
public void save(T entity);
/**
* 更新
* @param entity
*/
public void update(T entity);
/**
* 根据id删除
* @param id
*/
public void deleteById(Serializable id);
/**
* 通过id查找
* @param id
* @return 实体
*/
public T findById(Serializable id);
/**
* 查找所有
* @return List集合
*/
public List<T> findAll();
}
package com.tax.core.dao.impl;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import com.tax.core.dao.BaseDao;
/**
* BaseDaoImpl
* @author ZENG.XIAO.YAN
* @date 2017年6月29日 下午12:23:16
* @version v1.0
*/
public abstract class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T> {
private Class<T> clazz;
// 按照类型自动注入SessionFactory; 在实例化的时候,Spring按照形参的类型自动注入
@Autowired
public void setMySessionFactory(SessionFactory sessionFactory){
setSessionFactory(sessionFactory);
}
public BaseDaoImpl() {
//this表示当前被实例化的对象;如UserDaoImpl
ParameterizedType pt = (ParameterizedType)this.getClass().getGenericSuperclass();//BaseDaoImpl<User>
clazz = (Class<T>)pt.getActualTypeArguments()[0];
}
/**
* 获取session
* @return session
*/
public Session getCurrentSession(){
Session session = null;
try {
session = getSessionFactory().getCurrentSession();
} catch (HibernateException e) {
throw new RuntimeException("getCurrentSession error", e);
//session = getSessionFactory().openSession();
}
return session;
}
@Override
public void save(T entity) {
getHibernateTemplate().save(entity);
}
@Override
public void update(T entity) {
getHibernateTemplate().update(entity);
}
@Override
public void deleteById(Serializable id) {
getHibernateTemplate().delete(findById(id));
}
@Override
public T findById(Serializable id) {
return getHibernateTemplate().get(clazz, id);
}
@Override
public List<T> findAll() {
Session session = getCurrentSession();
Query query = session.createQuery("FROM "+ clazz.getSimpleName());
return query.list();
}
}
package com.tax.core.dao.impl;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport;
import com.tax.core.dao.BaseDao;
/**
* BaseDaoImpl
* @author ZENG.XIAO.YAN
* @date 2017年6月29日 下午12:23:16
* @version v1.0
*/
public abstract class BaseDaoImpl<T> extends HibernateDaoSupport implements BaseDao<T> {
private Class<T> clazz;
// 按照类型自动注入SessionFactory; 在实例化的时候,Spring按照形参的类型自动注入
@Autowired
public void setMySessionFactory(SessionFactory sessionFactory){
setSessionFactory(sessionFactory);
}
public BaseDaoImpl() {
//this表示当前被实例化的对象;如UserDaoImpl
ParameterizedType pt = (ParameterizedType)this.getClass().getGenericSuperclass();//BaseDaoImpl<User>
clazz = (Class<T>)pt.getActualTypeArguments()[0];
}
/**
* 获取session
* @return session
*/
public Session getCurrentSession(){
Session session = null;
try {
session = getSessionFactory().getCurrentSession();
} catch (HibernateException e) {
throw new RuntimeException("getCurrentSession error", e);
//session = getSessionFactory().openSession();
}
return session;
}
@Override
public void save(T entity) {
getHibernateTemplate().save(entity);
}
@Override
public void update(T entity) {
getHibernateTemplate().update(entity);
}
@Override
public void deleteById(Serializable id) {
getHibernateTemplate().delete(findById(id));
}
@Override
public T findById(Serializable id) {
return getHibernateTemplate().get(clazz, id);
}
@Override
public List<T> findAll() {
Session session = getCurrentSession();
Query query = session.createQuery("FROM "+ clazz.getSimpleName());
return query.list();
}
}



二、使用写好的BaseDao和BaseImpl


三、结束语
使用HibernateDaoSupport抽取BaseDao的更多相关文章
- 案例50-crm练习dao层的抽取BaseDao
1 抽取BaseDao 2 BaseDao设计思路 3 BaseDao接口书写 package www.test.dao; import java.io.Serializable; import ja ...
- Dao层抽取BaseDao公共方法
设计IBseDao接口,定义公共的CRUD方法. // IBaseDao 接口,定义公共的CRUD方法 public interface IBaseDao<T> { public void ...
- Hibernate抽取BaseDao
package com.cky.dao; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate. ...
- ssm框架整合抽取BaseDao接口
import java.io.Serializable; import java.util.List; /** * DAO基础操作模板 * * @param <T> 泛型 */ publi ...
- JAVAEE——SSH项目实战02:客户列表和BaseDao封装
作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7129152.html 该项目在SSH三大框架整合基础上进行开发:http://www.c ...
- JavaEE笔记——BaseDao的使用
在Hibernate框架中使用BaseDao主要的作用是减少冗余代码,在对Dao的操作中CRUD可以说是最普通最常见的操作了,基本上面对不同的数据表都会有类似的CRUD操作,BaseDao的思想就是把 ...
- (六)编写基类BaseDao
在action中继承了ActionSupport和其它一些公共属性,如selectedRow等:可能以后还会产生更多公共的内容,所以应该把这些共有的抽取出来,放入到一个基本action中,我们命名为B ...
- 公共dao的抽取
package cn.sxx.dao; import java.util.List; import cn.sxx.model.Dep; import cn.sxx.query.DepQuery; pu ...
- 利用泛型抽取Dao层,加事务注解问题(java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType)
想利用泛型抽取BaseDao层,简化操作时出现故障: @Transactional这个注解是能够继承的.于是就想写在抽取的BaseDao层上,让实现的类能够不用写@Transactional,就可开启 ...
随机推荐
- as 打包报错
错误:Android Error:Execution failed for task ':app:transformClassesAndResourcesWithProguardForRelease' ...
- Android--WebView 自适应代码
//WebView自适应代码 private String getHtmlData(String bodyHTML) { String head = "<head>" ...
- 前端开发使用Photoshop切图详细步骤
切图的主要目的是从设计师提供的psd中获取网页制作所要的资源 一.界面设置 1. 新建文件,调整界面大小,背景设置为透明 2. 自动选择,把组切换为图层 3. 添加窗口内容,一共四项:图层.历史纪录. ...
- aix rootvg镜像
就一般生产系统而已,操作系统层面都要进行备份,而最常见的操作系统备份方式之一就是做镜像(mirror),而实践过程中,往往是把rootvg这个卷组做镜像操作.查看rootvg是否已经进行镜像方法: 1 ...
- c#中Indexof()和Split()的用法
C#中IndexOf的使用 indexOf() 查找字串中指定字符或字串首次出现的位置,返首索引值,如: str1.IndexOf("字"): //查找“字”在str1中的索引值( ...
- "System.OutOfMemoryException" exception when you execute a query in SQL Server Management Studio (转自MSDN)
Symptoms When you use Microsoft SQL Server Management Studio (SSMS) to run an SQL query that returns ...
- 总结Linux 下Redis 操作常用命令(转)
Redis的配置 Linux下安装 ]# wget http://download.redis.io/releases/redis-2.8.17.tar.gz ]# tar xzf redis-2.8 ...
- 无法获取链接服务器 "XXX" 的 OLE DB 访问接口 "SQLNCLI10" 的架构行集 "DBSCHEMA_TABLES_INFO"。该访问接口支持该接口,但使用该接口时返回了失败代码。
1. SQL 2000 下载补丁 SQL2KSP4 ,进行安装 2.找到SQL2KSP4\install\instcat.sql 并在sql2000 中打开查询分析器中执行
- 16. 窗口函数 (Window Function) 的使用
从SQL Server 2005起,SQL Server开始支持窗口函数 (Window Function),以及到SQL Server 2012,窗口函数功能增强,目前为止支持以下几种窗口函数: 1 ...
- python基础学习8----文件基本操作
一.文件的打开,open函数 f = open(file_name,mode)#创建文件对象 打开模式有很多种 1. 'r': 以只读方式打开文件.文件的指针将会放在文件的开头.这是默认模式. 2. ...