package org.slave4j.orm.hibernate;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;
import org.slave4j.orm.Compositor;
import org.slave4j.orm.Filtration;
import org.slave4j.orm.PageData;
import org.slave4j.utils.HibernateUtils;
import org.slave4j.utils.ReflectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.Assert;
/**
*
* @author baoyou E-mail:curiousby@163.com
* @version 2016年11月8日 下午3:17:57
* desc: dao基类.
* 1:该类封装了最常见数据库操作的方法,你可以继承该类,添加自己喜欢的方法
* 2:当你有多个sessionFactory时,你也可以在你的子类中重写setSessionFactory()方法
* @param <T> 实体类类型
*/
@SuppressWarnings("unchecked")
public class BaseDao<T extends BaseEntity>
{
protected Logger logger = LoggerFactory.getLogger(getClass());
protected SessionFactory sessionFactory;
protected Class<T> entityClass;
/**
* 构造方法
*/
public BaseDao()
{
this.entityClass = ReflectionUtils.getSuperClassGenricType(getClass());
}
/**
* 采用@Resource(name="xxx")按名称注入SessionFactory, 当有多个SesionFactory的时候Override本函数.
*/
@Resource
public void setSessionFactory(SessionFactory sessionFactory)
{
this.sessionFactory = sessionFactory;
}
/**
* 取得Session.
*/
public Session getSession()
{
return sessionFactory.getCurrentSession();
}
//--------------------------------------------------------------------------------------------------
/**
* 新增对象.
*/
public void save(T entity)
{
Assert.notNull(entity, "entity不能为空");
entity.setInsertTime(new Date());//插入时间
getSession().save(entity);
logger.debug("save entity: {}", entity);
}
/**
* 修改对象.
*/
public void update(T entity)
{
Assert.notNull(entity, "entity不能为空");
entity.setLastUpdateTime(new Date());//最后一次修改时间
getSession().update(entity);
logger.debug("update entity: {}", entity);
}
/**
* 删除对象.
*/
public void delete(T entity)
{
Assert.notNull(entity, "entity不能为空");
getSession().delete(entity);
logger.debug("delete entity: {}", entity);
}
/**
* 删除对象.
*/
public void delete(Integer id)
{
delete(find(id));
logger.debug("delete entity {},id is {}", entityClass.getSimpleName(), id);
}
/**
* 对象显示.
*/
public void visible(Integer id)
{
T entity = find(id);
Assert.notNull(entity, "entity不能为空");
if(!entity.isVisible())
{
entity.setVisible(true);
update(entity);
logger.debug("visible entity {},id is {}", entityClass.getSimpleName(), id);
}
}
/**
* 对象不显示.
*/
public void unVisible(Integer id)
{
T entity = find(id);
Assert.notNull(entity, "entity不能为空");
if(entity.isVisible())
{
entity.setVisible(false);
update(entity);
logger.debug("unVisible entity {},id is {}", entityClass.getSimpleName(), id);
}
}
/**
* 按id获取对象.
*/
public T find(Integer id)
{
Assert.notNull(id, "id不能为空");
return (T) getSession().load(entityClass, id);
}
/**
* 按属性查找唯一对象,匹配方式为相等.
*/
public T find(String fieldName, Object fieldValue)
{
Assert.hasText(fieldName, "fieldName不能为空");
Criterion criterion = Restrictions.eq(fieldName, fieldValue);
return (T) HibernateUtils.createCriteria(getSession(), entityClass, criterion).uniqueResult();
}
/**
* 按属性查找对象列表,匹配方式为相等.
*/
public List<T> findList(String fieldName, Object fieldValue)
{
Assert.hasText(fieldName, "fieldName不能为空");
Criterion criterion = Restrictions.eq(fieldName, fieldValue);
return HibernateUtils.createCriteria(getSession(), entityClass, criterion).list();
}
/**
* 按照过滤条件对象查找对象列表.
*/
public List<T> findList(Filtration... filtrations)
{
Criteria criteria = HibernateUtils.createCriteria(getSession(), entityClass);
//设置过滤条件
criteria = HibernateUtils.setFiltrationParameter(criteria, filtrations);
return criteria.list();
}
/**
* 按照过滤条件对象查找对象列表.
*/
public List<T> findList(List<Filtration> filtrationList)
{
Criteria criteria = HibernateUtils.createCriteria(getSession(), entityClass);
//设置过滤条件
criteria = HibernateUtils.setFiltrationParameter(criteria, filtrationList);
return criteria.list();
}
/**
* 按照过滤条件对象查找对象列表,支持排序.
*/
public List<T> findList(Compositor compositor, Filtration... filtrations)
{
Criteria criteria = HibernateUtils.createCriteria(getSession(), entityClass);
//设置过滤条件
criteria = HibernateUtils.setFiltrationParameter(criteria, filtrations);
//设置排序
criteria = HibernateUtils.setCompositorParameter(criteria, compositor);
return criteria.list();
}
/**
* 按照过滤条件对象查找对象列表,支持排序.
*/
public List<T> findList(Compositor compositor, List<Filtration> filtrationList)
{
Criteria criteria = HibernateUtils.createCriteria(getSession(), entityClass);
//设置过滤条件
criteria = HibernateUtils.setFiltrationParameter(criteria, filtrationList);
//设置排序
criteria = HibernateUtils.setCompositorParameter(criteria, compositor);
return criteria.list();
}
/**
* 获取全部对象.
*/
public List<T> findAll()
{
return findList();
}
/**
* 获取全部对象,支持排序.
*/
public List<T> findAll(Compositor compositor)
{
return findList(compositor);
}
/**
* 分页查询.
*/
public PageData<T> find(PageData<T> pageData)
{
Assert.notNull(pageData, "pageData不能为空");
Criteria criteria = HibernateUtils.createCriteria(getSession(), entityClass);
HibernateUtils.setParameter(criteria, pageData);
pageData.setResult(criteria.list());
return pageData;
}
/**
* 按id列表获取对象.
*/
public List<T> findListByIds(List<Integer> idList)
{
if (idList != null && idList.size() >= 1)
{
Criterion criterion = Restrictions.in("id", idList);
return HibernateUtils.createCriteria(getSession(), entityClass, criterion).list();
} else
{
return null;
}
}
//--------------------------------------------------------------------------------------------------
/**
* 按HQL查询唯一对象.
* @param hql "from Users where name=? and password=?"
* @param values 数量可变的参数,按顺序绑定.
* @return
*/
public <X> X find(String hql, Object... values)
{
return (X) HibernateUtils.createQuery(getSession(), hql, values).uniqueResult();
}
/**
* 按HQL查询唯一对象.
* @param hql "from Users where name=:name and password=:password"
* @param values 命名参数,按名称绑定.
* @return
*/
public <X> X find(String hql, Map<String, ?> values)
{
return (X) HibernateUtils.createQuery(getSession(), hql, values).uniqueResult();
}
/**
* 按HQL查询对象列表.
* @param hql "from Users where name=? and password=?"
* @param values 数量可变的参数,按顺序绑定.
* @return
*/
public <X> List<X> findList(String hql, Object... values)
{
return HibernateUtils.createQuery(getSession(), hql, values).list();
}
/**
* 按HQL查询对象列表.
* @param hql "from Users where name=:name and password=:password"
* @param values 命名参数,按名称绑定.
* @return
*/
public <X> List
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
shiro springmvc hibernate (242个子文件)
BaseDao.class 10KB
HibernateUtils.class 10KB
BasisDao.class 8KB
ReflectionUtils.class 7KB
BaseService.class 7KB
RedisConnectionContext.class 6KB
User.class 4KB
WebUtils.class 4KB
SearchTag.class 4KB
IPFilter.class 4KB
SysRealm.class 4KB
UserAciton.class 4KB
RedisConnection.class 4KB
LoginAuthInterceptor.class 3KB
AuthInterceptor.class 3KB
RightValidateUtil.class 3KB
RedisConnectionConfigBean.class 3KB
Right.class 3KB
Role.class 3KB
Filtration.class 3KB
PageData.class 3KB
RightFilterInterceptor.class 3KB
EncryptUtils.class 2KB
GuavaTest.class 2KB
QiNiuActionTest.class 2KB
Pagination.class 2KB
Filtration$FiledType.class 2KB
RightService.class 2KB
UserAcitonTest.class 1KB
UserAcitonTest$1.class 1KB
Filtration$MatchType.class 1KB
StaticPageAction.class 1KB
BaseEntity.class 1KB
Compositor$CompositorType.class 1KB
UserServiceTest.class 1KB
GuavaTest$1.class 1KB
RedisEntry.class 1KB
RoleService.class 1KB
UserService.class 1KB
UserDaoTest.class 1KB
MyStringUtils.class 871B
Compositor.class 851B
BaseJunitTest.class 715B
EncryptUtils.class 702B
QiNiuAction.class 523B
RightDao.class 508B
RoleDao.class 504B
UserDao.class 504B
AuthThrowable.class 491B
CommonThrowable.class 467B
BaseAction.class 317B
Constants.class 196B
.classpath 17KB
org.eclipse.wst.common.component 868B
org.eclipse.wst.jsdt.ui.superType.container 49B
comm.css 127KB
bootstrap.min.css 115KB
ui.css 95KB
jQuery_ui.css 31KB
style.css 18KB
extend.css 14KB
daterangepicker.css 6KB
jBootsrapPage.css 3KB
iconfont.eot 6KB
guava-20.0.jar 2.33MB
hibernate-3.2.7.ga.jar 2.21MB
hibernate-core-3.3.0.SP1.jar 2.16MB
aspectjweaver-1.7.2.jar 1.74MB
ehcache-core-2.5.0.jar 1.15MB
spring-context-3.1.0.RELEASE.jar 810KB
mysql-connector-java-5.1.18.jar 771KB
javassist-3.11.0.GA.jar 600KB
spring-beans-3.1.0.RELEASE.jar 575KB
commons-collections-3.2.1.jar 562KB
spring-webmvc-3.1.0.RELEASE.jar 559KB
spring-web-servlet-3.1.0.RELEASE.jar 559KB
spring-web-3.1.0.RELEASE.jar 528KB
mail-1.4.5.jar 496KB
log4j-1.2.16.jar 470KB
antlr-2.7.6.jar 433KB
spring-core-3.1.0.RELEASE.jar 432KB
quartz-1.7.3.jar 410KB
jstl-1.2.jar 405KB
spring-jdbc-3.1.0.RELEASE.jar 392KB
standard-1.1.2.jar 384KB
spring-orm-3.1.0.RELEASE.jar 369KB
shiro-core-1.2.3.jar 359KB
okhttp-3.2.0.jar 328KB
spring-aop-3.1.0.RELEASE.jar 324KB
dom4j-1.6.1.jar 307KB
cglib-2.1_3.jar 276KB
hibernate-annotations-3.4.0.GA.jar 273KB
commons-lang-2.5.jar 273KB
spring-transaction-3.1.0.RELEASE.jar 240KB
spring-tx-3.1.0.RELEASE.jar 240KB
commons-beanutils-1.8.3.jar 227KB
spring-test-3.1.0.RELEASE.jar 224KB
ehcache-1.2.3.jar 203KB
gson-2.3.jar 202KB
commons-beanutils-core-1.8.3.jar 202KB
共 242 条
- 1
- 2
- 3
资源评论
- wq01472016-12-09下来学习下
curiousby
- 粉丝: 23
- 资源: 151
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C语言基础-C语言编程基础之Leetcode编程题解之第39题组合总和.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第38题外观数列.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第37题解数独.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第36题有效的数独.zip
- C语言基础-C语言编程基础之Leetcode编程题解之第35题搜索插入位置.zip
- index.wxml
- C语言基础-C语言编程基础之Leetcode编程题解之第33题搜索旋转排序数组.zip
- 基于Python实现的手写数字识别系统源码.zip
- 从网页提取禁止转载的文字
- C语言基础-C语言编程基础之Leetcode编程题解之第32题最长有效括号.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功