【问题标题】:How to show values from table without using Entities?如何在不使用实体的情况下显示表中的值?
【发布时间】:2019-12-29 04:39:39
【问题描述】:

我正在尝试在我的网络应用程序中执行“sql 解释器”,仅用于 CRUD。一切正常,我正在使用方法 prepareStatement() 来执行查询。但我的操作选择有问题:

当我只对 1 个字段使用选择操作时,解析为字符串会得到相当好的结果:

for(String x: resultList){
    System.out.println(x);
}

有没有办法执行:

从表中选择 field_1、field_2、field_3;

并在控制台中打印结果,以某种简洁的形式不使用实体?

如果不可能,有没有办法“即时”生成实体?我的意思是使用 java 代码生成实体。

【问题讨论】:

    标签: java sql spring hibernate jpa


    【解决方案1】:

    您可以使用本机查询并明确指定要选择的列:

    String sql = "SELECT field_1, field_2, field_3 FROM table";
    Query q = em.createNativeQuery(sql);
    List<Object[]> results = q.getResultList();
    
    for (Object[] r : results) {
        System.out.println("(field_1, field_2, field_3) = (" + r[0] + ", " + r[1] + ", " + r[2] + ")");
    }
    

    【讨论】:

      【解决方案2】:

      使用 Spring Data JPA 投影

      如果您已经使用了一些实体和 Spring Repository,那么您可以将此代码添加到其中之一。谢谢Spring Data JPA Projections

      public interface SomeEntityRepository extends Repository<SomeEntity, Long> {
          @Query(value = "SELECT field_1, field_2, field_3 FROM table", nativeQuery = true)
          List<TableDto> getFromTable();
      }
      

      TableDto:

      public interface TableDto{
          Long getField_1();
          String getField_2();
          String getField_3();
      }
      

      使用 Spring JdbcTemplate

      或者使用 Spring JdbcTemplate:

      String query = "SELECT field_1, field_2, field_3 FROM table where id = ?";
      List<TableDto> resluts = jdbcTemplate.queryForObject(
        query, new Object[] { id }, new TableDtoRowMapper());
      
      public class TableDtoRowMapper implements RowMapper<TableDto> {
          @Override
          public TableDtomapRow(ResultSet rs, int rowNum) throws SQLException {
              TableDto dto = new TableDto();
      
              dto.setField_1(rs.getString("field_1"));
              dto.setField_2(rs.getString("field_2"));
              dto.setField_3(rs.getString("field_3"));
      
              return dto;
          }
      }
      

      在此示例中,TableDto 是具有 getter 和 setter 的真实类。

      【讨论】:

        猜你喜欢
        • 2016-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-01-14
        • 1970-01-01
        • 2019-06-16
        • 2013-07-28
        相关资源
        最近更新 更多