HibernateBaseDAO
HibernateBaseDAO接口
package com.iotek.homework.dao; import java.io.Serializable;
import java.util.List; /**
* Created by Bo on 2017/4/9.
*/
public interface HibernateBaseDAO<T> { //添加
void doCreate(T entity) throws Exception; //删除
void doDelete(T entity) throws Exception; //修改
void doUpdate(T entity) throws Exception; //查询
List<T> doFind(String hql, Object...param) throws Exception; //根据主键ID查询
T doFindById(Class<T> tClass, Serializable id) throws Exception; //分页查询
List<T> queryPage(String hql, final int START_INDEX, final int PAGE_SIZE, Object...param) throws Exception; //用于分页查询的总行数
List<Long> queryTotalRows(String hql, Object...param) throws Exception;
}
HibernateBaseDAOImpl实现类
package com.iotek.homework.dao; import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate4.HibernateCallback;
import org.springframework.orm.hibernate4.HibernateTemplate; import java.io.Serializable;
import java.util.List; /**
* Created by Bo on 2017/4/9.
*/
public class HibernateBaseDAOImpl<T> implements HibernateBaseDAO<T> { @Autowired
private HibernateTemplate hibernateTemplate; @Override
public void doCreate(T entity) throws Exception {
hibernateTemplate.save(entity);
} @Override
public void doDelete(T entity) throws Exception {
hibernateTemplate.delete(entity);
} @Override
public void doUpdate(T entity) throws Exception {
hibernateTemplate.update(entity);
} @Override
public List<T> doFind(String hql, Object... param) throws Exception {
return (List<T>) hibernateTemplate.find(hql,param);
} @Override
public T doFindById(Class<T> tClass, Serializable id) throws Exception {
return hibernateTemplate.get(tClass, id);
} @Override
public List<T> queryPage(String hql, int START_INDEX, int PAGE_SIZE, Object... param) throws Exception {
return hibernateTemplate.execute(new HibernateCallback<List<T>>() {
@Override
public List<T> doInHibernate(Session session) throws HibernateException {
Query query = session.createQuery(hql);
if(param != null){
for(int i = 0 ; i < param.length ; i ++){
query.setParameter(i, param[i]);
}
}
query.setFirstResult(START_INDEX);
query.setMaxResults(PAGE_SIZE);
return query.list();
}
});
} @Override
public List<Long> queryTotalRows(String hql, Object...param) throws Exception {
return (List<Long>) hibernateTemplate.find(hql,param);
}
}
继承使用
public interface UserDAO extends HibernateBaseDAO<User>{}
public class UserDAOImpl extends HibernateBaseDAOImpl<User> implements UserDAO{}
HibernateBaseDAO的更多相关文章
- springboot+druid
最近项目需要搭建新工程,打算使用微服务的形式搭建便于后期拓展.看了一圈发现springboot易于搭建,配置简单,强化注解功能,"just run". Spring Boot ma ...
- Java泛型 T.class的获取
public interface BaseDao<T> { T get(String id); } import java.lang.reflect.ParameterizedType; ...
- java 反射 子类泛型的class
很早之前写过利用泛型和反射机制抽象DAO ,对其中获取子类泛型的class一直不是很理解.关键的地方是HibernateBaseDao的构造方法中的 Type genType = getClass() ...
- JEECMS站群管理系统-- 自定义标签及使用自己创建的表的实现过程
下面是我自己定义的标签mycontent_list 首先,在数据库里创建了一个jc_mycontent的表,其中有id,title,content三个字段 其次,创建了一个实体类 public cla ...
- jeecms v9开发资料
开发文档 . 系统架构概述 本系统核心架构为 FreeMarker+hibernate+Spirng 的 mvc 分层架构. 1.1 分层架构模型 img 1.2 数据流转模型 (前端) img . ...
- JEECMS 自定义标签
CMS 是”Content Management System” 的缩写,意为” 内容管理系统”. 内容管理系统是企业信息化建设和电子政务的新宠,也是一个相对较新的市场.对于内容管理,业界还没有一个统 ...
- jeecms 代码生成 Tools
本文作者: IIsKei 本文链接: http://www.iskei.cn/posts/50510.html 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议 ...
- 原 jeecms9自定义标签以及使用新创建的数据库表
转载地址:https://blog.csdn.net/nice_meng/article/details/89179089 本系统使用的是jeecmsv9版本,收集网上知识后,进行个人汇总 首先,自己 ...
- jeecms9自定义标签以及使用新创建的数据库表
转载 https://blog.csdn.net/nice_meng/article/details/89179089 本系统使用的是jeecmsv9版本,收集网上知识后,进行个人汇总 首先,自己创建 ...
随机推荐
- hibernate.cfg.xml配置
hibernate.hbm2ddl.auto 配置: create:每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这 ...
- 接口测试(一)--soapui实践
一.接口的概念 接口是指系统模块与模块或系统与系统之间进行交互,一般用的多的是HTTP协议的接口.webService协议的接口,还有RPC的接口. RPC:Remote Procedure Call ...
- String数据类型转换
String是final类,提供字符串不可修改.强制类型转换,String类型无处不在.下面介绍一些常见的String数据类型转换. String数据类型转换成long.int.double.floa ...
- Escaping Closures 两点:本质是生命周期标示符
1.block需要(拷贝)保存: 2.block引用的环境变量需要处理. 相当于oc中的copy block. Escaping Closures A closure is said to escap ...
- UGUI世界坐标转换为UI本地坐标(游戏Hud的实现)
实现世界坐标的原理是: 世界坐标和UGUI的坐标分属两个坐标系,他们之间是无法进行转换的,需要通过屏幕坐标系来进行转换(因为屏幕坐标是固定的),即先将游戏场景中的世界坐标通过游戏场景Camera转化为 ...
- enote笔记语言(3)
what&why(why not)&how&when&where&which:紫色,象征着神秘而又潜蕴着强大的力量,故取紫色. key&key-memo ...
- 爬虫文件存储-1:mysql
1.连接并创建数据库 import pymysql db = pymysql.connect(host='localhost', user='root', password='root', port= ...
- python学习笔记--深拷贝与浅拷贝的区别
首先我们来讲讲我们python中的可变对象和不可变对象: 可变对象:该对象指向内存中的值是可以改变的.实际上是其所指的值直接发生改变,而不是发生复制,或者开辟一个新的地址空间.例如:列表list,字典 ...
- LVM和RAID
RAID: Redundant Arrays of Inexpensive Disks Independent Berkeley: A case for Redundent Arrays of Ine ...
- 《零压力学Python》 之 第三章知识点归纳
第三章(第一个程序)知识点归纳 编程犹如写剧本.Python函数与剧本差别不大,你可以反复调用函数,而它每次都执行预定的“脚本”(脚本也可以指整个程序). 在Python IDLE中,真正的编程是从编 ...