Spring Boot中无需创建实体类即可查询现有数据库的方法有哪些
无实体类查询Java应用数据库实现方案
完全可以不绑定实体类映射直接查询数据库,你接触到的JPA、Spring Data JDBC本身是ORM导向的框架,设计上就偏向实体映射场景,换用以下轻量方案即可实现和其他编程语言类似的无实体查询体验:
方案1:
JdbcTemplate(Spring Boot默认内置,无需额外依赖)
直接编写原生SQL,查询结果默认以List<Map<String, Object>>结构返回,key对应数据库字段名,value对应字段值,无需任何实体定义:// 注入Spring自带的JdbcTemplate @Autowired private JdbcTemplate jdbcTemplate; public void generateFileFromDb() { String querySql = "select id, file_name, content, create_time from your_table where status = ?"; // 直接获取结构化查询结果 List<Map<String, Object>> resultRows = jdbcTemplate.queryForList(querySql, 1); // 遍历结果直接生成文件,不需要额外映射逻辑 for (Map<String, Object> row : resultRows) { Long id = (Long) row.get("id"); String fileName = (String) row.get("file_name"); // 其余字段处理、写入文件逻辑 } }方案2:MyBatis 无实体映射模式
引入MyBatis依赖后,不需要配置ResultMap和实体类,直接指定返回值类型为java.util.Map即可拿到字典结构的结果:
Mapper接口定义:public interface CommonQueryMapper { List<Map<String, Object>> getTableData(@Param("status") Integer status); }对应SQL配置:
<select id="getTableData" resultType="java.util.Map"> select id, file_name, content, create_time from your_table where status = #{status} </select>调用后直接遍历结果处理即可,和Python中用字典接收查询结果的体验一致。
方案3:原生JDBC API(无任何框架依赖)
如果不使用任何第三方框架,直接用JDK自带的JDBC API即可实现,逻辑和C语言操作数据库的流程类似:// JDK7+支持try-with-resources自动关闭资源 try ( Connection conn = DriverManager.getConnection("jdbc:mysql://host:port/db_name", "username", "password"); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("select id, file_name, content, create_time from your_table where status = 1") ) { while (rs.next()) { Long id = rs.getLong("id"); String fileName = rs.getString("file_name"); // 其余字段处理、写入文件逻辑 } } catch (SQLException e) { // 异常处理逻辑 e.printStackTrace(); }
以上方案都不需要提前定义任何实体类,也不需要做水化映射,直接处理原生查询结果即可,复杂度和你用Python、PHP实现同类需求基本一致。
内容的提问来源于stack exchange,提问作者kicksdev
相关产品推荐
相关产品推荐

