BaseDao可以这样设计


package org.ks4j.orm.hibernate;

import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.persistence.MappedSuperclass;

import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;
import org.ks4j.orm.Compositor;
import org.ks4j.orm.Filtration;
import org.ks4j.orm.PageData;
import org.ks4j.utils.HibernateUtils;
import org.ks4j.utils.ReflectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.util.Assert;

/**
* dao基类.
* 1:该类封装了最常见数据库操作的方法,你可以继承该类,添加自己喜欢的方法
* 2:当你有多个sessionFactory时,你也可以在你的子类中重写setSessionFactory()方法
*
*
* @param <T> 实体类类型
*/
@SuppressWarnings("unchecked")
@MappedSuperclass
public class BaseDao<T>
{
protected Logger logger = LoggerFactory.getLogger(getClass());

protected SessionFactory sessionFactory;

protected Class<T> entityClass;

//操作SQL语句的模板
private JdbcTemplate jdbcTemplate;

//注入Spring JdbcTemplate 对象
@Resource(name="jdbcTemplate")
public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}

/**
* 构造方法
*/
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不能为空");
getSession().save(entity);
logger.debug("save entity: {}", entity);
}

/**
* 修改对象.
*/
public void update(T entity)
{
Assert.notNull(entity, "entity不能为空");
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(String id)
{
delete(findById(id));
logger.debug("delete entity {},id is {}", entityClass.getSimpleName(), id);
}

/**
* 按id获取对象.
*/
public T findById(String id)
{
Assert.notNull(id, "id不能为空");
return (T) getSession().get(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()
{
List<Map<String,Object>> list = jdbcTemplate.queryForList("select * from sys_role");
for(Map item:list){
System.out.println(item.toString());
}

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());
// jdbcTemplate.qu
return pageData;
}

/**
* 根据分页查询.
*/ // c.name=:name and c.password=:password .setEntity("name")
public PageData<T> find(String hql, Map<String, ?> values, PageData<T> pageData)
{
Assert.notNull(pageData, "pageData不能为空");
Query query = HibernateUtils.createQuery(getSession(), hql, values)
.setFirstResult(pageData.getPagination().getCurrentlyPageFirstResoultIndex())
.setMaxResults(pageData.getPagination().getPageSize());


pageData.setResult(query.list());
return pageData;
}


/**
* 按id列表获取对象.
*/
public List<T> findListByIds(List<String> 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<X> findList(String hql, Map<String, ?> values)
{
return HibernateUtils.createQuery(getSession(), hql, values).list();
}

/**
* 执行HQL进行批量修改/删除操作.
* @return 更新记录数.
*/
public int batchExecute(String hql, Object... values)
{
return HibernateUtils.createQuery(getSession(), hql, values).executeUpdate();
}

/**
* 执行HQL进行批量修改/删除操作.
* @return 更新记录数.
*/
public int batchExecute(String hql, Map<String, ?> values)
{
return HibernateUtils.createQuery(getSession(), hql, values).executeUpdate();
}

//--------------------------------------------------------------------------------------------------

/**
* 本地SQL查询.
* @return 查询List.
*/
public List find(String sql)
{
Assert.hasText(sql, "sql不能为空");
return getSession().createSQLQuery(sql).list();
}




}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值