HibernateCRUD基础框架(3)-简单的和较为复杂的标准的CRUD API(一)

2014-11-24 07:14:41 · 作者: · 浏览: 2

优点:简单的和基础的CRUD功能可以很快实现,可以说是比较的“标准化”。维护起来也很容易。

缺点:性能没有保障。不支持特别复杂的CRUD。

可以适用的场景:小型Web项目

1.CrudDao完成最基本的增删改查

包括增加一个对象create、根据主键获得对象get、更新一个持久化的对象update、逻辑删除一个对象remove、逻辑恢复一个对象recover、物理删除一个持久化的对象delete、更新属性(TODO,需要增加where限制)、更新属性update。

package cn.fansunion.hibernate;

import java.lang.reflect.ParameterizedType;
import java.util.Map;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;

import cn.fansunion.hibernate.constants.CommonConstants;
import cn.fansunion.hibernate.constants.StatusConstants;
import cn.fansunion.hibernate.sql.update.HqlUpdateBuilder;
import cn.fansunion.hibernate.util.Pair;

/**
 * Dao基类,完成最基本的增删改查操作。
 *
 * @author LeiWen@FansUnion.cn
 */
public class CrudDao
  
    {

    /**
     * 表的实体类型
     */
    protected Class
   
     modelClazz; @Autowired protected SessionFactory sessionFactory; public CrudDao() { this.modelClazz = (Class
    
     ) ((ParameterizedType) getClass() .getGenericSuperclass()).getActualTypeArguments()[0]; } // ////////////////////////////////////////////////////// // ///////////泛型方法-CRUD///////////////////////// // ///////////////////////////////////////////////////// /** * 根据主键(唯一标志)查询一条记录 * * @param id * 主键 * @return 一条记录对应的实体对象 */ public T get(Integer id) { T entity = (T) getCurrentSession().get(modelClazz, id); return entity; } /** * 向
     数据库插入一条记录 * * @param entity * 与数据库表对应的实体对象 */ public void create(T entity) { getCurrentSession().save(entity); } /** * 更新一条记录 * * @param entity * 持久态的实体对象 */ public void update(T entity) { getCurrentSession().update(entity); } /** * 根据主键(唯一标志),逻辑删除一条记录 * * @param id * 主键 */ public void remove(Integer id) { updateProperties(new Pair(CommonConstants.ID, id), new Pair( CommonConstants.IS_DELETED, StatusConstants.DELETED)); } /** * 根据主键(唯一标志),恢复一条记录 * * @param id * 主键 */ public void recover(Integer id) { updateProperties(new Pair(CommonConstants.ID, id), new Pair( CommonConstants.IS_DELETED, StatusConstants.NORMAL)); } /** * 物理删除一条记录 * * @param entity * 持久态的实体对象 */ public void delete(T entity) { getCurrentSession().delete(entity); } /** * 获取主数源 */ protected Session getCurrentSession() { return sessionFactory.getCurrentSession(); } // /////////////////////////////////////////////// // /////根据属性更新(TODO 增加where限制)////////// // /////////////////////////////////////////////// /** * 根据1个属性更新(谨慎使用) * * @param key * 属性名称 * @param value * 属性的值 * @return 更新的记录数 */ public Integer updateProperty(String key, Object value) { HqlUpdateBuilder builder = new HqlUpdateBuilder(); String hql = builder.param(key, value).toHql(); return update(hql, key, value); } /** * 根据0个、1个或多个属性更新(强烈建议,至少使用2个键值对) */ public Integer updateProperties(Pair... pair) { HqlUpdateBuilder builder = new HqlUpdateBuilder(); String hql = builder.param(pair).toHql(); return update(hql, pair); } /** * 根据多个键值对,更新记录 */ public Integer updateProperties(Map
     
       params) { HqlUpdateBuilder builder = new HqlUpdateBuilder(); String hql = builder.param(params).toHql(); return update(hql, params); } /** * 根据hql语句和键值对,更新记录 * * @param hql * hql语句 * @param key * 属性名称 * @param value * 属性的值 * @return */ public Integer update(String hql, String key, Object value) { Map
      
        params = createMap(key, value); return update(hql, params); } public Integer update(String hql, Pair... pair) { M