Hibernate 数据层基类实现
提取经常操作表如新增、修改、删除、查询、分页查询、统计等业务功能,形成基类,用泛型传参,有利于每个实体对象数据层继承。
package com.base.dao; import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set; import javax.annotation.Resource; import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.CriteriaSpecification;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository; /**
* 数据库操作接口实现类,where条件使用命名参数
*
*/
@Repository("baseDao")
@SuppressWarnings("all")
public class BaseDao<T> { private SessionFactory sessionFactory; public SessionFactory getSessionFactory() {
return sessionFactory;
} @Autowired
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
} private Session getCurrentSession() {
return sessionFactory.getCurrentSession();//获取数据库链接
} /**
* 保存一个对象
*
* @param T 要保存的JavaBean 对象
*
*/
public Serializable save(T o) {
return this.getCurrentSession().save(o);
} /**
* 删除一个对象
*
* @param T 对象
*
*/
public void delete(T o) {
this.getCurrentSession().delete(o);
} /**
* 修改一个对象
*
* @param T 对象
*
*/
public void update(T o) {
this.getCurrentSession().update(o);
} /**
* 查询对象集合
*
* @param Hql格式查询语句
* @return 对象集合
*/
public List<T> find(String hql) {
return this.getCurrentSession().createQuery(hql).list();
} /**
* 查询对象集合
*
* @param Hql格式语句
* @param map参数
* @return 对象集合
*/
public List<T> find(String hql, Map<String, Object> map) {
Query q = this.getCurrentSession().createQuery(hql);
if (map != null) {
Set<String> keySet = map.keySet();
for (String string : keySet) {
Object obj = map.get(string);
if (obj instanceof Collection<?>) {
q.setParameterList(string, (Collection<?>) obj);
} else if (obj instanceof Object[]) {
q.setParameterList(string, (Object[]) obj);
} else {
q.setParameter(string, obj);
}
}
}
return q.list();
} /**
* 分页查询对象集合
*
* @param Hql格式语句
* @param map参数
* @param 页码
* @param 每页记录数
* @return 对象集合
**/
public List<T> find(String hql, Map<String, Object> map, Integer page, Integer rows) {
if (page == null || page < 1) {
page = 1;
}
if (rows == null || rows < 1) {
rows = 10;
}
Query q = this.getCurrentSession().createQuery(hql);
if (map != null) {
Set<String> keySet = map.keySet();
for (String string : keySet) {
Object obj = map.get(string);
if (obj instanceof Collection<?>) {
q.setParameterList(string, (Collection<?>) obj);
} else if (obj instanceof Object[]) {
q.setParameterList(string, (Object[]) obj);
} else {
q.setParameter(string, obj);
}
}
}
return q.setFirstResult((page - 1) * rows).setMaxResults(rows).list();
} /**
* 查询指定对象
*
* @param 对象
* @param 主键值
* @return 获取对象
*/
public T get(Class<T> c, Serializable id) {
return (T) this.getCurrentSession().get(c, id);
} /**
* 查询指定对象
*
* @param hql查询语句
* @param map参数
* @return 相应对象
*/
public T get(String hql, Map<String, Object> map) {
List<T> l = this.find(hql, map);
if (l != null && l.size() > 0) {
return l.get(0);
} else {
return null;
}
} /**
* 查询记录数
*
* @param hql查询语句
* @param map参数
* @return 记录数
*/
public Long count(String hql, Map<String, Object> map) {
Query q = this.getCurrentSession().createQuery(hql);
if (map != null) {
Set<String> keySet = map.keySet();
for (String string : keySet) {
Object obj = map.get(string);
if (obj instanceof Collection<?>) {
q.setParameterList(string, (Collection<?>) obj);
} else if (obj instanceof Object[]) {
q.setParameterList(string, (Object[]) obj);
} else {
q.setParameter(string, obj);
}
}
}
return (Long) q.uniqueResult();
} /**
* 执行更新语句
*
* @param hql查询语句
* @param map参数
* @return 响应数目
*/
public Integer executeHql(String hql, Map<String, Object> map) {
Query q = this.getCurrentSession().createQuery(hql);
if (map != null) {
Set<String> keySet = map.keySet();
for (String string : keySet) {
Object obj = map.get(string);
if (obj instanceof Collection<?>) {
q.setParameterList(string, (Collection<?>) obj);
} else if (obj instanceof Object[]) {
q.setParameterList(string, (Object[]) obj);
} else {
q.setParameter(string, obj);
}
}
}
return q.executeUpdate();
} /**
* 执行查询语句
*
* @param hql查询语句
* @param map 参数
* @return 响应数目
*/
public List<Object> queryHql(String hql, Map<String, Object> map) {
Query q = this.getCurrentSession().createQuery(hql);
if (map != null) {
Set<String> keySet = map.keySet();
for (String string : keySet) {
Object obj = map.get(string);
if (obj instanceof Collection<?>) {
q.setParameterList(string, (Collection<?>) obj);
} else if (obj instanceof Object[]) {
q.setParameterList(string, (Object[]) obj);
} else {
q.setParameter(string, obj);
}
}
}
return q.list();
} /**
* 执行查询语句
*
* @param hql查询语句
* @param map 参数
* @return Map记录返回集合
*/
public List<Object> queryHqlMap(String hql, Map<String, Object> map) {
Query q = this.getCurrentSession().createQuery(hql);
if (map != null) {
Set<String> keySet = map.keySet();
for (String string : keySet) {
Object obj = map.get(string);
if (obj instanceof Collection<?>) {
q.setParameterList(string, (Collection<?>) obj);
} else if (obj instanceof Object[]) {
q.setParameterList(string, (Object[]) obj);
} else {
q.setParameter(string, obj);
}
}
}
q.setResultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP);
return q.list();
}
}
调用示例
@Repository("softwareDao")
public class SoftwareDao extends BaseDao<Software> {
public void delete(String terminalId) {
String hql = "delete from Software WHERE terminalId = :terminalId";
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("terminalId", terminalId);
executeHql(hql, paramMap);
}
}
Hibernate 数据层基类实现的更多相关文章
- BaseDAL最牛数据层基类2
using System; using System.Data.Entity; using System.Linq; using System.Threading.Tasks; using Syste ...
- BaseDAL数据层基类1
/// <summary> /// EF数据库操作基类 /// </summary> /// <typeparam name="T"></ ...
- C# 基于MySQL的数据层基类(MySQLHelper)
这里介绍下比较简单的方式,引用MySql.Data.dll然后添加一个MySqlHelper类来对MySql数据库进行访问和操作. 1.将MySql.Data.dll引用到你的项目中 下载地址:MyS ...
- 使用SqlSugar封装的数据层基类
首先简单封装了个DbContext public class DbContext { #region 属性字段 private static string _connectionString; /// ...
- 四、spring集成ibatis进行项目中dao层基类封装
Apache iBatis(现已迁至Google Code下发展,更名为MyBatis)是当前IT项目中使用很广泛的一个半自动ORM框架,区别于Hibernate之类的全自动框架,iBatis对数据库 ...
- BIM工程信息管理系统-EF实体框架数据操作基类
EF实体框架数据操作基类主要是规范增.改.查.分页.Lambda表达式条件处理,以及异步操作等特性,这样能够尽可能的符合基类这个特殊类的定义,实现功能接口的最大化重用和统一. 1.程序代码 /// & ...
- mysql批量插入数据的基类
自己设计的一个mysql数据库批量添加数据的基类.用于批量向mysql数据库添加数据,子类实现起来很简单,自测性能也还不错. 1.基类实现-BatchAddBase using System.Coll ...
- 基于SqlSugar的开发框架循序渐进介绍(4)-- 在数据访问基类中对GUID主键进行自动赋值处理
我们在设计数据库表的时候,往往为了方便,主键ID一般采用字符串类型或者GUID类型,这样对于数据库表记录的迁移非常方便,而且有时候可以在处理关联记录的时候,提前对应的ID值.但有时候进行数据记录插入的 ...
- EF实体框架数据操作基类(转)
//----------------------------------------------------------------// Copyright (C) 2013 河南禄恒软件科技有限公司 ...
随机推荐
- Pandas学习(三)——NBA球员薪资分析
欢迎加入python学习交流群 667279387 学习笔记汇总 Pandas学习(一)–数据的导入 pandas学习(二)–双色球数据分析 pandas学习(三)–NAB球员薪资分析 pandas学 ...
- ACM小组的古怪象棋
Description ACM小组的Samsara和Staginner对中国象棋特别感兴趣,尤其对马(可能是因为这个棋子的走法比较多吧)的使用进行深入研究.今天他们又在 构思一个古怪的棋局:假如Sam ...
- Web 前端学习大纲
什么是前端? 前端即网站前台部分,也叫前端开发,运行在PC端,移动端等浏览器上展现给用户浏览的网页.随着互联网的发展,HTML5,CSS3,前端框架的应用,跨平台响应式网页设计能够适应各种屏幕分辨率, ...
- Orleans 初接触(一) 入门例子
[返回导航] 在简单了解了Orleans 之后我们可以通过几个例子去加深印象 一.Orleans入门例子 这个例子是跟着<Orleans入门例子>(https://www.cnblogs. ...
- python学习-def1
# 4.可变参数\return# 可变参数:参数个数不固定 .调用的时候来确定有几个参数.# 第一种:*args 在函数内部,是以元组的形式来表示.def my_args(*args): # 放在位置 ...
- [修仙之路]React-Redux 金丹篇
作者:水涛追求技术,但又不失生活的乐趣,过自己想要的生活 React-Redux简介 React-Redux可以使你的React项目拥有全局数据,可以使多个React组件读取到全局数据并且组件中也可修 ...
- NodeJS4-3静态资源服务器实战_优化成近似同步写法
实例3 上面有点回调,优化成近似同步的写法 route.js const fs =require('fs') const promisify = require('util').promisify; ...
- 《Java基础知识》Java继承的概念和实现
继承时类和类之间的关系,是一个很简单很直观的概念,与显示生活中的继承(例如儿子继承了父亲财产)类似. 继承可以理解为一个类从另一个类中获取方法和属性的过程.如果类B继承于类A,那么类B就拥有类A的属性 ...
- JavaScript图形实例:五角星
1.五角星 在半径为80的圆周上取5个点,用这5个点依次首尾连接画5条线,可以绘制出一个五角星图案. 编写如下的HTML代码. <!DOCTYPE html> <head> & ...
- Yii2 框架跑脚本时内存泄漏问题分析
现象 在跑 edu_ocr_img 表的归档时,每跑几万个数据,都会报一次内存耗尽 PHP Fatal error: Allowed memory size of 134217728 bytesex ...