2014-05-25 46 views
1

我想知道以某种集合的形式返回结果集的正确方法是什么。 或者我应该创建同一类的类实例,然后返回它(如何做到这一点?) 这样做的常见做法是什么?或者我应该学习Hibernate并实现它?在java中返回查询结果集的正确方法

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; 
} 

}

+0

这取决于您的要求选择休眠或不...您对我们期望什么? – unknown

回答

1

我会说你应该去休眠。只需执行“list()”方法即可获得对象列表。供大家参考

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

Hibernare

代码提供了许多其他优点了。它比JDBC更好的选择。

JDBC替代:

最佳做法,说妳应该从DAO层返回一个DTO(数据传输对象),因为它是建议得到相关的数据从数据库一气呵成,这样你们可以最大限度地减少数据库命中。按照此:

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

YourDTO是:

class YourDTO 
{ 
     private int id: 
     private Authors authors; 

     // getters and setters 
} 

读取ResultSet中的数据,你做的再创造作者的对象,设置字段,添加他们的ID来ArrayList的。

+0

这看起来不错,但如果我想jdbc(休眠可能是小项目矫枉过正)那么该怎么做呢? – Tejas

+0

@tejas我编辑了我的答案。它会解决你的疑问,但我仍然会说休眠,最初它需要时间来学习,但它有很多优点。 – rishi

0

有许多不错的选择:

  1. Spring JDBC是大多读数据库的应用程序非常不错的选择。
  2. Jooq是最先进的java查询替代方案之一,但它只对开源dbs免费。
  3. MyBatisQueryDSL有很好的sql查询功能,但在创建/更新/删除部分不匹配Hibernate。
  4. Hibernate非常适合领域驱动模型,特别是用于管理复杂状态更改和多态类型。它具有乐观锁定,脏检查,作品交易单元,一级和二级缓存等强大功能,但需要一些时间才能掌握它,从而获得陡峭的学习曲线。

首先尝试Spring JDBC,如果这还不够,那么将时间和精力投入到Hibernate中。

相关问题