Files
ai-security-xdr/haobang-security-xdr/syslog-consumer/src/main/java/com/common/util/MyBatisUtil.java
2026-01-11 15:33:22 +08:00

89 lines
2.6 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package com.common.util;
import org.springframework.beans.factory.annotation.Autowired;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.InputStream;
import java.util.function.Function;
import org.springframework.stereotype.Component;
/**
* MyBatis 工具类
*/
@Component
public class MyBatisUtil {
private static final Logger logger = LoggerFactory.getLogger(MyBatisUtil.class);
private static SqlSessionFactory sqlSessionFactory;
@Autowired
private SqlSessionFactory autoWiredSqlSessionFactory;
static {
init();
}
private static void init() {
try {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
logger.info("MyBatis 初始化成功");
} catch (IOException e) {
logger.error("初始化MyBatis失败", e);
throw new RuntimeException("初始化MyBatis失败", e);
}
}
public static SqlSession getSqlSession() {
return sqlSessionFactory.openSession();
}
public static SqlSessionFactory getSqlSessionFactory() {
return sqlSessionFactory;
}
/**
* 获取 SqlSession自动提交事务
*/
public static SqlSession getSqlSessionAutoCommit() {
return sqlSessionFactory.openSession(true);
}
/**
* 执行查询操作(自动管理资源)
*/
public static <T> T executeQuery(Function<SqlSession, T> function) {
SqlSession sqlSession = getSqlSession();
try {
return function.apply(sqlSession);
} finally {
sqlSession.close();
}
}
/**
* 执行更新操作(自动提交事务和管理资源)
*/
public static <T> T executeUpdate(Function<SqlSession, T> function) {
SqlSession sqlSession = getSqlSession();
try {
T result = function.apply(sqlSession);
sqlSession.commit();
return result;
} catch (Exception e) {
sqlSession.rollback();
throw new RuntimeException("数据库操作失败", e);
} finally {
sqlSession.close();
}
}
/**
* 重新初始化(用于配置热更新)
*/
public static void reload() {
init();
}
}