GenericHibernateDao.java
package dao;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.beanutils.PropertyUtils;
import org.hibernate.Criteria;
import org.hibernate.LockMode;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
/**
* GenericHibernateDao 继承 HibernateDao,简单封装 HibernateTemplate 各项功能,
* 简化基于Hibernate Dao 的编写。
*
* @author lny
*/
@SuppressWarnings("unchecked")
public class GenericHibernateDao<T extends Serializable, PK extends Serializable>
extends HibernateDaoSupport implements GenericDao<T, PK>
{
// 实体类类型(由构造方法自动赋值)
private Class<T> entityClass;
// 构造方法,根据实例类自动获取实体类类型
public GenericHibernateDao()
{
this.entityClass = null;
Class c = getClass();
Type t = c.getGenericSuperclass();
if (t instanceof ParameterizedType)
{
Type[] p = ((ParameterizedType) t).getActualTypeArguments();
this.entityClass = (Class<T>) p[0];
}
}
// -------------------- 基本检索、增加、修改、删除操作 --------------------
// 根据主键获取实体。如果没有相应的实体,返回 null。
public T get(PK id)
{
return (T) getHibernateTemplate().get(entityClass, id);
}
// 根据主键获取实体并加锁。如果没有相应的实体,返回 null。
public T getWithLock(PK id, LockMode lock)
{
T t = (T) getHibernateTemplate().get(entityClass, id, lock);
if (t != null)
{
this.flush(); // 立即刷新,否则锁不会生效。
}
return t;
}
// 根据主键获取实体。如果没有相应的实体,抛出异常。
public T load(PK id)
{
return (T) getHibernateTemplate().load(entityClass, id);
}
// 根据主键获取实体并加锁。如果没有相应的实体,抛出异常。
public T loadWithLock(PK id, LockMode lock)
{
T t = (T) getHibernateTemplate().load(entityClass, id, lock);
if (t != null)
{
this.flush(); // 立即刷新,否则锁不会生效。
}
return t;
}
// 获取全部实体。
public List<T> loadAll()
{
return (List<T>) getHibernateTemplate().loadAll(entityClass);
}
// loadAllWithLock() ?
// 更新实体
public void update(T entity)
{
getHibernateTemplate().update(entity);
}
// 更新实体并加锁
public void updateWithLock(T entity, LockMode lock)
{
getHibernateTemplate().update(entity, lock);
this.flush(); // 立即刷新,否则锁不会生效。
}
// 存储实体到数据库
public void save(T entity)
{
getHibernateTemplate().save(entity);
}
// saveWithLock()?
// 增加或更新实体
public void saveOrUpdate(T entity)
{
getHibernateTemplate().saveOrUpdate(entity);
}
// 增加或更新集合中的全部实体
public void saveOrUpdateAll(Collection<T> entities)
{
getHibernateTemplate().saveOrUpdateAll(entities);
}
// 删除指定的实体
public void delete(T entity)
{
getHibernateTemplate().delete(entity);
}
// 加锁并删除指定的实体
public void deleteWithLock(T entity, LockMode lock)
{
getHibernateTemplate().delete(entity, lock);
this.flush(); // 立即刷新,否则锁不会生效。
}
// 根据主键删除指定实体
public void deleteByKey(PK id)
{
this.delete(this.load(id));
}
// 根据主键加锁并删除指定的实体
public void deleteByKeyWithLock(PK id, LockMode lock)
{
this.deleteWithLock(this.load(id), lock);
}
// 删除集合中的全部实体
分享到:
相关推荐
GenericHibernateDao 继承 HibernateDao,简单封装 HibernateTemplate 各项功能,简化基于Hibernate Dao 的编写。
用hibernate作为持久化解决方案的GenericHibernateDao实现类,被定义为抽象类,它提取了CRUD操作,这就是简化代码的关键,以便于更好的重用,这个就不给例子了,增删改都好写,查就需要各种条件了。 然后是各个领域...
2. `load(PK id)`:与`get`类似,但当实体不存在时会抛出异常。 3. `loadWithLock(PK id, LockMode lock)`:获取并锁定一个实体,防止并发问题。 4. `update(T entity)`:更新一个实体。 5. `save(T entity)`:保存...
6. **GenericHibernateDao**:这是`GenericDao<T>`的实现,使用Hibernate ORM框架操作数据库。它提供了两个方法:`queryForList`(带两个重载版本),分别用于获取记录数和查询数据集合。 7. **×××DAO** 和 **×...
基于改进10机39节点系统的分布式风电场站模型:考虑风速差异与调频能力的风电等值研究,分布式风电场站模型 改进的10机39节点系统,包含两个风电场,每个风电场含有10台风机 用于分布式风机做风电等值,考虑风电场风速差异,考虑不同风速风电机组的调频能力。 包含风电综合惯性控制和转速保护模块。 ,核心关键词:分布式风电场站模型; 改进的10机39节点系统; 风电场风速差异; 不同风速风电机组调频能力; 风电综合惯性控制; 转速保护模块。,分布式风电场站模型优化研究:考虑风速差异与风电机组调频能力的10机39节点系统
C语言之整数转换英文表示
FPGA GTH aurora编解码技术实现PCIE视频传输:源码及上位机支持,FPGA GTH aurora 8b 10b PCIE 视频传输 FPGA GTH aurora 8b 10b编解码 PCIE 视频传输,提供2套工程源码加QT上位机源码和 ,核心关键词:FPGA; GTH; Aurora; 8b 10b编解码; PCIE; 视频传输; 工程源码; QT上位机源码。,"FPGA视频传输解决方案:GTH Aurora 8b/10b编解码与PCIE支持"
基于正点原子开发板与OV5640摄像头的FPGA Sobel边缘检测与中值滤波灰度图像处理源码解析,FPGA sobel 边缘检测 中值滤波 基于灰度图像处理 ,开发板采用正点原子的,摄像头为ov5640 只有源码只有源码只有源码 ,关键词:FPGA; Sobel边缘检测; 中值滤波; 灰度图像处理; 正点原子开发板; OV5640摄像头; 源码。,基于正点原子开发板,OV5640摄像头灰度图像处理:FPGA Sobel边缘检测与中值滤波源码
"简单质量添加单层与多层熔覆模拟:含三维质量源项、移动高斯热源及自定义编程与仿真教程",简单质量添加单层以及多层。 里面包含简单的三维质量源项以及移动高斯热源,并且可以进行多层熔覆模拟,包含完整的仿真模型以及自定义编程代码和讲解视频 ,核心关键词:简单质量;单层多层;三维质量源项;移动高斯热源;多层熔覆模拟;完整仿真模型;自定义编程代码;讲解视频。,"三维质量源项与多层熔覆模拟:含单层及多层添加技术,附完整仿真模型与自定义编程教程"
天然气水合物降压开采的多场耦合模拟:储层特征与环空高压影响研究,天然气水合物降压开采,基于COMSOL热-流-固多场耦合实现,同时可以表征开采过程中的储层孔隙度、渗透率的演化,考虑水平井筒环空高压充填石英砂层,有水平井和压裂水平井模型。 ,核心关键词:天然气水合物降压开采; COMSOL热-流-固多场耦合; 储层孔隙度演化; 渗透率演化; 水平井筒环空高压充填石英砂层; 水平井模型; 压裂水平井模型。,基于COMSOL的天然气水合物降压开采模拟:多场耦合与储层孔渗演化研究
基于MATLAB 2016b的5MW永磁同步风机与混合储能系统并网仿真研究,5MW永磁同步风机-1200V直流混合储能并网MATLAB仿真 MATLAB2016b运行。 主体模型: 风机传动模块、PMSG模块、蓄电池模块、超级电容模块、无穷大电源。 蓄电池控制、风机控制、逆变器控制。 ,5MW永磁同步风机; 直流混合储能; 并网仿真; MATLAB2016b; 主体模型; 风机传动模块; PMSG模块; 蓄电池模块; 超级电容模块; 逆变器控制。,"MATLAB仿真研究:5MW永磁同步风机与1200V直流混合储能系统并网控制策略"
无差拍电流预测控制替代传统PI控制器,电机参数自适应辨识的新模型,该模型采用无差拿电流预测控制代替传统电流环的PI控制器,并采用模型参自适应对电机参数进行辨识 ,核心关键词:无差拍电流预测控制; PI控制器; 模型参数自适应; 电机参数辨识; 传统电流环控制。,"无差拍电流预测控制与模型参自适应电机参数辨识模型"
Fluent电弧模型解析与等离子体建模入门:电弧仿真模型案例及UDF讲解,结果后处理全套课程指南,Fluent电弧模型,电弧等离子体建模,二维40三维150入门电弧仿真模型案例,带视频讲解UDF,结果后处理,全套课程。 ,核心关键词:Fluent电弧模型; 电弧等离子体建模; 二维40三维150电弧仿真模型案例; 视频讲解UDF; 结果后处理; 全套课程,"电弧仿真入门:Fluent电弧模型与等离子体建模教程"
"基于OpenCVSharp的智能视觉工具集:含缩放旋转形状模板匹配与自定义直线卡尺控件,全源码可直接导入项目使用",基于opencvsharp的视觉工具,包括基于形状的模板匹配(支持缩放以及旋转)、直线卡尺工具(包含自定义卡尺控件),可直接导入项目使用,其他功能正在开发中。 具体效果如图所示,整套源码。 ,基于OpenCVSharp的视觉工具; 形状模板匹配(支持缩放旋转); 直线卡尺工具(含自定义卡尺控件); 导入项目使用; 整套源码。,OpenCVSharp视觉工具集:支持缩放旋转模板匹配与自定义卡尺功能
电机控制器中的IGBT结温估算策略:专业级机密算法详解,实时分析确保安全与性能提升,Simulink模型及底层算法库开源分享。,电机控制器,IGBT结温估算(算法+模型)国际大厂机密算法,多年实际应用,准确度良好 高价值知识 能够同时对IGBT内部6个三极管和6个二极管温度进行估计,并输出其中最热的管子对应温度。 可用于温度保护,降额,提高产品性能 simulink模型除仿真外亦可生成代码 提供直流、交流两个仿真模型 提供底层算法模型库(开源,带数据) 提供说明文档 ,核心关键词: IGBT结温估算; 电机控制器; 算法模型; 国际大厂机密算法; 高价值知识; 多实际应用; 温度保护; 降额; 提高产品性能; simulink模型; 直流仿真模型; 交流仿真模型; 底层算法模型库; 开源数据; 说明文档。,"IGBT结温精准估算:国际大厂机密算法揭秘,六管温度同步监测,保护降额提升性能"
c语言24点游戏源码.zip
组合式空调设备PLC程序架构解析:西门子1200PLC+通讯技术+触摸屏操控,动态画面展示,恒温恒湿PID精准控制,实用工艺分享,博图V15.1版本参考学习。,组合式空调设备PLC程序,采用西门子1200PLC+485通讯+触摸屏TP系列+电气原理图组成的,程序架构清晰; 恒温恒湿PID精准控制,带通讯,多种模式,带触摸屏程序,动态画面 很值得学习和参考,工艺差距不大可以直接调用。 实话实说,自己觉得好用,介绍给大家一起学习。 程序打开版本博图V15.1 内容非常实用,非常适合学习和借鉴 ,核心关键词:组合式空调设备; PLC程序; 西门子1200PLC; 485通讯; 触摸屏TP系列; 电气原理图; 程序架构; 恒温恒湿PID控制; 多种模式; 动态画面; 博图V15.1; 实用; 学习; 借鉴。,基于PLC的组合式空调设备控制程序:清晰架构与PID精准控制
基于A星算法与DWA融合的动态路径规划技术:实现静态与动态避障的智能导航,基于A星与DWA算法融合的动态路径规划,可实现静态避障碍及动态避障 ,核心关键词:A星算法; DWA算法; 动态路径规划; 静态避障碍; 动态避障; 融合算法。,基于A星与DWA融合算法的动态路径规划与实时避障系统
PLL电荷泵锁相环CPPLL仿真环境搭建完成,电路版图验证,书籍与工艺库赠送,特性详述:可调分频比锁定频率高达2GHz,快速锁定时间,环形振荡器与核心模块介绍。,pll电荷泵锁相环 cppll(已流片)仿真环境搭建好了 电路到版图都已流片验证,另外送PLL书籍电子版和对应工艺库。 另加50就可以得到完整版图 三阶二型锁相环 参考频率50-100MHz 分频比可调 锁定频率600M-2GHz 锁定时间4us 环形振荡器 ring vco 鉴频鉴相器PFD模块 分频器DIV模块 ,ps counter 电荷泵CP模块 ,"PLL电荷泵锁相环CPPLL流片验证,高稳定分频模块仿真环境搭建"