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


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/foart/archive/2009/08/20/4466589.aspx


二、对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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值