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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)