提取经常操作表如新增、修改、删除、查询、分页查询、统计等业务功能,形成基类,用泛型传参,有利于每个实体对象数据层继承。

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 数据层基类实现的更多相关文章

  1. BaseDAL最牛数据层基类2

    using System; using System.Data.Entity; using System.Linq; using System.Threading.Tasks; using Syste ...

  2. BaseDAL数据层基类1

    /// <summary> /// EF数据库操作基类 /// </summary> /// <typeparam name="T"></ ...

  3. C# 基于MySQL的数据层基类(MySQLHelper)

    这里介绍下比较简单的方式,引用MySql.Data.dll然后添加一个MySqlHelper类来对MySql数据库进行访问和操作. 1.将MySql.Data.dll引用到你的项目中 下载地址:MyS ...

  4. 使用SqlSugar封装的数据层基类

    首先简单封装了个DbContext public class DbContext { #region 属性字段 private static string _connectionString; /// ...

  5. 四、spring集成ibatis进行项目中dao层基类封装

    Apache iBatis(现已迁至Google Code下发展,更名为MyBatis)是当前IT项目中使用很广泛的一个半自动ORM框架,区别于Hibernate之类的全自动框架,iBatis对数据库 ...

  6. BIM工程信息管理系统-EF实体框架数据操作基类

    EF实体框架数据操作基类主要是规范增.改.查.分页.Lambda表达式条件处理,以及异步操作等特性,这样能够尽可能的符合基类这个特殊类的定义,实现功能接口的最大化重用和统一. 1.程序代码 /// & ...

  7. mysql批量插入数据的基类

    自己设计的一个mysql数据库批量添加数据的基类.用于批量向mysql数据库添加数据,子类实现起来很简单,自测性能也还不错. 1.基类实现-BatchAddBase using System.Coll ...

  8. 基于SqlSugar的开发框架循序渐进介绍(4)-- 在数据访问基类中对GUID主键进行自动赋值处理

    我们在设计数据库表的时候,往往为了方便,主键ID一般采用字符串类型或者GUID类型,这样对于数据库表记录的迁移非常方便,而且有时候可以在处理关联记录的时候,提前对应的ID值.但有时候进行数据记录插入的 ...

  9. EF实体框架数据操作基类(转)

    //----------------------------------------------------------------// Copyright (C) 2013 河南禄恒软件科技有限公司 ...

随机推荐

  1. iOS 手势及触摸

    转自:http://justsee.iteye.com/blog/1885538 一.响应链 在IOS开发中会遇到各种操作事件,通过程序可以对这些事件做出响应. 首先,当发生事件响应时,必须知道由谁来 ...

  2. dubbo 订阅 RPC 服务

    Dubbo 订阅 RPC 服务 建立消费者者项目 pom.xml <?xml version="1.0" encoding="UTF-8"?> &l ...

  3. 数据库Oracle数字函数

    数字函数不多: ROUND(arg1):四舍五入保留整数. arg1:数字类型.原数字. arg2:整数类型.小数点保留的位数. SQL> select round(1256.564,2) fr ...

  4. CodeForces-Round524 A~D

    A. Petya and Origami time limit per test  1 second   memory limit per test  256 megabytes input stan ...

  5. ACM-ICPC 2018 焦作赛区网络预赛J题 Participate in E-sports

    Jessie and Justin want to participate in e-sports. E-sports contain many games, but they don't know ...

  6. CodeForces1006C-Three Parts of the Array

    C. Three Parts of the Array time limit per test 1 second memory limit per test 256 megabytes input s ...

  7. rsync服务的讲解

    第2章 rsync备份服务器的搭建 2.1 rsync备份服务器的概念 2.1.1 概念 rsync服务器对网站服务器数据进行备份(防止数据丢失和数据进行恢复) rsync服务器对网站服务器数据进行对 ...

  8. python之pymysql模块简单应用

    众所周知,想要在python程序中执行SQL语句需要使用第三方模块:pymysql. 下面,我将为大家简述一下pymysql第三方库的安装到使用的大体流程. pymysql的安装 1.windows系 ...

  9. 人生苦短,我用Python(3)

    1.对列表进行排序: (1)使用列表对象的sort()方法: 列表对象提供了sort()方法用于对原列表中的元素进行排序.排序后原列表中的元素顺序将发生改变.改变对象的sort()方法的语法格式如下: ...

  10. spring cloud详解

    1.Spring boot与Spring cloud 之间的关系 Spring boot 是 Spring 的一套快速配置脚手架,可以基于spring boot 快速开发单个微服务 ​ Spring ...