package cn.imethan.common.hibernate;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.CriteriaSpecification;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projection;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import org.hibernate.internal.CriteriaImpl;
import org.hibernate.transform.ResultTransformer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate4.HibernateTemplate;
import org.springframework.util.Assert;
import cn.imethan.common.hibernate.SearchFilter.MatchType;
import cn.imethan.common.utils.ConvertUtil;
import cn.imethan.common.utils.ReflectionUtil;
/**
* HibernateTemplateSupport.java
*
* DAO实现类继承该类,实现CRUD操作
*
* @author Ethan Wong
* @time 2015年8月29日下午10:39:57
*/
public class HibernateTemplateSupport<T, P extends Serializable> implements CrudOperations<T,P> {
@Autowired
protected SessionFactory sessionFactory;
@Autowired
protected HibernateTemplate hibernateTemplate;
protected Class<T> clazz;//实体类
public HibernateTemplateSupport() {
clazz = ReflectionUtil.getClassGenricType(this.getClass(), 0);
}
/**
* 获取session
*
* @return
*
* @author Ethan
* @datetime 2015年8月31日 下午8:25:18
*/
public Session getSession() {
return hibernateTemplate.getSessionFactory().getCurrentSession();
}
/**
* 创建HQL查询
* @param hql
* @return
*
* @author Ethan
* @datetime 2015年8月31日 下午10:22:36
*/
public Query createQuery(String hql){
return this.getSession().createQuery(hql);
}
// -------------------------------------------------------------------------
// 增加方法
// -------------------------------------------------------------------------
@Override
public void save(T entity) {
this.getSession().save(entity);
}
@Override
public void saveOrUpdate(T entity) {
this.getSession().saveOrUpdate(entity);
}
// -------------------------------------------------------------------------
// 删除方法
// -------------------------------------------------------------------------
@Override
public void deleteById(P id) {
this.hibernateTemplate.delete(this.getById(id));
}
@Override
public void delete(T entity) {
Assert.isNull(entity, "不能删除entity为空的记录");
this.hibernateTemplate.delete(entity);
}
@Override
public void deleteAll(){
String entityName = this.hibernateTemplate.getSessionFactory().getClassMetadata(this.clazz).getEntityName();
String DELETE_ALL = "delete from " + entityName;
getSession().createQuery(DELETE_ALL);
}
// -------------------------------------------------------------------------
// 查询方法
// -------------------------------------------------------------------------
@Override
public T getById(P id) {
return (T) this.getSession().get(clazz, id);
}
@Override
public List<T> getByIdList(Collection<P> ids, boolean isCache) {
String idName = this.hibernateTemplate.getSessionFactory().getClassMetadata(this.clazz).getIdentifierPropertyName();
return getByCriterions(isCache, new Criterion[] { Restrictions.in(idName, ids) });
}
@Override
public List<T> getAll() {
return this.hibernateTemplate.loadAll(clazz);
}
@Override
public List<T> getByFilter(SearchFilter searchFilter, boolean isCache) {
Criterion criterion = buildCriterionBySearchFilter(searchFilter.getPropertyName(), searchFilter.getPropertyClass(), searchFilter.getMatchValue(), searchFilter.getMatchType());
return getByCriterions(isCache, new Criterion[] { criterion });
}
@Override
public List<T> getByFilters(List<SearchFilter> searchFilters, boolean isCache) {
List<Criterion> list = new ArrayList<Criterion>();
for (SearchFilter searchFilter : searchFilters) {
Criterion criterion = buildCriterionBySearchFilter(searchFilter.getPropertyName(), searchFilter.getPropertyClass(), searchFilter.getMatchValue(), searchFilter.getMatchType());
list.add(criterion);
}
return getByCriterions(isCache, (Criterion[]) list.toArray(new Criterion[list.size()]));
}
@Override
public List<T> getByFilterAndOrder(SearchFilter searchFilter, Order order, boolean isCache) {
Criterion criterion = buildCriterionBySearchFilter(searchFilter.getPropertyName(), searchFilter.getPropertyClass(), searchFilter.getMatchValue(), searchFilter.getMatchType());
List<Order> orders = new ArrayList<Order>();
orders.add(order);
return getByCriterionsAndOrders(isCache, new Criterion[] { criterion }, orders);
}
@Override
public List<T> getByFilterAndOrders(SearchFilter searchFilter, List<Order> orders, boolean isCache) {
Criterion criterion = buildCriterionBySearchFilter(searchFilter.getPropertyName(), searchFilter.getPropertyClass(), searchFilter.getMatchValue(), searchFilter.getMatchType());
return getByCriterionsAndOrders(isCache, new Criterion[] { criterion }, orders);
}
@Override
public List<T> getByFiltersAndOrder(List<SearchFilter> searchFilters, Order order, boolean isCache) {
List<Criterion> list = new ArrayList<Criterion>();
for (SearchFilter searchFilter : searchFilters) {
Criterion criterion = buildCriterionBySearchFilter(searchFilter.getPropertyName(), searchFilter.getPropertyClass(), searchFilter.getMatchValue(), searchFilter.getMatchType());
list.add(criterion);
}
List<Order> orders = new ArrayList<Order>();
orders.add(order);
return getByCriterionsAndOrders(isCache, (Criterion[]) list.toArray(new Criterion[list.size()]), orders);
}
@Override
public List<T> getByFiltersAndOrders(List<SearchFilter> searchFilters, List<Order> orders, boolean isCache) {
List<Criterion> list = new ArrayList<Criterion>();
for (SearchFilter searchFilter : searchFilters) {
Criterion criterion = buildCriterionBySearchFilter(searchFilter.getPropertyName(), searchFilter.getPropertyClass(), searchFilter.getMatchValue(), searchFilter.getMatchType());
list.add(criterion);
}
return getByCriterionsAndOrders(isCache, (Criterion[]) list.toArray(new Criterion[list.size()]), orders);
}
@Override
public Page<T> getPageByHql(Page<T> page, boolean isCache, String hql, Map<String, ?> values) {
Assert.notNull(page, "page不能为空");
Query query = this.getSession().createQuery(hql).setProperties(values);
long totalCount = countSqlResult(hql, isCache, values);
page.setTotalCount(totalCount);
if (isCache) {
query.setCacheable(true);
}
page.setList(query.list());
return page;
}
@Override
public Page<T> getPage(Page<T> page, boolean isCache) {
return getPageByCriterions(page, isCache, new Criterion[0],null);
}
@Override
public Page<T> getPageByFilter(Page<T> page,SearchFilter searchFilter, boolean isCache) {
Criterion criterion = buildCriterionBySearchFilter(searchFilter.getPropertyName(), searchFilter.getPropertyClass(), searchFilter.getMatchValue(), searchFilter.getMatchType());
List<SearchFilter> searchFilters = new ArrayList<SearchFilter>();
searchFilters.add(searchFilter);
return this.getPageByCriterions(page, isCache, new Criterion[] { criterion },searchFilters);
}
@Override
public Page<T> getPageByFilterAndOrder(Page<T> page,SearchFilter searchFilter,Order order, boolean isCache) {
Criterion criterion = buildCriterionBySearchFilter(searchFilter.getPropertyName(), searchFilter.getPropertyClass(), searchFilter.getMatchValue(), search
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备、移动设备等 操作系统:LInux、树莓派、安卓开发、微机操作系统、网络操作系统、分布式操作系统等。此外,还有嵌入式操作系统、智能操作系统等。 网络与通信:数据传输、信号处理、网络协议、网络与通信硬件、网络安全网络与通信是一个非常广泛的领域,它涉及到计算机科学、电子工程、数学等多个学科的知识。 云计算与大数据:包括云计算平台、大数据分析、人工智能、机器学习等,云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息可以按需提供给计算机和其他设备。
资源推荐
资源详情
资源评论
收起资源包目录
JAVA企业级项目通用权限框架.zip (493个子文件)
taskArtifacts.bin 30KB
fileSnapshots.bin 27KB
taskArtifacts.bin 21KB
fileSnapshots.bin 19KB
outputFileStates.bin 19KB
fileHashes.bin 18KB
fileHashes.bin 18KB
outputFileStates.bin 18KB
.classpath 738B
org.eclipse.wst.common.component 768B
org.eclipse.wst.jsdt.ui.superType.container 49B
bootstrap.css 144KB
bootstrap.min.css 120KB
AdminLTE.css 103KB
AdminLTE.min.css 84KB
ionicons.min.css 50KB
_all-skins.css 48KB
_all-skins.min.css 41KB
datepicker3.css 33KB
font-awesome.css 32KB
font-awesome.min.css 26KB
font-awesome.min.css 26KB
_all.css 21KB
ui.jqgrid-bootstrap.css 17KB
select2.css 17KB
_all.css 15KB
select2.min.css 15KB
_all.css 14KB
_all.css 13KB
daterangepicker-bs3.css 7KB
zTreeStyle.css 6KB
skin-black-light.css 5KB
skin-blue-light.css 5KB
skin-yellow-light.css 4KB
skin-purple-light.css 4KB
skin-green-light.css 4KB
skin-red-light.css 4KB
skin-black-light.min.css 4KB
skin-black.css 4KB
skin-blue-light.min.css 4KB
skin-yellow-light.min.css 4KB
skin-purple-light.min.css 4KB
skin-green-light.min.css 4KB
skin-red-light.min.css 4KB
skin-blue.css 4KB
skin-yellow.css 3KB
skin-purple.css 3KB
skin-green.css 3KB
skin-red.css 3KB
skin-black.min.css 3KB
skin-blue.min.css 3KB
skin-purple.min.css 3KB
skin-yellow.min.css 3KB
skin-green.min.css 3KB
skin-red.min.css 3KB
bootstrap3-wysihtml5.css 2KB
purple.css 2KB
yellow.css 2KB
orange.css 2KB
green.css 2KB
bootstrap3-wysihtml5.min.css 2KB
aero.css 2KB
blue.css 2KB
pink.css 2KB
grey.css 2KB
red.css 2KB
line.css 2KB
purple.css 2KB
orange.css 2KB
yellow.css 2KB
orange.css 2KB
purple.css 2KB
yellow.css 2KB
green.css 2KB
green.css 2KB
aero.css 2KB
pink.css 2KB
blue.css 2KB
grey.css 2KB
pink.css 2KB
blue.css 2KB
grey.css 2KB
aero.css 2KB
red.css 2KB
red.css 2KB
all.css 2KB
minimal.css 2KB
polaris.css 2KB
square.css 2KB
purple.css 1KB
orange.css 1KB
yellow.css 1KB
green.css 1KB
pink.css 1KB
blue.css 1KB
grey.css 1KB
aero.css 1KB
futurico.css 1KB
red.css 1KB
flat.css 1KB
共 493 条
- 1
- 2
- 3
- 4
- 5
资源评论
妄北y
- 粉丝: 1w+
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 电子设计竞赛的单相不间断电源设计
- cutcamera1715961370938.png
- 基于MATLAB的图像处理课程设计报告.doc
- tensorflow-gpu-2.6.0-cp38-cp38-manylinux2010-x86-64.whl
- mmexport1715960553858.png
- tensorflow-gpu-2.6.0-cp37-cp37m-manylinux2010-x86-64.whl
- 通过 .NET 应用程序中的源代码查找 SQL 注入
- 电子设计竞赛2007年B题 无线识别装置.doc
- Wox全局搜索工具,一款win下的全局搜索软件
- 使用高级集群管理 (ACM) 模板来管理用户、组和命名空间
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功