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 河南禄恒软件科技有限公司 ...
随机推荐
- 压缩感知重构算法之OMP算法python实现
压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...
- Task 的一些个人见解
Task确实比较好用且优雅 我感觉.NET要成为艺术家... public class TheTask { /// <summary> /// 直接调用是同步方法 /// </sum ...
- Python多版本管理器pyenv
查看Linux版本 [root@web ~]# cat /etc/redhat-release CentOS Linux release (Core) [root@web ~]# uname -a L ...
- VS编译命令
一.前言 由于公司要求项目需要走CI构建平台,抛弃掉之前的人工编译打包方式,所以需要调研一下项目怎么通过命令行编译出产物. 二.准备工作 在构建机器上安装vs(本文示例为vs2017) 将代码上传版本 ...
- Orleans 初接触(二) 测试用例
[返回导航] 在简单了解了Orleans 之后我们可以通过几个例子去加深印象 一.快速入门示例 这个例子也是跟着<Microsoft Orleans 之 入门指南>(https://www ...
- VS Code 成主宰、Vue 备受热捧!2019 前端开发趋势必读
前端在生产和开发中占据着越来越重要的地位,PC 端.手机端.桌面端.智能手表端等等设备都离不开前端的身影.本文将围绕框架.编程语言.工具.React.Vue 等方面,全面回顾 2019 年前端与 We ...
- HttpRunner学习6--使用parameters参数化
前言 在使用HttpRunner测试过程中,我们可能会遇到这种场景: 账号登录功能,需要输入用户名和密码,设计测试用例后有 N 种组合情况 如果测试组合比较少,比如只有2个,那我们直接在YAML脚本中 ...
- 函数式响应式编程 - Functional Reactive Programming
我们略过概念,直接看函数式响应式编程解决了什么问题. 从下面这个例子展开: 两个密码输入框,一个提交按钮. 密码.确认密码都填写并一致,允许提交:不一致提示错误. HTML 如下: <input ...
- ReadWriteLock场景应用解析
本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...
- IDEA中使用Maven模板创建Maven WebApp项目并使用Tomact来运行项目
首先需要正确安装Maven和Tomact,Maven安装和Tomact安装步骤,参见别的文章. 一.创建Maven工作空间 点击Finish按钮后,耐心等待.直到出现BUILD SUCCESS为止. ...