|  | @ -0,0 +1,186 @@
 | 
	
		
			
				|  |  | package com.yihu.jw.hospital.utils;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import com.yihu.jw.entity.hospital.prescription.HlwCf01DO;
 | 
	
		
			
				|  |  | import org.hibernate.SQLQuery;
 | 
	
		
			
				|  |  | import org.hibernate.Session;
 | 
	
		
			
				|  |  | import org.hibernate.transform.Transformers;
 | 
	
		
			
				|  |  | import org.springframework.stereotype.Component;
 | 
	
		
			
				|  |  | import org.springframework.transaction.annotation.Transactional;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | import javax.persistence.EntityManager;
 | 
	
		
			
				|  |  | import javax.persistence.PersistenceContext;
 | 
	
		
			
				|  |  | import java.math.BigDecimal;
 | 
	
		
			
				|  |  | import java.math.BigInteger;
 | 
	
		
			
				|  |  | import java.util.Collection;
 | 
	
		
			
				|  |  | import java.util.List;
 | 
	
		
			
				|  |  | import java.util.Map;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | /**
 | 
	
		
			
				|  |  |  * 数据库查询工具,mysql与Oracle 通用复诊查询
 | 
	
		
			
				|  |  |  * 支持原生SQL。联表,动态传参。分页查询
 | 
	
		
			
				|  |  |  * 不支持数据库特有的函数
 | 
	
		
			
				|  |  |  * <p>
 | 
	
		
			
				|  |  |  * Created by Trick on 2019/12/10.
 | 
	
		
			
				|  |  |  */
 | 
	
		
			
				|  |  | @Component
 | 
	
		
			
				|  |  | @Transactional
 | 
	
		
			
				|  |  | public class HibenateUtils {
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * JPA 数据源
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     @PersistenceContext
 | 
	
		
			
				|  |  |     private EntityManager entityManager;
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 创建SQL查询,根据配置,获取数据库方言
 | 
	
		
			
				|  |  |      * sql为原生sql语句,查询,Oracle不区分大小写,返回值需要驼峰命名,字段别名需要加 双引号
 | 
	
		
			
				|  |  |      * 目前只支持通用的聚合函数,特有的聚合函数不支持
 | 
	
		
			
				|  |  |      *
 | 
	
		
			
				|  |  |      * @param sql
 | 
	
		
			
				|  |  |      * @param page 第几页,1开始
 | 
	
		
			
				|  |  |      * @param size 每页记录数
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public List<Map<String, Object>> createSQLQuery(String sql, Integer page, Integer size) {
 | 
	
		
			
				|  |  |         Session session = (Session) entityManager.getDelegate();
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         SQLQuery query = session.createSQLQuery(sql);
 | 
	
		
			
				|  |  |         query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
 | 
	
		
			
				|  |  |         if(page!=null&&size!=null){
 | 
	
		
			
				|  |  |             query.setFirstResult((page - 1) * size);
 | 
	
		
			
				|  |  |             query.setMaxResults(size);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         List<Map<String, Object>> list = query.list();
 | 
	
		
			
				|  |  |         return list;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 创建SQL查询,根据配置,获取数据库方言
 | 
	
		
			
				|  |  |      * sql为原生sql语句,查询,Oracle不区分大小写,返回值需要驼峰命名,字段别名需要加 双引号
 | 
	
		
			
				|  |  |      * 目前只支持通用的聚合函数,特有的聚合函数不支持
 | 
	
		
			
				|  |  |      * 无分页
 | 
	
		
			
				|  |  |      * @param sql
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public List<Map<String, Object>> createSQLQuery(String sql) {
 | 
	
		
			
				|  |  |         Session session = (Session) entityManager.getDelegate();
 | 
	
		
			
				|  |  |         SQLQuery query = session.createSQLQuery(sql);
 | 
	
		
			
				|  |  |         query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
 | 
	
		
			
				|  |  |         List<Map<String, Object>> list = query.list();
 | 
	
		
			
				|  |  |         return list;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 创建SQL查询,根据配置,获取数据库方言
 | 
	
		
			
				|  |  |      * sql为原生sql语句,查询,Oracle不区分大小写,返回值需要驼峰命名,字段别名需要加 双引号
 | 
	
		
			
				|  |  |      * 目前只支持通用的聚合函数,特有的聚合函数不支持
 | 
	
		
			
				|  |  |      * @param sql
 | 
	
		
			
				|  |  |      * @param params 动态占位符入参,例如 like:name
 | 
	
		
			
				|  |  |      * @param page 第几页,1开始
 | 
	
		
			
				|  |  |      * @param size 每页记录数
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public List<Map<String, Object>> createSQLQuery(String sql, Map<String, Object> params, Integer page, Integer size) {
 | 
	
		
			
				|  |  |         Session session = (Session) entityManager.getDelegate();
 | 
	
		
			
				|  |  |         SQLQuery query = session.createSQLQuery(sql);
 | 
	
		
			
				|  |  |         query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         //设置查询参数
 | 
	
		
			
				|  |  |         setSqlQueryByMap(query, params);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         if(page!=null&&size!=null){
 | 
	
		
			
				|  |  |             query.setFirstResult((page - 1) * size);
 | 
	
		
			
				|  |  |             query.setMaxResults(size);
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         List<Map<String, Object>> list = query.list();
 | 
	
		
			
				|  |  |         return list;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 创建SQL查询,根据配置,获取数据库方言
 | 
	
		
			
				|  |  |      * sql为原生sql语句,查询,Oracle不区分大小写,返回值需要驼峰命名,字段别名需要加 双引号
 | 
	
		
			
				|  |  |      * 目前只支持通用的聚合函数,特有的聚合函数不支持
 | 
	
		
			
				|  |  |      * @param sql
 | 
	
		
			
				|  |  |      * @param params 动态占位符入参,例如 like:name
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public List<Map<String, Object>> createSQLQuery(String sql, Map<String, Object> params) {
 | 
	
		
			
				|  |  |         Session session = (Session) entityManager.getDelegate();
 | 
	
		
			
				|  |  |         SQLQuery query = session.createSQLQuery(sql);
 | 
	
		
			
				|  |  |         query.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         //设置查询参数
 | 
	
		
			
				|  |  |         setSqlQueryByMap(query, params);
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |         List<Map<String, Object>> list = query.list();
 | 
	
		
			
				|  |  |         return list;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 设置查询参数
 | 
	
		
			
				|  |  |      * @param sqlQuery
 | 
	
		
			
				|  |  |      * @param params
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     private SQLQuery setSqlQueryByMap(SQLQuery sqlQuery, Map<String, Object> params) {
 | 
	
		
			
				|  |  |         if (params != null && !params.isEmpty()) {
 | 
	
		
			
				|  |  |             for (String key : params.keySet()) {
 | 
	
		
			
				|  |  |                 Object obj = params.get(key);
 | 
	
		
			
				|  |  |                 if (obj instanceof Collection<?>) {
 | 
	
		
			
				|  |  |                     sqlQuery.setParameterList(key, (Collection<?>) obj);
 | 
	
		
			
				|  |  |                 } else if (obj instanceof Object[]) {
 | 
	
		
			
				|  |  |                     sqlQuery.setParameterList(key, (Object[]) obj);
 | 
	
		
			
				|  |  |                 } else {
 | 
	
		
			
				|  |  |                     sqlQuery.setParameter(key, obj);
 | 
	
		
			
				|  |  |                 }
 | 
	
		
			
				|  |  |             }
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |         return sqlQuery;
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 聚合函数类型装换
 | 
	
		
			
				|  |  |      * @param obj
 | 
	
		
			
				|  |  |      * @return
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public Long objTransformLong(Object obj){
 | 
	
		
			
				|  |  |         //Oracle count(1) 聚合函数类型装换
 | 
	
		
			
				|  |  |         if(obj instanceof BigDecimal){
 | 
	
		
			
				|  |  |             return ((BigDecimal) obj).longValue();
 | 
	
		
			
				|  |  |         //Mysql count(1) 聚合函数类型装换
 | 
	
		
			
				|  |  |         }else if(obj instanceof BigInteger){
 | 
	
		
			
				|  |  |             return ((BigInteger)obj).longValue();
 | 
	
		
			
				|  |  |         }else{
 | 
	
		
			
				|  |  |             return 0L;
 | 
	
		
			
				|  |  |         }
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public void updateBySql(String sql){
 | 
	
		
			
				|  |  |         Session session = (Session) entityManager.getDelegate();
 | 
	
		
			
				|  |  |         session.createSQLQuery(sql).executeUpdate();
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public void save(Object object) {
 | 
	
		
			
				|  |  |         entityManager.persist(object);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     /**
 | 
	
		
			
				|  |  |      * 更新
 | 
	
		
			
				|  |  |      * @param entity
 | 
	
		
			
				|  |  |      */
 | 
	
		
			
				|  |  |     public void update(Object entity){
 | 
	
		
			
				|  |  |         entityManager.merge(entity);
 | 
	
		
			
				|  |  |         entityManager.flush();
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  |     public void update(String id,Integer status){
 | 
	
		
			
				|  |  |         HlwCf01DO hlwCf01DO = entityManager.find(HlwCf01DO.class,id);
 | 
	
		
			
				|  |  |         hlwCf01DO.setFKZT(status);
 | 
	
		
			
				|  |  |         update(hlwCf01DO);
 | 
	
		
			
				|  |  |     }
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | 
 | 
	
		
			
				|  |  | }
 |