package com.hrmsys.dao.impl;
import java.io.Serializable;
import java.sql.SQLException;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.Criteria;
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.util.Assert;
public class BaseDAO extends HibernateDaoSupport {
public static final Log log = LogFactory.getLog(BaseDAO.class);
/**
* 保存实体
* @param entity
*/
public boolean save(Object entity){
try{
this.getHibernateTemplate().save(entity);
}catch(Exception e){
e.printStackTrace();
log.info("save "+entity.getClass().getName()+" is failed!");
return false;
}
return true;
}
/**
* 保存或更新某个实例
*
* @param entity
*/
public boolean saveOrUpdate(Object entity) {
try{
this.getHibernateTemplate().saveOrUpdate(entity);
}catch(Exception e){
e.printStackTrace();
log.info("saveOrUpdate " + entity.getClass().getName() + " is failed!");
return false;
}
return true;
}
/**
* 删除某个实例
*
* @param entity
*/
public void delete(Object entity) {
try{
this.getHibernateTemplate().delete(entity);
}catch(Exception e){
e.printStackTrace();
log.info("delete " + entity.getClass().getName() + " is failed!");
}
}
/**
* 依据id删除实体
*
* @param <T>
* @param clazz
* @param id
*/
@SuppressWarnings("unchecked")
public <T> boolean deleteById(Class clazz, Serializable id) {
try{
this.delete(this.get(clazz, id));
}catch(Exception e){
e.printStackTrace();
log.info("delete by id for " + clazz.getName() + " is failed!");
return false;
}
return true;
}
/**
* merge()方法,会根据对象是否进行了实质性修改,来决定是否执行相应的update/delete/update语句,
* 而upate()则不会进行比较,只用给定的对象信息覆盖原有信息
* 合并后的entity实例仍然是一个脱管态,而save或saveOrUpdate执行后变为持久态
*
* @param entity
*/
public boolean update(Object entity) {
try{
this.getHibernateTemplate().merge(entity);
}catch(Exception e){
e.printStackTrace();
log.info("update "+ entity.getClass().getName() + " is failed!");
return false;
}
return true;
}
/**
* 返回所给id的实体类持久化实例,如果实例不存在则返回null。 该方法不会返回没有初始化的实例。
*
* @param <T>
* @param clazz
* @param id
* @return
*/
@SuppressWarnings("unchecked")
public <T> T get(Class<T> clazz, Serializable id) {
try{
return (T) getHibernateTemplate().get(clazz, id);
}catch(Exception e){
e.printStackTrace();
log.info("get by id for " + clazz.getClass().getName() + " is failed!");
}
return null;
}
/**
* 懒加载 返回所给id的实体类持久化实例,假定该实例存在。该方法可能返回一个代理实例, 这个代理实例在非id的方法被访问的时候根据需要初始化。
* 如果查找的实例不存在,抛出异常。
*
* @param <T>
* @param clazz
* @param id
* @return
*/
public <T> T load(Class<T> clazz, Serializable id) {
return (T) getHibernateTemplate().load(clazz, id);
}
/**
* 直接查询所有数据 当数据大时易产生性能问题
*
* @param <T>
* @param clazz
* @return
*/
@SuppressWarnings("unchecked")
public <T> List<T> findAll(Class<T> clazz) {
try{
return this.getHibernateTemplate().loadAll(clazz);
}catch(Exception e){
e.printStackTrace();
log.info("find all for " + clazz.getClass().getName() + " is failed!");
}
return null;
}
/**
* 依据属性按序查询出所有 当数据大时易产生性能问题
*
* @param <T>
* @param clazz
* @param orderBy
* @param isAsc
* @return List<T>
* @see DetachedCriteria用于有大量的动态条件查询,是一种离线的查询 不需要session创建,需Critteria正相反
*/
@SuppressWarnings("unchecked")
public <T> List<T> findAll(Class<T> clazz, String orderBy, boolean isAsc) {
Assert.hasText(orderBy);
if (isAsc) {
return this.getHibernateTemplate().findByCriteria(
DetachedCriteria.forClass(clazz).addOrder(
Order.asc(orderBy)));
} else {
return this.getHibernateTemplate().findByCriteria(
DetachedCriteria.forClass(clazz).addOrder(
Order.desc(orderBy)));
}
}
/**
* 强制Session冲刷。将当前Session中所有维持在内存中的保存、更新和删除持久化状态同步到数据库。
* 该方法必须在事务提交和Session关闭之前调用
* 。建议只在相同的事务内后续操作依赖于之前操作对数据库的改变时使用,一般情况建议依赖于事务提交时的自动冲刷即可,无需手动调用此方法。
*/
public void flush() {
this.getHibernateTemplate().flush();
}
/**
* 从Session的缓存中移除该实例。该实例所有的更改将不会被同步到数据库。
*
* @param entity
*/
public void evict(Object entity) {
this.getHibernateTemplate().evict(entity);
}
/**
* 清除Session中缓存的所有对象,并取消当前Session中所有维持在内存中的保存、更新和删除持久化状态。
* 该方法不会关闭已经打开的迭代器或ScrollableResults实例。
*/
public void clear() {
this.getHibernateTemplate().clear();
}
/**
* 根据hql和value查询
*
* @param hql
* @param values
* @return
*/
public List findByHQLAndValue(String hql, Object... values) {
try{
return this.getHibernateTemplate().find(hql, values);
}catch(Exception e){
e.printStackTrace();
log.info("execute for '"+ hql + "' is failed!");
}
return null;
}
/**
* 根据hql查询
* @param hql
* @return
*/
public List findByHQL(String hql) {
try{
return this.getHibernateTemplate().find(hql);
}catch(Exception e){
e.printStackTrace();
log.info("execute for '" + hql + "' is failed!");
}
return null;
}
/**
* 根据clazz propertyName value进行查询
*
* @param <T>
* @param clazz
* @param propertyName
* @param value
* @return
*/
@SuppressWarnings("unchecked")
public <T> List<T> findByProperty(final Class<T> clazz,
final String propertyName, final Object value) {
try{
Assert.hasText(propertyName);
return this.getHibernateTemplate().executeFind(new HibernateCallback() {
@Override
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
return createCriteria(clazz, session,
Restrictions.eq(propertyName, value)).list();
}
});
}catch(Exception e){
e.printStackTrace();
log.info("findByProperty for " + clazz.getClass().getName() + " is failed!");
}
return null;
}
/**
* 创建一个criteria 一个中介类 Criterion是个接口,其实例可以由Restritions来创建
*
* @param <T>
* @param clazz
* @param session
* @param values
* @return
*/
public <T> Criteria createCriteria(Class<T> clazz, Session session,
Criterion... values) {
Criteria criteria = session.createCriteria(clazz);
for (Criterion value : values) {
criteria.add(value);
}
return criteria;
}
/**
* 按属性查询且排序
*
* @param <T>
* @param clazz
* @param propertyName
* @param value
* @param orderBy
* @param isAsc
* @return
胥华引
- 粉丝: 98
- 资源: 439
最新资源
- 博途S7-1200主站与S7-200从站实现RS485通讯程序 S7-200可以当作一个仪表
- C#、C++分别开发的OPC DA CLIENT软件. 1、枚举服务器名称; 2、连接服务器以后枚举出TAG; 3、根据TAG名称自动读取服务器数据; 4、图片内有OPC SERVER和CLIENT实
- python-workspace.zip.005
- 龙门上下料样本程序,四轴 用台达AS228T和台达触摸屏编写 注意软件是用台达新款软件ISPSOFT ,借鉴价值高,程序有注释
- 一款window下的串口监视抓包工具
- 欧姆龙CP1H与3台力士乐VFC-x610变频器通讯程序 功能:原创程序,可直接用于现场程序 欧姆龙CP1H的CIF11通讯板,实现对3台力士乐VFC-x610变频器 设定频率,控制正反转,读取实际
- dp111113333
- CV-密集人群图像数据集(5800张图片).rar
- 福特汽车主观评价规范,性能开发参考,英文原版直译,评价条目、规则描述非常细致 包含平顺舒适性,转向,操稳,NVH,制动,加速感,驾驶性等等性能,并详细描述了评价的准备工作 评价条目细分至第四级,共
- 三菱FX3S两轴标准程序,XZ两轴,包含轴点动,回零,相对与绝对定位,只要弄明白这个程序,就可以非常了解整个项目的程序如何去编写,从哪里开始下手,可提供程序问题解答,程序流程清晰明了,注释完整
- MATLAB代码:考虑P2G与碳捕集机组的多能微网低碳经济调度 关键词:碳交易 阶梯碳交易 碳捕集 多能微网 低碳调度 仿真平台:MATLAB+yalmip+cplex 主要内容:代码主要做的是一个
- 本程序采用matlab编写,主要是实现电流注入型牛拉法 除此之外,本人还编写了很多种关于潮流计算的程序,主要有牛拉法,前推回代法,以还有相和三相潮流计算程序
- 智能门锁架构图,供大家参考
- 三菱FX3U六轴标准程序,程序包含本体3轴控制,扩展3个1PG定位模块,一共六轴 程序有轴点动控制,回零控制,相对定位,绝对定位 另有气缸数个,一个大是DD马达控制的转盘,整个是转盘多工位流水作业
- 批量登录到远程Linux服务器检查服务器时间差的shell
- MATLAB电动车七自由度整车模型 MATLAB Simulink电动车转弯制动abs模型asr转弯制动防抱死abs模型+模糊控制算法+七自由度整车模型+纵向运动+侧向运动+横摆运动+四轮魔术公式+四
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈