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 河南禄恒软件科技有限公司 ...
随机推荐
- Unity3D for iOS初级教程:Part 1/3(下)
转自:http://www.cnblogs.com/alongu3d/archive/2013/06/01/3111735.html 一个手指来统治他们 但是等等,你还没有完全完成! 如果你玩游戏有一 ...
- MVC参数传递
MVC参数传递 请求参数自动类型转换 JSP页面 form class="loginForm" action="/user/getUser" method=&q ...
- BZOJ 1191: [HNOI2006]超级英雄Hero(二分图匹配)
1191: [HNOI2006]超级英雄Hero Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 6263 Solved: 2799[Submit][ ...
- CodeForces1000A- Codehorses T-shirts
A. Codehorses T-shirts time limit per test 2 seconds memory limit per test 256 megabytes input stand ...
- CoderForces985F-Isomorphic Strings
F. Isomorphic Strings time limit per test 3 seconds memory limit per test 256 megabytes input standa ...
- 打样ov9650,无一幸免,失败告终,之调试记录
新打样的ov9650,焊接了4块,其中只有2块有反应,另外两块无反应,于是使用热风台助焊,调试 助焊无效,怀疑焊盘有问题,于是拆掉 有问题的图像不正常 已看图像,只知道缺位,于是使用示波器检查,发现d ...
- 【重温基础】15.JS对象介绍
从这篇文章开始,复习 MDN 中级教程 的内容了,在初级教程中,我和大家分享了一些比较简单基础的知识点,并放在我的 [Cute-JavaScript]系列文章中. 关于[Cute-JavaScript ...
- Java构造器浅析
Java构造器 问题引出 1.先看一段简单创建对象的例子: public class constructTest { public static void main(String[] args) { ...
- Django(一):url路由配置和模板渲染
urls.py路由用法 url基本概念 url格式 urls.py的作用 url解析过程 include的作用 kwarg的作用 name的作用 URL概念 URL(Uniform Resoure L ...
- Python的re模块,正则表达式书写方法
Python的re模块,正则表达式 #导入re模块 import re 1.match方法的使用: result = re.match(正则表达式,待匹配的字符串) 正则表达式写法: 第一部分: 字 ...