实现类:

public class InfoDAOImpl extends BaseDao<Info>

1、List<Object[]> midlist=super.createSqlQuery(sqlStr, null);//根据SQL返回记录,每条记录对应对象数组

2、Map map = new HashMap<>();//map和InfoDTO中属性相同

String querySQL="SELECT b.contract_no from ……";

map.put("contract_no", StringType.INSTANCE);

List<Object> param = new ArrayList<Object>();
   List<InfoDTO> list = super.createSqlQuery(querySQL, param, map, InfoForDTO.class);

均给予BaseDao

package com.common.dao;

import java.lang.reflect.ParameterizedType; import java.math.BigDecimal; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set;

import org.apache.log4j.Logger; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.SQLQuery; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.criterion.CriteriaSpecification; import org.hibernate.transform.Transformers; import org.hibernate.type.Type; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.orm.hibernate4.HibernateCallback; import org.springframework.orm.hibernate4.support.HibernateDaoSupport; import org.springframework.stereotype.Component; import org.springframework.util.Assert;

import com.common.generic.page.PageResult;

@Component @SuppressWarnings("all") public class BaseDao<T> extends HibernateDaoSupport {    private static Integer BATCH_SIZE = 500;    private static Logger logger = Logger.getLogger(BaseDao.class);    private Class<T> clazz;

public BaseDao() {   ParameterizedType pt = (ParameterizedType) this.getClass()     .getGenericSuperclass();   clazz = (Class<T>) pt.getActualTypeArguments()[0];  }

@Autowired  public void setSuperSessionFactory(SessionFactory sessionFactory){   super.setSessionFactory(sessionFactory);  };    public SessionFactory getCurrentSessionFactory(){   return super.getSessionFactory();  };    public void clear() throws Exception{   getCurrentSessionFactory().getCurrentSession().clear();  }    public void merge(T entity) throws Exception{   getHibernateTemplate().merge(entity);  }   // public Session getSession(){ //  return getCurrentSessionFactory().openSession(); // }

public void save(T entity) throws Exception{   getHibernateTemplate().save(entity);  }

public void update(T entity) throws Exception{   getHibernateTemplate().update(entity);  }

public void delete(T entity) throws Exception {   getHibernateTemplate().delete(entity);  }    public void delete(Long id) throws Exception{   T t = (T)this.getHibernateTemplate().get(clazz, id);   getHibernateTemplate().delete(t);  }    public void delete(String id) throws Exception{   T t = (T)this.getHibernateTemplate().get(clazz, id);   getHibernateTemplate().delete(t);  }    @SuppressWarnings("rawtypes")  public List<T> findAll() throws Exception{   List list = getHibernateTemplate().find(     "from " + clazz.getName());   return list;  }    @SuppressWarnings("rawtypes")  public List findAll(final String hql,final List<Object> value) throws Exception{   List list = getHibernateTemplate().execute(new HibernateCallback<List>() {

public List doInHibernate(Session session)      throws HibernateException {     Query query = session.createQuery(hql);     if(value != null){      for (int i = 0; i < value.size(); i++) {       query.setParameter(i, value.get(i));      }     }     return query.list();    }   });   return list;  }    public T findById(Long id) throws Exception{   return (T) getHibernateTemplate().get(clazz, id);  }

public T findById(String id) throws Exception{   return (T) getHibernateTemplate().get(clazz, id);  }    public Integer deleteByIdList(final Long[] idList) throws Exception{   final String hql = "delete from " + clazz.getName() + " where id in (:idList)";   int result = getHibernateTemplate().execute(new HibernateCallback<Integer>() {    public Integer doInHibernate(Session session) {     Query query = session.createQuery(hql)         .setParameterList("idList", idList);     return query.executeUpdate();    }   });   return result;  }    @SuppressWarnings("rawtypes")  public List<T> findByPage(final Integer beginIndex,final Integer pageSize) throws Exception{   List list = getHibernateTemplate().execute(new HibernateCallback<List>() {    public List doInHibernate(Session session){     //此方法查询后返回list结果     List result =session.createQuery("from " + clazz.getName()).setFirstResult(beginIndex)           .setMaxResults(pageSize).list();     return result;    }   });   return list;  }    @SuppressWarnings("rawtypes")  public List findByPage(final String hql,final List<Object> param,final int beginIndex,final int pageSize) throws Exception{   List list = getHibernateTemplate().execute(new HibernateCallback<List>() {    public List doInHibernate(Session session){     Query query = session.createQuery(hql);     if(param!=null){      for(int i =0;i<param.size();i++){       query.setParameter(i, param.get(i));      }     }     List result = query.setFirstResult(beginIndex).setMaxResults(pageSize).list();     return result;    }   });   return list;  }    /**   * 获取唯一结果   * @param hql HQL语句   * @param param HQL参数   * @return  Object对象   * @throws Exception   */  public Object findUniqueResult(final String hql,final List<Object> param) throws Exception{   Object obj =getHibernateTemplate().execute(new HibernateCallback<Object>() {    public Object doInHibernate(Session session){     Query query = session.createQuery(hql);     if(param!=null){      for(int i =0;i<param.size();i++){       query.setParameter(i, param.get(i));      }     }     return query.uniqueResult();    }   });   return obj;  }    /**   * 获取唯一结果   * @param sql  SQL语句   * @param param  SQL参数   * @return   Object对象   * @throws Exception   */  public Object findUniqueResultForSql(final String sql,final List<Object> param) throws Exception{   Object obj =getHibernateTemplate().execute(new HibernateCallback<Object>() {    public Object doInHibernate(Session session){     Query query = session.createSQLQuery(sql);     if(param!=null){      for(int i =0;i<param.size();i++){       query.setParameter(i, param.get(i));      }     }     return query.uniqueResult();    }   });   return obj;  }    /**   * 获取唯一的结果 结果类型为:Integer   * @param hql SQL语句   * @param param SQL参数   * @return  Integer   * @throws Exception   */  public Integer findUniqueNumberResultForSql(final String sql,final List<Object> param) throws Exception{   Object object = findUniqueResultForSql(sql,param);   return Integer.parseInt(object.toString());  }    /**   * 获取唯一的结果 结果类型为:Integer   * @param hql HQL语句   * @param param HQL参数   * @return  Integer   * @throws Exception   */  public Integer findUniqueNumberResult(final String hql,final List<Object> param) throws Exception{   Object object = findUniqueResult(hql,param);   return Integer.parseInt(object.toString());  }    /**   * SQL查询   * @param sql sql语句   * @param param sql参数   * @return  List集合   * @throws Exception   */  public List createSqlQuery(final String sql,final List<Object> param) throws Exception{   List list = getHibernateTemplate().execute(new HibernateCallback<List>() {    public List doInHibernate(Session session){     Query query = session.createSQLQuery(sql);     if(param!=null){      for(int i =0;i<param.size();i++){       query.setParameter(i, param.get(i));      }     }     List result = query.list();     return result;    }   });   return list;  }    /**   * SQL查询 会自动将结果封装成对象   * @param sql   sql   * @param param   参数   * @param scalar  类型   * @param classes  对象   * @return   * @throws Exception   */  public List createSqlQuery(final String sql,final List<Object> param,final Map<String,Type> scalar,final Class<?> classes) throws Exception{   List list = getHibernateTemplate().execute(new HibernateCallback<List>() {    public List doInHibernate(Session session){     SQLQuery query = session.createSQLQuery(sql);     if(param!=null){      for(int i =0;i<param.size();i++){       query.setParameter(i, param.get(i));      }     }     if(scalar != null && scalar.size() > 0){      Set<Map.Entry<String, Type>> scalarSet = scalar.entrySet();      Iterator<Map.Entry<String, Type>> iterator = scalarSet.iterator();      while(iterator.hasNext()){       Entry<String,Type> entry = iterator.next();       String columnName = entry.getKey();       Type type = entry.getValue();       query.addScalar(columnName, type);      }      query.setResultTransformer(Transformers.aliasToBean(classes));     }     List result = query.list();     return result;    }   });   return list;  }    /**   *   * <p>   * Description:SQL查询转化成对象<br />   * </p>   * @author haijun_liu   * @version 0.1 2015年10月23日   * @param sql   * @param param   * @param clas   * @return   * @throws Exception   * List   */  public List createSqlQuery(final String sql,final List<Object> param,final Class clas) throws Exception{   List list = getHibernateTemplate().execute(new HibernateCallback<List>() {    public List doInHibernate(Session session){     Query query = session.createSQLQuery(sql).addEntity(clas);     if(param!=null){      for(int i =0;i<param.size();i++){       query.setParameter(i, param.get(i));      }     }     List result = query.list();     return result;    }   });   return list;  }    /**   * 保存或更新对象   * @param entity 实体对象   */  public void saveOrUpdate(T entity){   getHibernateTemplate().saveOrUpdate(entity);  }    /**   * 批量保存   * @param list  list集合   * @throws Exception   */  public void batchSaveOrUpdate(final List<T> list) throws Exception{   getHibernateTemplate().execute(new HibernateCallback<Object>() {    public Object doInHibernate(Session session)      throws HibernateException {     logger.info(clazz.getCanonicalName() +"类批量添加开始....");     long startTime = System.currentTimeMillis();     if(list!= null && list.size() > 0){      for (int i = 0; i < list.size(); i++) {       T entity =list.get(i);       session.saveOrUpdate(entity);       if(i % BATCH_SIZE==0){        session.flush();        session.clear();       }      }      session.flush();      session.clear();     }     long endTime = System.currentTimeMillis();     logger.info(clazz.getCanonicalName() +"总耗时:"+(startTime-endTime)+"毫秒");     logger.info(clazz.getCanonicalName() +"类批量添加结束....");     return null;    }   });  }    public int executeUpdate(final String sql,final List<Object> param) throws Exception{   Integer count = getHibernateTemplate().execute(new HibernateCallback<Integer>() {    public Integer doInHibernate(Session session)      throws HibernateException {     Query query = session.createSQLQuery(sql);     if(param!=null){      for(int i =0;i<param.size();i++){       query.setParameter(i, param.get(i));      }     }     return query.executeUpdate();    }   });   return count;  }    public int batchExecuteUpdate(final List<String> sqlList,final List<Object[]> param) throws Exception{   Integer count = getHibernateTemplate().execute(new HibernateCallback<Integer>() {    public Integer doInHibernate(Session session)      throws HibernateException {     int updateCount =0;     for (int i = 0; i < sqlList.size(); i++) {      String sql =sqlList.get(i);      Query query = session.createSQLQuery(sql);      if(param!=null){       for(int j =0;j<param.size();j++){        Object[] params = param.get(i);        for (int k = 0; k < params.length; k++) {         query.setParameter(k, params[k]);        }       }      }      updateCount += query.executeUpdate();     }     return updateCount;    }   });   return count;  }    /*   * ------------------------ kun - start -----------------------   */    /**   * hql分页   * @param hql   * @param params 查询参数   * @param startIndex 数据偏移量,如第一页从0条记录形开始   * @param pageSize 每页条数   * @return   * @author Kun   * @date 2016年5月24日 下午4:00:45   */  public PageResult<T> pagedQuery(String hql, List<Object> params, int startIndex, int pageSize) {      // Count查询   String countQueryString = " select count(*) " + hql;   Long totalCount = (Long) createQuery(countQueryString, params).uniqueResult();

if (totalCount < 1)    return new PageResult<T>();      // 实际查询返回分页对象 //  int startIndex = PageResult.getStartOfPage(pageNo, pageSize); // 改为直接从datatabels插件上取值   Query query = createQuery(hql, params);   List<T> list = query.setFirstResult(startIndex).setMaxResults(pageSize)     .list();

return new PageResult<T>(totalCount.intValue(), list, 1, pageSize); // pageCurrent值暂时无用,当前页码由插件记录  }    /**   * sql分页   * @param sal   * @param startIndex 数据偏移量,如第一页从0条记录形开始   * @param pageSize 每页条数   * @param values 不定长查询参数   * @return   * @author Kun   * @date 2016年5月24日 下午4:00:45   */  public PageResult<Map> pageSqlQueryMap(String sql, int startIndex, int pageSize, Object... values) {      // Count查询   String countQueryString = " select count(*) from ("+sql+") t";   BigDecimal totalCount1 = (BigDecimal) createSqlQuerys(countQueryString, values).uniqueResult();   Integer totalCount=Integer.parseInt(totalCount1.toString());      if (totalCount < 1)    return new PageResult<Map>();      // 实际查询返回分页对象   SQLQuery query = createSqlQuerys(sql, values);   query.setResultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP);   List<Map> list = query.setFirstResult(startIndex).setMaxResults(pageSize).list();      return new PageResult<Map>(totalCount, list, 1, pageSize);  }    /**   * 获取session   * @return   * @author Kun   * @date 2016年6月6日 下午2:04:30   */  protected Session getCurrentSession() {   return this.getCurrentSessionFactory().getCurrentSession();  }    /**   * 常规sql查询   * @param sql   * @param values 不定长查询参数   * @return   * @author Kun   * @date 2016年6月6日 下午2:04:53   */  protected SQLQuery createSqlQuerys(String sql, Object... values) {   Assert.hasText(sql);   SQLQuery query = getCurrentSession().createSQLQuery(sql);   //query.setCacheable(true);   for (int i = 0; i < values.length; i++) {    query.setParameter(i, values[i]);   }   return query;  }    /**   * 常规hql查询   * @param hql   * @param params   * @return   * @author Kun   * @date 2016年6月6日 下午2:05:10   */  protected Query createQuery(String hql, List<Object> params) {   Assert.hasText(hql);   Query query = getCurrentSession().createQuery(hql);   query.setCacheable(true);   if(params != null) {    for (int i = 0; i < params.size(); i++) {     query.setParameter(i, params.get(i));    }   }   return query;  }    /*   * ------------------------ kun - end -----------------------   */   }

Hibernate使用的更多相关文章

  1. hibernate多对多关联映射

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

  2. 解决 Springboot Unable to build Hibernate SessionFactory @Column命名不起作用

    问题: Springboot启动报错: Caused by: org.springframework.beans.factory.BeanCreationException: Error creati ...

  3. hibernate多对一双向关联

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

  4. Hibernate中事务的隔离级别设置

    Hibernate中事务的隔离级别,如下方法分别为1/2/4/8. 在Hibernate配置文件中设置,设置代码如下

  5. Hibernate中事务声明

    Hibernate中JDBC事务声明,在Hibernate配置文件中加入如下代码,不做声明Hibernate默认就是JDBC事务. 一个JDBC 不能跨越多个数据库. Hibernate中JTA事务声 ...

  6. spring applicationContext.xml和hibernate.cfg.xml设置

    applicationContext.xml配置 <?xml version="1.0" encoding="UTF-8"?> <beans ...

  7. [原创]关于Hibernate中的级联操作以及懒加载

    Hibernate: 级联操作 一.简单的介绍 cascade和inverse (Employee – Department) Casade用来说明当对主对象进行某种操作时是否对其关联的从对象也作类似 ...

  8. hibernate的基本xml文件配置

    需要导入基本的包hibernate下的bin下的required和同bin下optional里的c3p0包下的所有jar文件,当然要导入mysql的驱动包了.下面需要注意的是hibernate的版本就 ...

  9. Maven搭建SpringMVC+Hibernate项目详解 【转】

    前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这 ...

  10. 1.Hibernate简介

    1.框架简介: 定义:基于java语言开发的一套ORM框架: 优点:a.方便开发;           b.大大减少代码量;           c.性能稍高(不能与数据库高手相比,较一般数据库使用者 ...

随机推荐

  1. HDU 1285 确定比赛排名 (数组实现 )

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285 确定比赛名次 Time Limit: 2000/1000 MS (Java/Others)    ...

  2. Linux指令小结

    1.apt指令集:是ubuntu中最强大的命令行软件管理工具,用于获取.安装.编译.卸载和查询软件包.还可以检查软件包的依赖关系.在ubunt中下载是根据/etc/apt/sources.list这个 ...

  3. Java操作redis简单示例

    第一:安装Redis    首先我们要安装Redis,就像我们操作数据库一样,在操作之前肯定要先创建好数据库的环境.    Redis的下载可以百度一下,或者打开下面的下载链接:    https:/ ...

  4. CE驱动动态加载卸载

    加载: #define DEV_KEY TEXT("Drivers\\Builtin\\WCDMA") BOOL CGPRSCTRLDlg::Load() { //DWORD dw ...

  5. JVM加载类的过程,双亲委派机制中的方法

    JVM加载类的过程: 1)JVM中类的整个生命周期: 加载=>验证=>准备=>解析=>初始化=>使用=>卸载  1.1.加载 类的加载阶段,主要是获取定义此类的二进 ...

  6. 跟我学Windows Azure 一 创建Windows Azure试用账号

    我在网上看了很多教程,很大部分都是申请的是国外或者是香港的试用账号,而国内是由世纪互联所代理的,他的申请方式与VS2013的部署设置或多或少还是有些出入,这里我先跟大家一起过一下,在国内如何申请一个w ...

  7. ie的不同版本测试

    ie的11.0.9600.17728版本支持在开发者工具栏中导航中edge按钮支持测试在不同ie版本下的显示情况如ie7,8,9但不支持ie6

  8. Python爬虫库Scrapy入门1--爬取当当网商品数据

    1.关于scrapy库的介绍,可以查看其官方文档:http://scrapy-chs.readthedocs.io/zh_CN/latest/ 2.安装:pip install scrapy  注意这 ...

  9. 如何对web.config进行加密和解密

    http://blog.csdn.net/jf_jifei/article/details/6527390 在WEB网站开发过程中,如果我们将数据库连接字符串封装到.DLL文件中,将会给数据库和程序的 ...

  10. jquery循环操作

    each遍历 用法一. <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...