0
点赞
收藏
分享

微信扫一扫

Spring对Hibernate及JDBC提供的支持


关键字:Spring对Hibernate集JDBC提供的支持。


提供的分页支持:


** 

* 使用hql 语句进行操作 


 * @param hql 

* @param offset 

* @param length 

* @return List 

*/ 

public List getListForPage(final String hql, final int offset, 

 final int length) { 

 List list = getHibernateTemplate().executeFind(new HibernateCallback() { 

 public Object doInHibernate(Session session) 

 throws HibernateException, SQLException { 

 Query query = session.createQuery(hql); 

 query.setFirstResult(offset); 

 query.setMaxResults(length); 

 List list = query.list(); 

 return list; 

 } 

 }); 

 return list; 

}/** 

* 使用criterion进行操作 

* @param arg 

* @param criterions 

* @param offset 

* @param length 

* @return List 

*/ 

protected List getListForPage(final Class arg, final Criterion[] criterions,final int offset, final int length) { 

 List list = getHibernateTemplate().executeFind(new HibernateCallback() { 

 public Object doInHibernate(Session session) 

 throws HibernateException, SQLException { 

 Criteria criteria = session.createCriteria(arg); 

 //循环遍历添加约束条件 

 for (int i = 0; i < criterions.length; i++) { 

 criteria.add(criterions[i]); 

 } 

 criteria.setFirstResult(offset); 

 criteria.setMaxResults(length); 

 return criteria.list(); 

 } 

 }); 

 return list; 

} 


// 获得集合的总数(聚合查询) 

 public Integer getSaleChanceListCount() { 

 final String hql = "select count(*) from SaleChanceInfo si"; 

 Integer result = null; 

 result = (Integer)getHibernateTemplate().execute(new HibernateCallback() { 


 public Object doInHibernate(Session arg0) 

 throws HibernateException, SQLException { 

 Query query = arg0.createQuery(hql); 

 return query.uniqueResult(); 

 } 


 }); 

 return result; 

 } 







二、对JBDC提供的便利条件 


JDBC - JdbcDaoSupport - JdbcTemplateSpring 2010-08-14 11:17:23 阅读262 评论0 字号:大中小 订阅 


JDBC 


Connection : 


createStatement() 


prepareStatement() 


prepareCall() 用于执行存储过程 




Statement / PreparedStatement / CallableStatement : 


executeQuery() 用于执行SQL,返回当前结果集。 


executeUpdate() 用于执行DML,返回受影响的记录数目。 


execute() 可执行DML与SQL,根据执行的语句类型返回true 或 false。 


getResultSet() 用于获取当前结果集。 


getMoreResults() 若没有下一个结果集,返回false,若有,返回true,并移动到下一个结果集。 


setMaxRows() 设置结果集的最大行数。 


CallableStatement.getObject() 获取存储过程指定参数的返回值。 




ResultSet: 


next() 把游标移动到下一条记录,若返回false,表示已经没有下一条记录,初始时游标在第一条记录之前。 


getRow() 获取当前行编号。 


absolute() 将光标移动到此 ResultSet 对象的给定行编号。 


beforeFirst() 将光标移动到此ResultSet对象的开头,正好位于第一行之前。 


afterLast() 将光标移动到此ResultSet对象的末尾,正好位于最后一行之后。 


setFetchSize() 


 setFetchSize最主要是为了减少网络交互次数设计的,访问ResultSet时,如果它每次只从服务器上取一行数据,则会产生大量的开销。setFetchSize的意思是当调用rs.next时,ResultSet会一次性从服务器上取得多少行数据回来,这样在下次rs.next时,它可以直接从内存中获取出数据而不需要网络交互,提高了效率。这个设置可能会被某些JDBC驱动忽略的,而且设置过大也会造成内存的上升。 


getInt() / getLong() / getDouble() / getTimestamp() / getDate() / getString() / getObject()…… 


 参数输入指定列的序号或者列名,返回该列的值。 


getMetaData() 返回ResultSetMetaData对象。 




ResultSetMetaData: 


getColumnCount() 返回此 ResultSet 对象中的列数。 


getColumnName() 获取指定列的名称。 


getColumnType() 获取指定列的 SQL 类型。返回的类型对应java.sql.Types类的静态属性。 






JdbcDaoSupport 


getConnection() 返回JDBC当前链接对象Connection,若没有则新建一个。这个函数意义上成为了JdbcDaoSupport返回到JDBC的桥梁。 


getJdbcTemplate() 获得jdbcTemplate模板。 


getDataSource() 返回 JdbcDaoSupport 与 JdbcTemplate的核心:dataSource。 






JdbcTemplate 


execute() 可执行DDL与DML (CREATE TABLE、INSERT 、UPDATE、 DELETE……)。 


update() 可执行DML。 


queryForInt() 执行查询返回int类型结果。 


 int i = this.getJdbcTemplate().queryForInt("SELECT COUNT(*) FROM KING_USER"); 




queryForObject() 执行查询返回java对象,对象类型可由函数参数指定。 


 String this.getJdbcTemplate().queryForObject("SELECT name FROM KING_USER where ,String.class) ; 




queryForList() 执行查询返回List<Map>类型对象,List里的放的是Map,一个Map包含了一条记录的数据,Map的key是记录的字段名,value是该字段的值。 


 List<Map> row = this.getJdbcTemplate().queryForList("select * from KING_USER"); 


 System.out.println(row.get(0).get("name")); 




query(String sql, RowCallbackHandler rch) 执行查询,每返回一条记录都会调用RowCallbackHandler 的操作。 


 final KingUser user = new KingUser(); 


 this.getJdbcTemplate().query("SELECT * FROM KING_USER ", new RowCallbackHandler(){ 




 @Override 


 public void processRow(ResultSet rs) throws SQLException { 


 user.setId(rs.getInt("id")); 


 user.setName(rs.getString("name")); 


 } 




 }); 


 System.out.println(user.getName()); //由于每返回一条记录都会调用RowCallbackHandler 的操作,所以user对象的数据是最后一条记录的数据。 




query(String sql, RowMapper rowMapper) 执行查询,每条返回的记录都会调用rowMapper的映射规则创建出一个java对象,然后把对象放到一个List里。 


 Public class UserRowMapper implements RowMapper{ 


 @Override 


 public Object mapRow(ResultSet rs, int index) throws SQLException { 


 KingUser user=new KingUser(); 


 user.setId(rs.getInt("id")); 


 user.setName(rs.getString("name")); 


 return user; 


 } 


 } 




List<KingUser> list=this.getJdbcTemplate().query("SELECT * FROM KING_USER", new UserRowMapper()); 


System.out.println(list.get(0).getName()); 




execute(ConnectionCallback action) 把JDBC链接对象Connection返回给程序员操作,这个函数意义上成为了JdbcTemplate返回到JDBC的桥梁。 


 String ConnectionCallback(){ 




 @Override 


 public Object doInConnection(Connection con) throws SQLException, DataAccessException { 


 PreparedStatement ps = con.prepareStatement("SELECT * FROM KING_USER "); 


 ResultSet rs = ps.executeQuery(); 


 rs.next(); 


 String name"); 


 rs.close(); 


 ps.close(); 


 con.close(); 


 return name; 


 } 




 }); 




execute(StatementCallback action) 把JDBC Statement对象返回给程序员操作。 


 String StatementCallback(){ 




 @Override 


 public Object doInStatement(Statement st) throws SQLException, DataAccessException { 


 ResultSet rs = st.executeQuery("SELECT * FROM KING_USER WHERE ); 


 rs.next(); 


 String name"); 


 rs.close(); 


 //不需要显式调用st.close(),函数会自动调用。 


 return name; 


 } 




 }); 


附件是:JDBC - JdbcDaoSupport - JdbcTemplate三者的关系图。

举报

相关推荐

0 条评论