Hibernate使用
实现类:
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使用的更多相关文章
- hibernate多对多关联映射
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- 解决 Springboot Unable to build Hibernate SessionFactory @Column命名不起作用
问题: Springboot启动报错: Caused by: org.springframework.beans.factory.BeanCreationException: Error creati ...
- hibernate多对一双向关联
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- Hibernate中事务的隔离级别设置
Hibernate中事务的隔离级别,如下方法分别为1/2/4/8. 在Hibernate配置文件中设置,设置代码如下
- Hibernate中事务声明
Hibernate中JDBC事务声明,在Hibernate配置文件中加入如下代码,不做声明Hibernate默认就是JDBC事务. 一个JDBC 不能跨越多个数据库. Hibernate中JTA事务声 ...
- spring applicationContext.xml和hibernate.cfg.xml设置
applicationContext.xml配置 <?xml version="1.0" encoding="UTF-8"?> <beans ...
- [原创]关于Hibernate中的级联操作以及懒加载
Hibernate: 级联操作 一.简单的介绍 cascade和inverse (Employee – Department) Casade用来说明当对主对象进行某种操作时是否对其关联的从对象也作类似 ...
- hibernate的基本xml文件配置
需要导入基本的包hibernate下的bin下的required和同bin下optional里的c3p0包下的所有jar文件,当然要导入mysql的驱动包了.下面需要注意的是hibernate的版本就 ...
- Maven搭建SpringMVC+Hibernate项目详解 【转】
前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这 ...
- 1.Hibernate简介
1.框架简介: 定义:基于java语言开发的一套ORM框架: 优点:a.方便开发; b.大大减少代码量; c.性能稍高(不能与数据库高手相比,较一般数据库使用者 ...
随机推荐
- jquery div 下拉框焦点事件
这章与上一张<jquery input 下拉框(模拟select控件)焦点事件>类似 这章讲述div的焦点事件如何使用 div的焦点事件与input的焦点事件区别在于 需要多添加一个属性: ...
- win32程序通过LPCREATESTRUCT中的lpCreateParams传递参数给窗口过程函数
win32窗口程序中如果需要给窗口过程函数传递自定义参数,可以通过LPCREATESTRUCT结构体中的lpCreateParams进行传递. 创建窗口实例函数: m_hWnd = CreateWin ...
- shiro中的filterChainDefinitions
anno:对所有请求放行 logout:立刻退出当前登录用户,并重定向到指定redirectUrl,如果没有指定redirectUrl,貌似是默认重定向到登录页面. authc:当访问需要通过权限验证 ...
- linux下安装安装pcre-8.32
linux下安装安装pcre-8.32 ./configure --prefix=/usr/local/pcre 出现以下错误 configure: error: You need a C++ com ...
- IDEA使用maven中tomcat插件启动项目乱码问题
今天用IDEA来启动项目,使用的是maven中的tomcat7插件,正常启动后,再页面操作新增或修改数据时,发生了诡异的事, 中文保存后全部乱码...顿时不淡定了,接着就开始排查原因 首先检查IDEA ...
- 解决魅族MX5卸载debug-app不干净,导致安装、升级不成功的问题
环境:魅族MX5,Android 5.1 问题:开发app使用真机调试后,在桌面上拖动图标卸载app-debug.apk,然后安装签名版本的app-release.apk提示替换xxx版本,按确定后提 ...
- cookie 和session 的区别:
1.cookie数据存放在客户的浏览器上,session数据放在服务器上.2.cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗 考虑到安全应当使用session.3. ...
- 服务端性能测试工具校验v1.0
性能测试工具对服务端进行并发测试时,如果工具本身问题或异常就会造成真实并发与实际并发有差距,要测试10000/S并发的性能结果实际到达服务端的并发达不到95%,这样的测试无效. 所以给大家共享,我做的 ...
- SVN代码回滚命令之---"svn up ./ -r 版本号"---OK
一.改动还没被提交的情况(未commit) 这种情况下,见有的人的做法是删除work copy中文件,然后重新update,恩,这种做法达到了目的,但不优雅,因为这种事没必要麻烦服务端. 其实一个命令 ...
- 使用 Linq 对多个对象进行join操作 C#
class A { public int id { get; set; } public string name { get; set; } } class B { public int id { g ...