SpringBoot:如何读取 .sql文件的内容并执行

摘要:

在复杂查询、统计等应用场景,直接写 sql 并执行是一种高效的方法。此文记录工作中解决的将查询统计sql直接写在文件中,代码中读取相应的文件即可获得要执行的 sql

要点:.sql 文件要放到 Resource 目录下,读取时路径要正确

一种正确的方式 和关键代码

这里提供的是一种尝试过的正确的方式,可能不是唯一的方式。
数据库读取方面使用的是JDBCTemplate

数据源配置

读取对应数据源

JDBCTemplate 的简单封装,查询结果转 JSONArray 或 JSONObject

点击查看代码
/**
* 查询
*
* @return JSONArray json数组
*/
@Override
public JSONArray getJSONArray(String sql, Object[] params) {
return getJSONArray(sql, params, false);
}
private JSONArray getJSONArray(String sql, Object[] params, final boolean toUpper) {
return jdbcTemplate.query(sql, params, new ResultSetExtractor<JSONArray>() {
@Override
public JSONArray extractData(ResultSet resultSet) throws SQLException, DataAccessException {
ResultSetMetaData rsd = resultSet.getMetaData();
int clength = rsd.getColumnCount();
JSONArray jsonArray = new JSONArray();
String columnName;
try {
while (resultSet.next()) {
JSONObject jo = new JSONObject();
for (int i = 0; i < clength; i++) {
columnName = rsd.getColumnLabel(i + 1);
columnName = toUpper ? columnName.toUpperCase() : columnName.toLowerCase();
jo.put(columnName, resultSet.getObject(i + 1));
}
jsonArray.add(jo);
}
} catch (Exception e) {
}
return jsonArray;
}
});
}
public JSONObject getJSONObject(String sql) {
return getJSONObject(sql, new Object[]{});
}
/**
* 说明:查询,返回的是Json对象
*
* @return JSONObject
*/
@Override
public JSONObject getJSONObject(String sql, Object[] params) {
return getJSONObject(sql, params, false);
}
private JSONObject getJSONObject(String sql, Object[] params, final boolean toUpper) {
return jdbcTemplate.query(sql, params, new ResultSetExtractor<JSONObject>() {
@Override
public JSONObject extractData(ResultSet resultSet) throws SQLException, DataAccessException {
ResultSetMetaData rsd = resultSet.getMetaData();
int clength = rsd.getColumnCount();
String columnName;
try {
if (resultSet.next()) {
JSONObject jo = new JSONObject();
for (int i = 0; i < clength; i++) {
columnName = rsd.getColumnLabel(i + 1);
columnName = toUpper ? columnName.toUpperCase() : columnName.toLowerCase();
jo.put(columnName, resultSet.getObject(i + 1));
}
return jo;
}
} catch (Exception e) {
}
return null;
}
});
}

具体使用

Service

BaseService,提供读 sql 文件的功能,供应用层 service 扩展

一个应用层 Service 的例子

.sql 文件位置

Controller层对应例子

参考资料:

springboot 如何读取 .sql文件的内容并执行
https://blog.csdn.net/qq_35387940/article/details/109719468
https://blog.csdn.net/hzbooks/article/details/121347339

posted @   山顶听风  阅读(1112)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示