`

通用的HibernateBaseDAO

阅读更多
通用一个HibernateBaseDAO
有了这个基类在一般的项目里面可以对项目一切的数据操作,不需要任何SQL语句:
<code>
package com.doer.template.hibernate.dao.impl;

import java.io.Serializable;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

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;

import com.doer.template.hibernate.dao.Dao;

/**
* 抽象的Hibernate DataAccessObject
*
* @author totong
* @since 2008-1-7
*
* @param <ENTITY>
*            实体的类型
* @param <ID>
*            主键的类型
*/
public abstract class AbstractDaoHibernate<ENTITY, ID extends Serializable>
extends HibernateDaoSupport implements Dao<ENTITY, ID> {

/**
* 定义T的实际类型
*/
protected Class<ENTITY> entityClass;

/**
* 构造器,通过反射获取T的实际类型,以供其它方法使用
*/
@SuppressWarnings("unchecked")
public AbstractDaoHibernate() {
entityClass = (Class<ENTITY>) ((ParameterizedType) getClass()
.getGenericSuperclass()).getActualTypeArguments()[0];
}

/**
* {@inheritDoc}
*/
// @Override
public void delete(ENTITY entity) {
getHibernateTemplate().delete(entity);
}

/**
* {@inheritDoc}
*/
@SuppressWarnings("unchecked")
// @Override
public List<ENTITY> findByExample(ENTITY entity) {
DetachedCriteria criteria = DetachedCriteria.forClass(entityClass).add(
Example.create(entity));
return getHibernateTemplate().findByCriteria(criteria);
}

/**
* {@inheritDoc}
*/
@SuppressWarnings("unchecked")
// @Override
public List<ENTITY> findByExample(ENTITY entity, int firstResult,
int maxResults, MatchMode matchMode) {
DetachedCriteria criteria = DetachedCriteria.forClass(entityClass).add(
Example.create(entity).enableLike(matchMode));
return getHibernateTemplate().findByCriteria(criteria, firstResult,
maxResults);
}

/**
* {@inheritDoc}
*/
@SuppressWarnings("unchecked")
// @Override
public List<ENTITY> findByProperty(String propertyName, Object value) {
String queryString = "from " + entityClass.getName()
+ " as model where model." + propertyName + "= ?";
return getHibernateTemplate().find(queryString, value);
}

/**
* {@inheritDoc}
*/
// @Override
public List<ENTITY> findByProperties(Map<String, Object> properties) {
return findByProperties(properties, -1, -1);
}

/**
* {@inheritDoc}
*/
@SuppressWarnings("unchecked")
// @Override
public List<ENTITY> findByProperties(Map<String, Object> properties,
int firstResult, int maxResults) {
DetachedCriteria criteria = DetachedCriteria.forClass(entityClass);
for (Entry<String, Object> entry : properties.entrySet()) {
criteria.add(Restrictions.eq(entry.getKey(), entry.getValue()));
}
return getHibernateTemplate().findByCriteria(criteria, firstResult,
maxResults);
}

/**
* {@inheritDoc}
*/
@SuppressWarnings("unchecked")
// @Override
public List<ENTITY> findbyPageCriteriaOrder(Map<String, Object> properties,
int firstResult, int maxResults, String columnname, String orderType) {
DetachedCriteria criteria = DetachedCriteria.forClass(entityClass);
for (Entry<String, Object> entry : properties.entrySet()) {
if ("com.doer.baseInfoManage.bean.Dictionary".equals(entityClass
.getName())
&& "CDictionaryType".equals(entry.getKey())) {
criteria.add(Restrictions.eq(entry.getKey(), entry.getValue()));
} else {
criteria.add(Restrictions.like(entry.getKey(), "%"
+ entry.getValue() + "%"));
}

}
if ("".equals(columnname) || columnname == null) {

} else {
if ("asc".equals(orderType)) {
criteria.addOrder(Order.asc(columnname));
} else {
criteria.addOrder(Order.desc(columnname));
}
}

return getHibernateTemplate().findByCriteria(criteria, firstResult,
maxResults);
}

/**
* {@inheritDoc}
*/
// @Override
public void saveOrUpdate(ENTITY entity) {
getHibernateTemplate().saveOrUpdate(entity);
}

/**
* {@inheritDoc}
*/
@SuppressWarnings("unchecked")
// @Override
public List<ENTITY> findAll() {
String queryString = "from " + entityClass.getName();
return (List<ENTITY>) getHibernateTemplate().find(queryString);
}

/**
* {@inheritDoc}
*/
@SuppressWarnings("unchecked")
// @Override
public List<ENTITY> findAll(int firstResult, int maxResults) {
DetachedCriteria criteria = DetachedCriteria.forClass(entityClass);
return getHibernateTemplate().findByCriteria(criteria, firstResult,
maxResults);
}

/**
* {@inheritDoc}
*/
@SuppressWarnings("unchecked")
// @Override
public ENTITY findById(ID id, LockMode lockMode) {
return (ENTITY) getHibernateTemplate().load(entityClass, id, lockMode);
}

/**
* {@inheritDoc}
*/
@SuppressWarnings("unchecked")
// @Override
public ENTITY findById(ID id) {
return (ENTITY) getHibernateTemplate().load(entityClass, id);
}

/**
* {@inheritDoc}
*/
// @Override
public void update(ENTITY entity) {
getHibernateTemplate().update(entity);
}

/**
* {@inheritDoc}
*/
@SuppressWarnings("unchecked")
// @Override
public ENTITY merge(ENTITY entity) {
return (ENTITY) getHibernateTemplate().merge(entity);
}

/**
* {@inheritDoc}
*/
@SuppressWarnings("unchecked")
// @Override
public ID save(ENTITY entity) {
return (ID) getHibernateTemplate().save(entity);
}

/**
* {@inheritDoc}
*/
// @Override
public void refresh(ENTITY entity) {
getHibernateTemplate().refresh(entity);
}

/**
* {@inheritDoc}
*/
// @Override
public Integer count() {
DetachedCriteria criteria = DetachedCriteria.forClass(entityClass)
.setProjection(Projections.rowCount());
return (Integer) getHibernateTemplate().findByCriteria(criteria).get(0);
}

/**
* {@inheritDoc}
*/
@SuppressWarnings("unchecked")
// @Override
public List<ENTITY> findByExampleLikeAnyWhere(ENTITY entity) {
DetachedCriteria criteria = DetachedCriteria.forClass(entityClass).add(
Example.create(entity).enableLike(MatchMode.ANYWHERE));
return getHibernateTemplate().findByCriteria(criteria);
}

/**
* {@inheritDoc}
*/
public Integer countByProperty(String propertyName, Object value) {
DetachedCriteria criteria = DetachedCriteria.forClass(entityClass)
.setProjection(Projections.rowCount());
criteria.add(Restrictions.eq(propertyName, value));
return (Integer) getHibernateTemplate().findByCriteria(criteria).get(0);
}

/**
* 实用两级类型 分页模糊查询
*
* @param properties
* @param firstResult
* @param maxResults
* @return list
*/
@SuppressWarnings("unchecked")
public List<ENTITY> findbyPageCriteria(Map<String, Object> properties,
int firstResult, int maxResults) {
DetachedCriteria criteria = DetachedCriteria.forClass(entityClass);
for (String key : properties.keySet()) {
if (properties.get(key) != null && properties.get(key) != "") {
/**
* 如果属性的值是String类型
*/
if (String.class.equals(properties.get(key).getClass())) {
criteria.add(Restrictions.ilike(key, "%"
+ properties.get(key) + "%", MatchMode.ANYWHERE));
} else if (Long.class.equals(properties.get(key).getClass())
|| Integer.class.equals(properties.get(key).getClass())) {
criteria.add(Restrictions.eq(key, properties.get(key)));
} else if (Date.class.equals(properties.get(key).getClass())) {
/**
* 时间模糊查询具体实现
*/
} else { // 如果不是
String[] longClass = key.split("\\.");
Class<?> class1 = properties.get(key).getClass();
DetachedCriteria criteria2 = criteria
.createCriteria(longClass[0]);
Method method;
try {
/**
* 获得属性的get方法
*/
String str = longClass[1].substring(0, 1);
str = str.toUpperCase()
+ longClass[1].substring(1, longClass[1]
.length());
method = class1.getMethod("get" + str);
/**
* 调用方法
*/
Object returnValue = method.invoke(properties.get(key));
if (returnValue != null && returnValue != "") {
if (Long.class.equals(returnValue.getClass())) {
criteria2.add(Restrictions.eq(longClass[1],
returnValue));
} else {
criteria2.add(Restrictions.ilike(longClass[1],
"%" + returnValue + "%",
MatchMode.ANYWHERE));
}
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
}
return this.getHibernateTemplate().findByCriteria(criteria,
(firstResult - 1) * maxResults, maxResults);
}

/**
* {@inheritDoc}
*/
public Integer countByCriteria(Map<String, Object> properties) {
DetachedCriteria criteria = DetachedCriteria.forClass(entityClass);

for (String key : properties.keySet()) {
if (properties.get(key) != null && properties.get(key) != "") {
/**
* 如果属性的值是String类型
*/
if (String.class.equals(properties.get(key).getClass())) {
System.out.println(entityClass.getName());
if ("com.doer.baseInfoManage.bean.Dictionary"
.equals(entityClass.getName())
&& "CDictionaryType".equals(key)) {
criteria.add(Restrictions.eq(key, properties.get(key)));
} else {
criteria.add(Restrictions.ilike(key, "%"
+ properties.get(key) + "%"));
}

} else if (Long.class.equals(properties.get(key).getClass())
|| Integer.class.equals(properties.get(key).getClass())) {
criteria.add(Restrictions.eq(key, properties.get(key)));
} else if (Date.class.equals(properties.get(key).getClass())) {
/**
* 时间模糊查询具体实现
*/
} else { // 如果不是
String[] longClass = key.split("\\.");
Class<?> class1 = properties.get(key).getClass();
DetachedCriteria criteria2 = criteria
.createCriteria(longClass[0]);
Method method;
try {
/**
* 获得属性的get方法
*/
String str = longClass[1].substring(0, 1);
str = str.toUpperCase()
+ longClass[1].substring(1, longClass[1]
.length());
method = class1.getMethod("get" + str);
/**
* 调用方法
*/
Object returnValue = method.invoke(properties.get(key));
if (returnValue != null && returnValue != "") {
if (Long.class.equals(returnValue.getClass())) {
criteria2.add(Restrictions.eq(longClass[1],
returnValue));
} else {
criteria2.add(Restrictions.ilike(longClass[1],
"%" + returnValue + "%"));
}
}
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
}
criteria.setProjection((Projections.rowCount()));

return (Integer) this.getHibernateTemplate().findByCriteria(criteria)
.get(0);
}

/**
* 通过给定的一个对象和一个需要排序的列,查找与其匹配的对象并按照指定列进行排序。
*
* @param entity
*            实体
* @return 实体集合
*/
public List<ENTITY> findByExampleByOrder(ENTITY entity, String property) {

DetachedCriteria criteria = DetachedCriteria.forClass(entityClass).add(
Example.create(entity)).addOrder(Order.asc(property));
return getHibernateTemplate().findByCriteria(criteria);
}

}

</code>
分享到:
评论

相关推荐

    Nvme通用驱动 64 Nvme通用驱动 64

    Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme...

    Nvme通用驱动 32 Nvme通用驱动 32

    Nvme通用驱动 32Nvme通用驱动 32Nvme通用驱动 32Nvme通用驱动 32Nvme通用驱动 32Nvme通用驱动 32Nvme通用驱动 32Nvme通用驱动 32Nvme通用驱动 32Nvme通用驱动 32Nvme通用驱动 32Nvme通用驱动 32Nvme通用驱动 32Nvme...

    易语言通用脱壳机 易语言通用脱壳机 易语言通用脱壳机

    易语言通用脱壳机 鉴于目前易语言的加载机制,因此几乎所有的壳都可以被通用的脱掉. 然后我就写了一个基于此的通用脱壳机. 目前支持易语言的两种编译方式 独立编译 和非独立编译.自动识别并修复数据. 特别是独立编译...

    AxureUX WEB端交互原型通用组件模板库 v3

    AxureUX WEB端交互原型通用组件模板库 v3 (组件列表) AxureUX WEB端交互原型通用组件模板库 v3 (组件列表) AxureUX WEB端交互原型通用组件模板库 v3 (组件列表) AxureUX WEB端交互原型通用组件模板库 v3 (组件列表) ...

    04.AxureUX中后台管理信息系统通用原型设计方案 v2(区块组合).rp

    04.AxureUX中后台管理信息系统通用原型设计方案 v2(区块组合).rp 04.AxureUX中后台管理信息系统通用原型设计方案 v2(区块组合).rp 04.AxureUX中后台管理信息系统通用原型设计方案 v2(区块组合).rp 04.AxureUX中后台...

    浅谈MyBatis通用Mapper实现原理

    浅谈MyBatis通用Mapper实现原理 MyBatis通用Mapper是MyBatis框架中的一种通用Mapper实现方式,主要提供了一些通用的方法,这些方法是以接口的形式提供的。通用Mapper的实现原理主要是通过Java反射机制和MyBatis框架...

    人工智能通用大模型(ChatGPT)的进展-风险与应对.pdf

    人工智能通用大模型(ChatGPT)的进展__风险与应对.pdf人工智能通用大模型(ChatGPT)的进展__风险与应对.pdf人工智能通用大模型(ChatGPT)的进展__风险与应对.pdf人工智能通用大模型(ChatGPT)的进展__风险与应对.pdf人工...

    java 通用http工具封装 java 通用http工具封装java 通用http工具封装java 通用http工具封装

    java 通用http工具封装 java 通用http工具封装java 通用http工具封装java 通用http工具封装java 通用http工具封装 java 通用http工具封装java 通用http工具封装java 通用http工具封装java 通用http工具封装 java ...

    PHP+Csv(Excel)通用成绩查询系统1项通用版【无需后台】 V 6.6_PW1C

    PHP+Csv(Excel)通用成绩查询系统【无需后台】继承原来(asp/php+txt/excel windows/Linux等五大系列超过12个不同版本)的通用易用优点,同样通用于几乎所有工资等查询,成绩查询,物业查询,收电费查询,录取查询,...

    db2通用数据库自学教程

    db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用...

    C#官方通用类库及通用数据库类库

    1. 通用类库 DC.CommonLiteLib针对一些常用算法,线程管理,IO控制,以及ConvertHelper类型转换,StringHelper字符串封装,FileHelper 文件操作封装等,另有CHM官方文件解释用法。 2. 用数据库类库 DC....

    Q/GDW1242-2015《输电线路状态监测装置通用技术规范》 及 编制说明

    Q/GDW1242-2015《输电线路状态监测装置通用技术规范》 及 编制说明 Q/GDW1242-2015《输电线路状态监测装置通用技术规范》 及 编制说明 Q/GDW1242-2015《输电线路状态监测装置通用技术规范》 及 编制说明 Q/GDW...

    AxureUX WEB前后端交互原型通用元件库 v3.11 (Axure RP9专用版)

    AxureUX WEB前后端交互原型通用元件库 v3.11 (Axure RP9专用版) AxureUX WEB前后端交互原型通用元件库 v3.11 (Axure RP9专用版) AxureUX WEB前后端交互原型通用元件库 v3.11 (Axure RP9专用版) AxureUX WEB前后端...

    MapInfo通用转换器

    MapInfo通用转换器是一款专为地图数据处理设计的工具,其主要功能是帮助用户将不同格式的地图数据进行互换和转换,以便在各种GIS(地理信息系统)软件中使用。这款软件支持多种常见的地图数据格式,如Shapefile、Geo...

    iOS 通用链接(Universal Link)配置详解

    iOS 通用链接(Universal Link)配置 什么是通用链接? 通用链接是iOS9推出的一项新功能,如果你的应用(app)支持通用链接(Universal Link)之后,iOS用户能够在点击网页的链接的时候无缝的重定向到已经安装的app...

    等保基本要求三级通用要求等保基本要求三级通用要求等保基本要求三级通用要求等保基本要求三级通用要求

    等保基本要求三级通用要求等保基本要求三级通用要求等保基本要求三级通用要求等保基本要求三级通用要求等保基本要求三级通用要求等保基本要求三级通用要求等保基本要求三级通用要求等保基本要求三级通用要求等保基本...

    01.AxureUX中后台管理信息系统通用原型设计方案 v2(系统框架+页面模板).rp

    01.AxureUX中后台管理信息系统通用原型设计方案 v2(系统框架+页面模板).rp 01.AxureUX中后台管理信息系统通用原型设计方案 v2(系统框架+页面模板).rp 01.AxureUX中后台管理信息系统通用原型设计方案 v2(系统框架+...

    依时利 通用接口软件

    《依时利通用接口软件详解:连接与设备管理的核心工具》 在信息技术日新月异的今天,设备间的高效通信和数据交换成为了企业运营的重要环节。依时利通用接口软件,作为一款专为连接依时利设备而设计的应用程序,扮演...

    魅力星辰老飞飞通用辅助易语言源码

    魅力星辰老飞飞通用辅助易语言源码,魅力星辰老飞飞通用辅助易语言源码,魅力星辰老飞飞通用辅助易语言源码,魅力星辰老飞飞通用辅助易语言源码,魅力星辰老飞飞通用辅助易语言源码,魅力星辰老飞飞通用辅助易语言...

    通用查询,通用修改,通用插入,通用删除,模糊查询存储过程

    通用查询,通用修改,通用插入,通用删除,模糊查询存储过程,上一个通用查询存储过程有错勿下,发现不够及时请原谅

Global site tag (gtag.js) - Google Analytics