• hibernate常用增删改查接口实现


      1 /**
      2  * 作者:宫长明
      3  * 
      4  */
      5 
      6 
      7 import java.io.Serializable;
      8 import java.util.List;
      9 import java.util.Map;
     10 
     11 import org.hibernate.criterion.Criterion;
     12 import org.hibernate.criterion.DetachedCriteria;
     13 
     14 @SuppressWarnings("unchecked")
     15 public interface IBaseDao<T,PK extends Serializable> {
     16     /**
     17      * 保存PO对象
     18      * @param obj PO所要保存值对象
     19      * @return 保存记录数 0:为保存失败
     20      * */
     21     public void save(T obj);
     22     /**
     23      * 保存PO对象
     24      * @param obj PO所要保存值对象
     25      * @return 保存记录数 0:为保存失败
     26      * */
     27     public void saveByObj(T obj);
     28     
     29     /**
     30      * 保存多个PO对象,将PO封装到List中
     31      * @param obj PO所要保存值对象
     32      * @return 保存记录数 0:为保存失败
     33      * */
     34     public void save(List<T> ls);
     35     
     36     /**
     37      * 删除表中所有数据,通过Object.ClassName得到表名称
     38      * @param tableName删除表名称
     39      * @return 删除记录数据
     40      * */
     41     public int deleteAll(String tableName);
     42     
     43     public void deleteById(PK id);
     44     
     45     /**  
     46      * 根据查询语句,返回对象列表  
     47      *   
     48      * @param hql  
     49      *            查询语句  
     50      * @return 符合查询语句的对象列表 
     51      */  
     52     public List find(String hql);
     53     
     54     /**  
     55      * 返回指定起始位置,指定条数的对象  
     56      *   
     57      * @param hql  
     58      *            查询语句  
     59      * @param firstResult  
     60      *            起始位置  
     61      * @param maxResults  
     62      *            最多纪录数  
     63      * @return list 结果列表  
     64      */  
     65     //public List<T> find(String hql,int firstResult,int maxResults);
     66     
     67     /**  
     68      * 返回指定起始位置,指定条数的对象  
     69      *   
     70      * @param hql  
     71      *            查询语句  
     72      * @param pageNo  
     73      *            页数  
     74      * @return list 结果列表  
     75      */  
     76     public List<T> find(String hql,int pageNo,int maxResults);
     77     
     78     /**  
     79      * 查询语句需要的条件参数。通过map传递  
     80      *   
     81      * @param hql  
     82      *            查询语句  
     83      * @param map  
     84      *            参数  
     85      * @param firstResult  
     86      *            起始位置  
     87      * @param maxResults  
     88      *            最多纪录数  
     89      * @return list 结果列表  
     90      */  
     91     //public List<T> find(String hql, Map map, int firstResult,int maxResults);
     92     
     93     /**  
     94      * 查询语句需要的条件参数。通过map传递  
     95      *   
     96      * @param hql  
     97      *            查询语句  
     98      * @param map  
     99      *            参数  
    100      * @param pageNo  
    101      *            页数 
    102      */  
    103     public List<T> find(String hql, Map map, int pageNo,int maxResults);
    104     
    105     /**  
    106      * 根据查询语句,返回对象列表  
    107      *   
    108      * @param hql  
    109      *            查询语句  
    110      * @return 符合查询语句的对象列表 
    111      */  
    112     public List<T> find(String hql, Map map);
    113     
    114     
    115     /**  
    116      * 通过Hql 执行update/delete操作  
    117      *   
    118      * @param hql  
    119      * @return  
    120      */  
    121     public int executeUpdate(String hql);
    122     
    123     /**  
    124      * 查询表中所有记录  
    125      */ 
    126     public List<T> findAll() ;
    127     
    128     /**  
    129      * 通过 DetachedCriteria 进行查询指定查询条数
    130      * @param firstResult  
    131      *            起始位置  
    132      * @param maxResults  
    133      *            最多纪录数 
    134      * @param dc 
    135      * 
    136      * @return 符合查询语句的对象列表
    137      */  
    138     public List<T> findByCriteria(DetachedCriteria dc,int firstResult, int maxResults);
    139     
    140     /**
    141      * 统计符合查询语句的条数
    142      * @param dc 
    143      * */
    144     public int countByCriteria(DetachedCriteria dc);
    145     
    146     /**  
    147      * 通过Hql 执行update/delete操作 带条件查询
    148      *   
    149      * @param hql  
    150      * @return  
    151      */ 
    152     public int executeUpdate(String hql, Map pMap);
    153     
    154     /**
    155      * 删除obj指定ID记录,通过捕捉异常来判断是否删除成功
    156      * @param obj 指定ID记录数
    157      * */
    158     public void delete(T obj);
    159     
    160     /**
    161      * 根据ID从内存中加载记录
    162      * @param aclass 类
    163      * @param id 可以为任意类型
    164      * */
    165     public T load(PK id) ;
    166     
    167     /**
    168      * 加载数据
    169      * */
    170     public T get(PK id);
    171     
    172     public Object getObj(Class cls,PK id);
    173     
    174     /**
    175      * 保存或修改
    176      * @param obj 保存对象
    177      * */
    178     public void saveOrUpdate(T obj);
    179     
    180     public void saveOrUpdate(List<T> lsj);
    181     /**
    182      * 更新记录
    183      * @param obj 保存对象
    184      * */
    185     public void update(T obj);
    186     /**
    187      * 更新记录
    188      * @param obj 保存对象
    189      * */
    190     public int update(String hql);
    191     /**  
    192      * TODO count hql 方法 . 带条件 
    193      */  
    194     public int count(String hql, Map params);
    195     
    196     /**  
    197      * TODO count hql 方法
    198      */  
    199     public Integer count(String hql);
    200     
    201     /**
    202      * 根据hql删除记录
    203      * @param hql 删除语句
    204      * @param map 条件参数
    205      * @return 删除条数
    206      * */
    207     public int delete(String hql,Map map);
    208     
    209     /**
    210      * 根据hql删除记录
    211      * @param hql 删除语句
    212      * @param map 条件参数
    213      * @return 删除条数
    214      * */
    215     public int delete(String hql);
    216     
    217     /**
    218      * 根据hql语句,更新记录部分字段
    219      * @param hql 更新语句
    220      * @param map 更新参数及条件
    221      * @return 返回值大于0则更新成功,否则更新失败
    222      * */
    223     public int update(String hql,Map map);
    224     
    225     /**
    226      * 返回Object List数组
    227      * @param hql
    228      * @param map        hql中的参数和参数值
    229      * @param pageNo     页码
    230      * @param maxResults 每页显示最大条数
    231      * @return
    232      */
    233     public List findObj( String hql, Map map, int pageNo, int maxResults);
    234     
    235     /**
    236      * 返回Object List数组
    237      * @param hql
    238      * @return
    239      */
    240     public List findObj( String hql);
    241     
    242     /**
    243      * 返回Object List数组
    244      * @param hql
    245      * @param map        hql中的参数和参数值
    246      * @return
    247      */
    248     public List findObj( String hql, Map map);
    249     
    250     /**
    251      * 
    252      * @功能描述: 查询
    253      * @param firstResult首条数据位数
    254      * @param maxResult  每次取出最大条数
    255      * @param criterion
    256      * @return
    257      * @throws DataAccessException   
    258      * @return:List<T> 
    259      * @创建人:宫长明
    260      * @创建时间:May 28, 2010 4:14:31 PM
    261      */
    262     public List<T> findByCriteria( int firstResult,  int maxResults,  Criterion... criterion) ;
    263     
    264     /**
    265      * 
    266      * @功能描述: 查义
    267      * @param firstResult   首条查询位置
    268      * @param maxResults    第次查询最大数  小于0查询所有
    269      * @param sortProperty  排序字段
    270      * @param ascend        排序方法  true: ASC fasle: DESC
    271      * @param criterion     
    272      * @return   
    273      * @return:List<T> 
    274      * @创建人:宫长明
    275      * @创建时间:May 28, 2010 4:14:37 PM
    276      */
    277     public List<T> findByCriteria( int firstResult,  int maxResults,  String sortProperty,  boolean ascend,  Criterion... criterion);
    278     
    279     /**
    280      * 
    281      * @功能描述: 
    282      * @param criterion
    283      * @return
    284      * @throws DataAccessException   
    285      * @return:List<T> 
    286      * @创建人:宫长明
    287      * @创建时间:May 28, 2010 4:14:41 PM
    288      */
    289     public List<T> findByCriteria( Criterion...criterion); 
    290     //throws DataAccessException;
    291     
    292     /**
    293      * 
    294      * @功能描述: 
    295      * @param criterion
    296      * @return
    297      * @throws DataAccessException   
    298      * @return:int 
    299      * @创建人:宫长明
    300      * @创建时间:May 28, 2010 4:14:45 PM
    301      */
    302     public int countByCriteria( Criterion... criterion) ;
    303     
    304     /**
    305      * @功能描述: 根据List删除数据
    306      * @param obj List<T>
    307      * @创建人:宫长明
    308      * @创建时间:2011-4-8 上午09:15:05
    309      */
    310     public void deleteByList(List<T> obj);
    311     
    312     /**
    313      * @功能描述: 合并重复obj后保存或添加
    314      * @param obj
    315      * @创建人:王树峰
    316      * @创建时间:2011-4-8 下午03:19:03
    317      */
    318     public void saveOrUpdateMerge(T obj);
    319     
    320     /**
    321      * 
    322     * @Title: saveOrUpdateClear 
    323     * @Description: 多了一句话.clear()
    324     * @return: void
    325     * @param326     * @throws
    327      */
    328     public void saveOrUpdateClear(T obj);
    329     
    330     public T mergeObj(T obj);
    331 }
      1 import java.io.Serializable;
      2 import java.lang.reflect.ParameterizedType;
      3 import java.sql.SQLException;
      4 import java.util.ArrayList;
      5 import java.util.List;
      6 import java.util.Map;
      7 
      8 import org.hibernate.Criteria;
      9 import org.hibernate.HibernateException;
     10 import org.hibernate.Query;
     11 import org.hibernate.Session;
     12 import org.hibernate.criterion.Criterion;
     13 import org.hibernate.criterion.DetachedCriteria;
     14 import org.hibernate.criterion.Order;
     15 import org.hibernate.criterion.Projections;
     16 
     17 
     18 /**
     19  * 
     20  * @类描述:  Hibernate Dal 基本方法
     21  * @创建人:宫长明   
     22  * @创建时间:May 28, 2010 4:11:57 PM  
     23  * @项目名:办公用品  
     24  * @版本信息:V 1.0  
     25  * @Copyright (c) 北京开诚阳光科技有限公司-版权所有 V 2010.0
     26  */
     27 @SuppressWarnings("unchecked")
     28 public class BaseDaoHibernate<T,PK extends Serializable> extends HibernateDaoSupport implements IBaseDao<T,PK>{
     29     
     30     private final Class<T> aclass;
     31     
     32     
     33     public BaseDaoHibernate(){
     34         this.aclass = (Class<T>)((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
     35     }
     36 
     37     public int count(final String hql,final Map mparams) {
     38         
     39         List tempList = this.getHibernateTemplate().executeFind(new HibernateCallback(){
     40             public List doInHibernate(Session session) throws HibernateException, SQLException {
     41                 
     42                 StringBuffer countQuery = new StringBuffer("select count(*) ");
     43                 countQuery.append(hql);
     44                 Query query = session.createQuery(countQuery.toString());
     45                 String params[] = query.getNamedParameters();
     46                 for(int i=0;i<params.length;i++){
     47                     query.setParameter(params[i], mparams.get(params[i]));
     48                 }
     49                 List result = query.list();
     50                 return result;
     51             }
     52         });
     53         
     54         Object obj = tempList!=null&&tempList.size()>0?tempList.get(0):0;
     55         if (obj instanceof Long) {
     56             Integer count =    Integer.valueOf(String.valueOf(obj));
     57             return count;
     58         }else{
     59             Integer count = Integer.valueOf(String.valueOf(obj));
     60             return count.intValue();
     61         }
     62     }
     63 
     64     public Integer count(String hql) {
     65         List<Object> result = getHibernateTemplate().find("select count(*) "+hql);
     66         Object obj = result.get(0);
     67         if(obj instanceof Integer){
     68             Integer count =    (Integer)obj;
     69             return count;
     70         }else{
     71             Long count = (Long)obj;
     72             return count.intValue();
     73         }
     74     }
     75 
     76     public int countByCriteria(DetachedCriteria dc) {
     77         
     78         return 0;
     79     }
     80 
     81     public void delete(final T obj) {
     82         getHibernateTemplate().execute(new HibernateCallback(){
     83             public Object doInHibernate(Session session) throws HibernateException, SQLException {
     84                 session.clear();
     85                 session.delete(obj);
     86                 return null;
     87             }
     88 
     89         });
     90     }
     91     
     92     public void deleteByList(final List<T> obj) {
     93         getHibernateTemplate().execute(new HibernateCallback(){
     94             public Object doInHibernate(Session session) throws HibernateException, SQLException {
     95                 session.clear();
     96                 for(T t:obj){
     97                     session.delete(t);
     98                 }
     99                 return null;
    100             }
    101             
    102         });
    103     }
    104 
    105     public int deleteAll(final String tableName) {
    106         
    107         StringBuffer hql = new StringBuffer("delete from ");
    108         hql.append(tableName);
    109         return executeUpdate(hql.toString());
    110     }
    111 
    112     public int executeUpdate(final String hql) {
    113         
    114         Object obj = getHibernateTemplate().execute(new HibernateCallback(){
    115             public Object doInHibernate(Session session) throws HibernateException, SQLException {
    116                 
    117                 Query query = session.createQuery(hql);
    118                 int result = 0 ; 
    119                 result = query.executeUpdate();
    120                 getHibernateTemplate().flush();
    121                 return result;
    122             }
    123         });
    124         if(obj!=null)
    125             return ((Integer)obj).intValue();
    126         else
    127             return 0;
    128     }
    129 
    130     public int executeUpdate(final String hql,final Map pMap) {
    131         
    132         Object obj = getHibernateTemplate().execute(new HibernateCallback(){
    133             public Object doInHibernate(Session session) throws HibernateException, SQLException {
    134                 
    135                 Query query = session.createQuery(hql);
    136                 String params[] = query.getNamedParameters();
    137                 for(int i=0;i<params.length;i++){
    138                     query.setParameter(params[i], pMap.get(params[i]));
    139                 }
    140                 int result = 0;
    141                 result = query.executeUpdate();
    142                 getHibernateTemplate().flush();
    143                 return result;
    144             }
    145         });
    146         if(obj!=null)
    147             return ((Integer)obj).intValue();
    148         else
    149             return 0;
    150     }
    151 
    152     public List<T> find(final String hql) {
    153         return getHibernateTemplate().find(hql);
    154     }
    155     
    156     public List<T> findObj(final String hql) {
    157         return getHibernateTemplate().find(hql);
    158     }
    159 
    160     public List<T> find(final String hql, final Map map) {
    161         return getHibernateTemplate().executeFind(new HibernateCallback(){
    162             public List<T> doInHibernate(Session session) throws HibernateException, SQLException {
    163                 
    164                 Query query = session.createQuery(hql);
    165                 String[] pamars = query.getNamedParameters();  
    166                 for(int i=0;i<pamars.length;i++){
    167                     query.setParameter(pamars[i], map.get(pamars[i]));
    168                 }
    169                 List<T> results = new ArrayList();
    170                 results = query.list();
    171                 return results;
    172             }
    173         });
    174     }
    175     
    176     public List findObj(final String hql, final Map map) {
    177         return getHibernateTemplate().executeFind(new HibernateCallback(){
    178             public List<T> doInHibernate(Session session) throws HibernateException, SQLException {
    179                 
    180                 Query query = session.createQuery(hql);
    181                 String[] pamars = query.getNamedParameters();  
    182                 for(int i=0;i<pamars.length;i++){
    183                     query.setParameter(pamars[i], map.get(pamars[i]));
    184                 }
    185                 List<T> results = new ArrayList();
    186                 results = query.list();
    187                 return results;
    188             }
    189         });
    190     }
    191 
    192     public List<T> findAll() throws DataAccessException {
    193         return findByCriteria();
    194     }
    195     
    196     public List<T> findByCriteria(DetachedCriteria dc, int firstResult, int maxResults) {
    197         return null;
    198     }
    199 
    200     public T get(PK id) {
    201         return (T)getHibernateTemplate().get(aclass, id);
    202     }
    203     
    204     public Object getObj(Class cls,PK id) {
    205         return (T)getHibernateTemplate().get(cls, id);
    206     }
    207 
    208     public T load(PK id) throws DataAccessException {
    209         
    210         return (T)getHibernateTemplate().load(aclass, id);
    211     }
    212 
    213     public void save(T obj) {//1
    214         
    215         this.getHibernateTemplate().save(obj);
    216     }
    217     
    218     public void saveByObj(T obj) {
    219         
    220         this.getHibernateTemplate().save(obj);
    221     }
    222 
    223     public void save(List<T> ls) {
    224         
    225         this.getHibernateTemplate().saveOrUpdateAll(ls);
    226         getHibernateTemplate().flush();
    227     }
    228 
    229     public void saveOrUpdateMerge(T obj)
    230     {
    231         obj=(T)this.getHibernateTemplate().merge(obj);
    232         this.getHibernateTemplate().saveOrUpdate(obj);
    233         getHibernateTemplate().flush();
    234         getHibernateTemplate().clear();
    235     }
    236     
    237     public void saveOrUpdate(T obj) {
    238         this.getHibernateTemplate().saveOrUpdate(obj);
    239         getHibernateTemplate().flush();
    240     }
    241     
    242     public void saveOrUpdateClear(T obj) {
    243         this.getHibernateTemplate().saveOrUpdate(obj);
    244         getHibernateTemplate().flush();
    245         getHibernateTemplate().clear();
    246     }
    247     public void saveOrUpdate(List<T> lsj) {
    248         this.getHibernateTemplate().saveOrUpdateAll(lsj);
    249         getHibernateTemplate().flush();
    250     }
    251 
    252     public void update(T obj) {
    253         this.getHibernateTemplate().update(obj);
    254         getHibernateTemplate().flush();
    255     }
    256     
    257     public HibernateTemplate getHibTemplate(){
    258         return this.getHibernateTemplate();
    259     }
    260 
    261     public int delete(String hql, Map map) {
    262         return executeUpdate(hql, map);
    263     }
    264 
    265     public int update(String hql, Map map) {
    266         return executeUpdate(hql, map);
    267     }
    268 
    269     public int update(String hql) {
    270         return executeUpdate(hql);
    271     }
    272 
    273     public int delete(String hql) {
    274         return executeUpdate(hql);
    275     }
    276     
    277     public List<T> find(final String hql,final int pageNo,final int maxResults) {
    278         return getHibernateTemplate().executeFind(new HibernateCallback(){
    279             public List<T> doInHibernate(Session session) throws HibernateException, SQLException {
    280                 
    281                 Query query = session.createQuery(hql);
    282                 if(maxResults>0)
    283                     query.setFirstResult((pageNo-1)*maxResults).setMaxResults(maxResults);
    284                 List<T> results = query.list();
    285                 return results;
    286             }
    287         });
    288     }
    289     
    290     public List<T> find(final String hql,final Map map,final int pageNo,final int maxResults) {
    291         return getHibernateTemplate().executeFind(new HibernateCallback(){
    292             public List<T> doInHibernate(Session session) throws HibernateException, SQLException {
    293                 
    294                 Query query = session.createQuery(hql);
    295                 String[] pamars = query.getNamedParameters();  
    296                 for(int i=0;i<pamars.length;i++){
    297                     query.setParameter(pamars[i], map.get(pamars[i]));
    298                 }
    299                 if(maxResults>0)
    300                     query.setFirstResult((pageNo-1)*maxResults).setMaxResults(maxResults);
    301                 List<T> results = new ArrayList();
    302                 results = query.list();
    303                 return results;
    304             }
    305         });
    306     }
    307     
    308     public List findObj(final String hql,final Map map,final int pageNo,final int maxResults) {
    309         
    310         return getHibernateTemplate().executeFind(new HibernateCallback(){
    311             public List<T> doInHibernate(Session session) throws HibernateException, SQLException {
    312                 
    313                 Query query = session.createQuery(hql);
    314                 String[] pamars = query.getNamedParameters();  
    315                 for(int i=0;i<pamars.length;i++){
    316                     query.setParameter(pamars[i], map.get(pamars[i]));
    317                 }
    318                 if(maxResults>0)
    319                     query.setFirstResult((pageNo-1)*maxResults).setMaxResults(maxResults);
    320                 List<T> results = new ArrayList();
    321                 results = query.list();
    322                 return results;
    323             }
    324         });
    325     }
    326 
    327     public void deleteById(final PK id) {
    328         getHibernateTemplate().execute(new HibernateCallback(){
    329             public Object doInHibernate(Session session) throws HibernateException, SQLException {
    330                 session.delete(session.get(aclass, id));
    331                 return null;
    332             }
    333 
    334         });
    335     }
    336     
    337     public List<T> findByCriteria(final int firstResult, final int maxResults, final Criterion... criterion) throws DataAccessException{
    338         return findByCriteria(firstResult, maxResults, null, false, criterion);
    339     }
    340     
    341     public List<T> findByCriteria(final int firstResult, final int maxResults, final String sortProperty, final boolean ascend, final Criterion... criterion){
    342         return getHibernateTemplate().executeFind(new HibernateCallback(){
    343             public List<T> doInHibernate(Session session) throws HibernateException, SQLException {
    344                 Criteria crit = session.createCriteria(aclass);
    345                 if(criterion != null){
    346                     for(Criterion c : criterion){
    347                         crit.add(c);
    348                     }
    349                 }
    350                 if(firstResult > 0)
    351                     crit.setFirstResult(firstResult);
    352                 if(maxResults > 0)
    353                     crit.setMaxResults(maxResults);
    354                 if(sortProperty != null && sortProperty.trim().length() > 0){
    355                     crit.addOrder(ascend ? Order.asc(sortProperty) : Order.desc(sortProperty));
    356                 }
    357                 return crit.list();
    358             }
    359 
    360         });
    361     }
    362     
    363     public List<T> findByCriteria(final Criterion...criterion) throws DataAccessException {
    364         return findByCriteria(-1, -1, criterion);
    365     }
    366     
    367     public Criteria getCriteria(){
    368         return this.getSession().createCriteria(aclass);
    369     }
    370     
    371     public int countByCriteria(final Criterion... criterion) throws DataAccessException{
    372         Object obj = getHibernateTemplate().execute(new HibernateCallback(){
    373             public Integer doInHibernate(Session session) throws HibernateException, SQLException {
    374                 Criteria crit = session.createCriteria(aclass);
    375                 for(Criterion c : criterion){
    376                     crit.add(c);
    377                 }
    378                 crit.setProjection(Projections.rowCount());
    379                 Integer total = (Integer)crit.uniqueResult();
    380                 return total;
    381             }
    382 
    383         });
    384         if(obj!=null)
    385             return (Integer)obj;
    386         return 0;
    387     }
    388     
    389      public T mergeObj(T obj){
    390          return (T)this.getSession().merge(obj);
    391      }
    392 }
  • 相关阅读:
    乱···
    分析不足,明确目标
    与寂寞有染,与爱情无关
    桃花运?桃花劫?
    诺基亚N91——4G硬盘+200万像素!!!
    【转载】我们什么时候结婚
    纪念新生命诞生
    【转载】为一套房子你要奋斗多少年
    【转载】一定要讲给你爱的人听的20个小故事
    快乐不快乐
  • 原文地址:https://www.cnblogs.com/jimorulang/p/5554409.html
Copyright © 2020-2023  润新知