You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 09:45:00