在java中返回查询结果集的正确方法

时间:2014-05-25 13:20:51

标签: java hibernate

我想知道以某些Collection形式返回结果集的正确方法是什么。 或者我应该创建相同类的类实例然后返回它(如何做?) 这样做的常见做法是什么?或者我应该学习Hibernate并实现它?

public class Author {

private String table_name = "authors";

int id;
String full_name;
String location;
int age;
String details;


/** Getter Setter Methods  here ....*/

/** Constructor here.... */


/* Returns all Authors */
public ArrayList all() {

    ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();

    /* TODO : figure out which collection is suitable .*/
    DbHelper dbHelper = new DbHelper();
    Connection conn = dbHelper.getConnection();
    ResultSet rs = null;
    Statement stmt = null;
    try {

        stmt = conn.createStatement();
        String query = "SELECT * FROM authors";
        rs = stmt.executeQuery(query);

        while (rs.next()) {
            HashMap<String, String> hashmap = new HashMap<>();
            int id = rs.getInt(1);
            hashmap.put("id",rs.getString(1));
            hashmap.put("full_name", rs.getString(2));
            hashmap.put("location", rs.getString(3));
            hashmap.put("age", rs.getString(4));
            hashmap.put("details", rs.getString(5));
            list.add(id,hashmap);

           //hashmap.clear();

        }

    } catch (SQLException ex) {
        Logger.getLogger(Author.class.getName()).log(Level.SEVERE, null, ex);
        System.out.println("you are fuckt");
    } finally {
        try {
            rs.close();
            stmt.close();
            conn.close();
        } catch (SQLException ex) {
            Logger.getLogger(Author.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    return list;
}

}

2 个答案:

答案 0 :(得分:1)

我会说你应该去休眠。你只需要执行&#34; list()&#34;就可以获得对象列表。方法。

代码供您参考

List<Authors> al =   this.sessionFactory.getCurrentSession().createQuery("from    Authors").list(); 

Hibernare也提供许多其他优势。它肯定比JDBC更好。

JDBC替代方案:

最佳实践表明你应该从DAO层返回一个DTO(数据传输对象),因为建议从DB中一次性获取相关数据,这样你就可以最小化数据库命中。请关注:

           List<YourDTO> al  = new ArrayList<yourDTO>();

YourDTO是:

 class YourDTO
 {
      private int id:
      private Authors authors;

      // getters and setters
 }

在您执行操作时从resultSet读取数据,然后创建Authors的对象,设置字段,将它们添加到带有id的ArrayList。

答案 1 :(得分:0)

有很多好的选择:

  1. Spring JDBC对于大多数读取数据库应用程序来说是一个非常好的选择。
  2. Jooq是最先进的java查询备选方案之一,但它仅对开源dbs免费。
  3. MyBatisQueryDSL具有出色的sql查询功能,但在创建/更新/删除部分中与Hibernate不匹配。
  4. Hibernate非常适合域驱动模型,尤其适用于管理复杂状态更改,多态类型。它具有乐观锁定,脏检查,事务处理单元,一级和二级缓存等强大功能,但需要一些时间来掌握它具有陡峭的学习曲线。
  5. 首先尝试使用Spring JDBC,如果这不足以将您的时间和精力投入到Hibernate中。