import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.SqlSession;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.SqlSessionUtils;
import org.springframework.stereotype.Component;
/**
* DBUtils Mybatis Plus 执行原生sql 工具类
*
* @author ZhangLin
*/
@Component
@Slf4j
public class DbUtils {
private static final String PREFIX_LOG = "【自定义DB工具】执行查询sql: {}";
@Resource
private SqlSessionTemplate sqlSessionTemplate;
/**
* 查询
*
* @param sql 查询语句
* @return 查询结果
*/
public List<Map<String, Object>> excuteQuerySql(String sql) {
log.info(PREFIX_LOG, sql);
List<Map<String, Object>> list = new ArrayList<>();
PreparedStatement pst = null;
SqlSession session = getSqlSession();
ResultSet result;
try {
pst = session.getConnection().prepareStatement(sql);
result = pst.executeQuery();
//获得结果集结构信息,元数据
ResultSetMetaData md = result.getMetaData();
//获得列数
int columnCount = md.getColumnCount();
while (result.next()) {
Map<String, Object> rowData = new HashMap<>();
for (int i = 1; i <= columnCount; i++) {
rowData.put(md.getColumnName(i), result.getObject(i));
}
list.add(rowData);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (pst != null) {
try {
pst.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
closeSqlSession(session);
}
return list;
}
/**
* 更新/删除 操作
*
* @param sql 原生sql
* @return 影响行数
*/
public int excuteSql(String sql) {
log.info(PREFIX_LOG, sql);
PreparedStatement pst = null;
SqlSession session = getSqlSession();
int row = 0;
try {
pst = session.getConnection().prepareStatement(sql);
row = pst.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (pst != null) {
try {
pst.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
closeSqlSession(session);
}
return row;
}
/**
* 获取sqlSession
*
* @return SqlSession
*/
public SqlSession getSqlSession() {
return SqlSessionUtils.getSqlSession(sqlSessionTemplate.getSqlSessionFactory(),
sqlSessionTemplate.getExecutorType(), sqlSessionTemplate.getPersistenceExceptionTranslator());
}
/**
* 关闭sqlSession
*
* @param session session
*/
public void closeSqlSession(SqlSession session) {
SqlSessionUtils.closeSqlSession(session, sqlSessionTemplate.getSqlSessionFactory());
}
}
Mybatis Plus 执行原生sql
最新推荐文章于 2025-07-05 08:43:49 发布