|
@ -0,0 +1,186 @@
|
|
|
package com.yihu.iot.util.excel.hibernate;
|
|
|
|
|
|
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);
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|