目 录CONTENT

文章目录

Hibernate工具类常用方法

BKUN
2023-11-03 / 0 评论 / 0 点赞 / 891 阅读 / 423 字
public class HibernateUtils {

    private static Logger logger = LoggerFactory.getLogger(HibernateUtils.class);

	/**
    * 提交二级缓存
    */
    public static void commitLocalCache(){
        EntityManager entityManager = SpringBeanUtils.getBean(EntityManager.class);
        entityManager.flush();
        entityManager.clear();
    }
    
        /**
     * 对象准换为游离状态
     * @param entity
     */
    public static void evict(Object entity){
        EntityManager entityManager = SpringBeanUtils.getBean(EntityManager.class);
        if (entityManager.contains(entity)) {
            // 获取session
            Session session = entityManager.unwrap(org.hibernate.Session.class);
            // 转换成游离态
            session.evict(entity);
        }
    }
    
        /**
     * 获取一笔数据
     * 或Query存在多笔或不存在数据,返回空
     * 若只存在一笔,返回这一笔数据
     * @param sql
     * @return
     */
    public static String getOneStringValue(String sql){
        EntityManager entityManager = SpringBeanUtils.getBean(EntityManager.class);
        Query query = entityManager.createNativeQuery(sql);
        logger.info("Execute SQL:" + sql);
        List resultList = query.getResultList();
        if(resultList.size() == 1 && resultList.get(0) != null){
            return String.valueOf(resultList.get(0));
        }
        return null;
    }
    
    /**
     * 返回任意实体
     * @param sql
     * @param clz
     * @param <T>
     * @return
     */
    public static <T> List<T> queryList(String sql, Class<T> clz){
        EntityManager entityManager = SpringBeanUtils.getBean(EntityManager.class);
        Query query = entityManager.createNativeQuery(sql);
        NativeQueryImplementor nativeQueryImplementor = query.unwrap(NativeQueryImpl.class).setResultTransformer(Transformers.aliasToBean(clz));
        logger.info("Execute SQL:" + sql);
        return (List<T>)nativeQueryImplementor.getResultList();
    }

    /**
     * 返回任意实体(带参数)
     * DEMO: Query query =session.createQuery(" from Customer as c where c.name =:customerName");
     *        query.setString("customerName",name);
     * @param sql SQL
     * @param clz 返回实体类
     * @params 参数(参数名字,值)
     * @param <T>
     * @return
     */
    public static <T> List<T> queryList(String sql, Map<String,String> params ,Class<T> clz){
        EntityManager entityManager = SpringBeanUtils.getBean(EntityManager.class);
        Query query = entityManager.createNativeQuery(sql,clz);
        for (Map.Entry<String, String> entry : params.entrySet()) {
            String mapKey = entry.getKey();
            Object mapValue = entry.getValue();
            query.setParameter(mapKey, mapValue);
        }
        List<T> list = query.getResultList();
        logger.info("Execute SQL:" + sql);
        logger.info("Execute SQL Params:" + params.toString());
        return list;
    }
    
        public static boolean executeSQL(String sql) throws SQLException {
        // 获取Spring容器管理的DataSource容器,看系统具体依赖调整
        HikariDataSource hikariDataSource = SpringBeanUtils.getBean(HikariDataSource.class);
        Connection connection = hikariDataSource.getConnection();
        Statement statement = connection.createStatement();
        boolean bl = statement.execute(sql);
        statement.close();
        connection.close();
        return bl;
    }

}
0

评论区