通用一个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通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme通用驱动 64Nvme...
方便下载通用工具方便下载通用工具方便下载通用工具方便下载通用工具方便下载通用工具方便下载通用工具方便下载通用工具方便下载通用工具方便下载通用工具方便下载通用工具方便下载通用工具方便下载通用工具方便下载...
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 (组件列表) ...
04.AxureUX中后台管理信息系统通用原型设计方案 v2(区块组合).rp 04.AxureUX中后台管理信息系统通用原型设计方案 v2(区块组合).rp 04.AxureUX中后台管理信息系统通用原型设计方案 v2(区块组合).rp 04.AxureUX中后台...
易语言通用脱壳机 鉴于目前易语言的加载机制,因此几乎所有的壳都可以被通用的脱掉. 然后我就写了一个基于此的通用脱壳机. 目前支持易语言的两种编译方式 独立编译 和非独立编译.自动识别并修复数据. 特别是独立编译...
《电子计算机场地通用规范》GB2887-2000《电子计算机场地通用规范》GB2887-2000《电子计算机场地通用规范》GB2887-2000《电子计算机场地通用规范》GB2887-2000《电子计算机场地通用规范》GB2887-2000《电子计算机...
Q/GDW1242-2015《输电线路状态监测装置通用技术规范》 及 编制说明 Q/GDW1242-2015《输电线路状态监测装置通用技术规范》 及 编制说明 Q/GDW1242-2015《输电线路状态监测装置通用技术规范》 及 编制说明 Q/GDW...
db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用数据库自学教程db2通用...
PHP通用性很强的用户及后台管理系统源码 PHP通用性很强的用户及后台管理系统源码 PHP通用性很强的用户及后台管理系统源码 PHP通用性很强的用户及后台管理系统源码 PHP通用性很强的用户及后台管理系统源码 ...
人工智能通用大模型(ChatGPT)的进展__风险与应对.pdf人工智能通用大模型(ChatGPT)的进展__风险与应对.pdf人工智能通用大模型(ChatGPT)的进展__风险与应对.pdf人工智能通用大模型(ChatGPT)的进展__风险与应对.pdf人工...
AxureUX WEB前后端交互原型通用元件库 v3.11 (Axure RP9专用版) AxureUX WEB前后端交互原型通用元件库 v3.11 (Axure RP9专用版) AxureUX WEB前后端交互原型通用元件库 v3.11 (Axure RP9专用版) AxureUX WEB前后端...
1. 通用类库 DC.CommonLiteLib针对一些常用算法,线程管理,IO控制,以及ConvertHelper类型转换,StringHelper字符串封装,FileHelper 文件操作封装等,另有CHM官方文件解释用法。 2. 用数据库类库 DC....
易语言直接使用通用型源码,直接使用通用型,模板,子程序1,强制转换,指针到整数,取通用类型,置名字,取名字,IsBadReadPtr,GlobalSize,CopyMemory,SendMessage
通用查询,通用修改,通用插入,通用删除,模糊查询存储过程,上一个通用查询存储过程有错勿下,发现不够及时请原谅
java 通用分页java 通用分页java 通用分页java 通用分页
全国电信通用DNS地址,各各省的通用DNS地址,很详细,很方便。
LIB007 - AxureUX WEB前后端交互原型通用元件库 v3 (Axure RP9作品)LIB007 - AxureUX WEB前后端交互原型通用元件库 v3 (Axure RP9作品)LIB007 - AxureUX WEB前后端交互原型通用元件库 v3 (Axure RP9作品)LIB007 - ...
通过.net反射功能实现的通用Bll、通用Dal,极大的减少了重复代码,减少编码工作量
通用汽车编程软件Patac DPS适用于别克,雪佛兰,凯迪拉克