package dev.spring.mvc.base;
import java.io.Serializable;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.persistence.Id;
import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Example;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import dev.spring.mvc.common.enums.EOrderMode;
import dev.spring.mvc.common.util.HqlUtils;
import dev.spring.mvc.common.util.QueryBuilderUtils;
import dev.spring.mvc.entity.vo.Pager;
import dev.spring.mvc.entity.vo.QueryBuilder;
@Transactional
public class BaseDao<T extends Serializable> {
@Resource
protected SessionFactory sessionFactory;
// 当前泛型类
@SuppressWarnings("rawtypes")
private Class entityClass = null;
// 当前主键名称
private String pkname = null;
private String HQL_LIST_ALL = null;
private String HQL_COUNT_ALL = null;
private Logger log = Logger.getLogger(BaseDao.class);
@SuppressWarnings("rawtypes")
public Class getEntityClass() {
return entityClass;
}
@SuppressWarnings("rawtypes")
public void setEntityClass(Class entityClass) {
this.entityClass = entityClass;
}
public BaseDao() {
init();
}
@SuppressWarnings("rawtypes")
private void init() {
try {
// 获取当前泛型类
Type type = this.getClass().getGenericSuperclass();
if (type.toString().indexOf("BaseDao") != -1) {
ParameterizedType type1 = (ParameterizedType) type;
Type[] types = type1.getActualTypeArguments();
setEntityClass((Class) types[0]);
} else {
type = ((Class) type).getGenericSuperclass();
ParameterizedType type1 = (ParameterizedType) type;
Type[] types = type1.getActualTypeArguments();
setEntityClass((Class) types[0]);
}
getPkname();
HQL_LIST_ALL = "from " + this.entityClass.getSimpleName()
+ " order by " + pkname + " asc";
HQL_COUNT_ALL = "select count(*) from "
+ this.entityClass.getSimpleName();
} catch (Exception er) {
log.error("", er);
}
}
/**
* 获取主键名称
*
* @return
*/
public String getPkname() throws Exception {
Field[] fields = this.entityClass.getDeclaredFields();// 反射类字段
for (Field field : fields) {
if (field.isAnnotationPresent(Id.class)) {
this.pkname = field.getName();
break;
}
}
return pkname;
}
/**
* 保存实例
*
* @param t
* @throws HibernateException
*/
@Transactional(propagation = Propagation.REQUIRED)
public Serializable save(T t) throws Exception {
if (t != null)
return sessionFactory.getCurrentSession().save(t);
return null;
}
/**
* 修改实例
*
* @param t
* @throws HibernateException
*/
@Transactional(propagation = Propagation.REQUIRED)
public boolean update(T t) throws Exception {
if (t != null) {
sessionFactory.getCurrentSession().update(t);
return true;
}
return false;
}
/**
* 删除实例
*
* @param t
* @throws HibernateException
*/
@Transactional(propagation = Propagation.REQUIRED)
public boolean delete(T t) throws Exception {
if (t != null) {
sessionFactory.getCurrentSession().delete(t);
return true;
}
return false;
}
/**
* 根据主键ID,删除实例
*
* @param id
* @return
* @throws Exception
*/
@Transactional(propagation = Propagation.REQUIRED)
public boolean deleteById(Serializable id) throws Exception {
T t = this.find(id);
if (t != null) {
return this.delete(t);
}
return false;
}
/**
* 获取实例
*
* @param id
* @throws HibernateException
*/
@Transactional(propagation = Propagation.REQUIRED)
@SuppressWarnings("unchecked")
public T find(Serializable id) throws Exception {
if (id != null) {
return (T) sessionFactory.getCurrentSession().get(getEntityClass(),
id);
}
return null;
}
/**
* 查询全部
*
* @throws HibernateException
*/
@SuppressWarnings("unchecked")
@Transactional(propagation = Propagation.REQUIRED)
public List<T> findAll() throws Exception {
Query query = sessionFactory.getCurrentSession().createQuery(
HQL_LIST_ALL);
if (query != null)
return query.list();
return null;
}
/**
* 查询总数
*
* @throws HibernateException
*/
@Transactional(propagation = Propagation.REQUIRED)
public Integer findTotalRow() throws Exception {
Query query = sessionFactory.getCurrentSession().createQuery(
HQL_COUNT_ALL);
if (query != null) {
List<?> list = query.list();
if (list != null && !list.isEmpty()) {
return ((Integer) list.get(0)).intValue();
}
}
return null;
}
/**
* 按条件查询总记录数
*
* @param countHql
* @param map
* @return
* @throws Exception
*/
@Transactional(propagation = Propagation.REQUIRED)
public Long findTotalRow(String countHql, final Object... objects)
throws Exception {
if (StringUtils.isNotBlank(countHql)) {
Query query = sessionFactory.getCurrentSession().createQuery(
countHql);
if (query != null) {
if (objects != null) {
for (int i = 0; i < objects.length; i++) {
query.setParameter(i, objects[i]);
}
}
return (Long) query.list().get(0);
}
}
return null;
}
/**
* 按条件查询总记录数
*
* @param countHql
* @param params
* @return
* @throws Exception
*/
@Transactional(propagation = Propagation.REQUIRED)
public Long findTotalRow(String countHql, final Map<String, Object> params)
throws Exception {
if (StringUtils.isNotBlank(countHql)) {
Query query = sessionFactory.getCurrentSession().createQuery(
countHql);
if (query != null) {
if (params != null && params.keySet() != null) {
for (String colName : params.keySet()) {
query.setParameter(colName, params.get(colName));
}
}
return (Long) query.list().get(0);
}
}
return null;
}
/**
* QBC查询
*
* @param criteria
* @throws HibernateException
*/
@SuppressWarnings("unchecked")
@Transactional(propagation = Propagation.REQUIRED)
public List<T> findByCriteria(Criteria criteria) throws Exception {
if (criteria != null) {
Criteria ct = sessionFactory.getCurrentSession().createCriteria(
getEntityClass());
return ct.list();
}
return null;
}
/**
* QBE查询
*
* @param t
* @throws HibernateException
*/
@SuppressWarnings("unchecked")
@Transactional(propagation = Propagation.REQUIRED)
public List<T> findByExample(T t) throws Exception {
if (t != null) {
Example example = Example.create(t);
Criteria criteria = sessionFactory.getCurrentSession()
.createCriteria(getEntityClass());
criteria.add(example);
return criteria.list();
}
return null;
}
/**
* HQL查询
*
* @param hql
* @param objects
* @throws HibernateException
*/
@SuppressWarnings("unchecked")
@Transactional(propagation = Propagation.REQUIRED)
public List<T> findByHql(String hql, final Object... objects)
throws Exception {
if (StringUtils.isNotBlank(hql)) {
Query query = sessionFactory.getCurrentSession().createQuery(hql);
if (query != null) {
for (int i = 0; i < objects.length; i++) {
query.setParameter(i, objects[i]);
}
return (List<T>) query.list();
}
}
return null;
}
/**
* SQL查询
*
* @param hql
* @param objects
* @throws HibernateException
*/
@SuppressWarnings("unchecked")
@Transactional(pro
darkmasky
- 粉丝: 3
- 资源: 34
最新资源
- 使用群晖NAS搭建虚拟机
- 基于minifly的学习源码-本人耗时五年完善的稳定源码移植于minifly上,不带操作系统,直接操作寄存器,代码简洁明了,算法基于数学公式,便于学习数学知识
- 基于motorcad设计的外转子发电机,磁钢采用FB6B铁氧体 ,不等匝绕组,输出功率2.3KW 定子外径156 3200RPM,18极27槽永磁同步发电机(PMSG)设计案例.
- 电力电子、电机驱动、数字滤波器matlab simulink仿真模型实现及相关算法的C代码实现 配置C2000 DSP ADC DAC PWM定时器 中断等模块,提供simulink与DSP的联合仿
- 视觉系统程序,新能源电池检测 1、支持4个相机 2、实现Profinet网卡通信 3、实现日志功能 4、实现图像存储功能 5、实现电芯有无判断、电芯和端板涂胶检测
- 基于51单片机的电子时钟设计
- 西门子smart200与汇川变频器 Modbus RTU控制程序 步科触摸屏程序 振捣控制系统 汇川变频器手册
- C#上位机与西门子plc通信,实现伺服控制与数字量控制 提供C#源代码,plc测试程序
- 45.<资源>番茄钟3.0 无代码 C#例子 WPF例子
- stm32f103的Bootloader IAP串口升级stm32f103的Bootloader IAP串口升级st m32固件的学习资料,成熟产品方案已经用在批量产品上,资料包括上位机(电脑端)运行
- 基于Spark的电商用户行为分析系统-源码+课设论文(本科期末课程设计).zip
- Qt C++pdf阅读器源码 上下翻页 精美工具栏 支持ofd格式 1. 仿WPS界面 2. 预览PDF文件 3. 支持PDF预览放大,缩小 4. 支持目录预览查看 5. 支持目录点击跳转页查
- RDM(radis桌面工具)
- 西门子s7 200smart与3台台达VFD-M变频器通讯目标:用触摸屏和西门子smart 控制3台台达变频器通讯 器件:西门子s7 200 smart PLC,3台台达VFD-M变频器,昆仑通态触摸
- 基于51单片机的电子密码锁设计
- Qt5工业上位机源码 工业电子称 无线扫码器 串口的使用 Qt5.14可运行 Qt5工业上位机应用! 一套完整工程! 工业电子称使用, 无线扫码枪的使用, 串口的使用 使用Qt5.14 用QtCrea
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈