JdbcTemplate 查询方法

使用JdbcTemplate进行查询时,可以使用queryForXXX()等方法

 

1   jdbcTemplate.queryForInt() jdbcTemplate.queryForLong()

 

例如下面使用queryForInt()方法传回user表中的记录数:

 

jdbcTemplate.queryForInt("SELECT COUNT(*) FROM user");

 

 

2 jdbcTemplate.queryForObject()

 

本质上和queryForInt(),相同。返回都是单行单列一个数据。例如下例传回一个String对象:

 

String name = (String) jdbcTemplate.queryForObject(

"SELECT name FROM USER WHERE id = ?",

new Object[] {id},

java.lang.String.class);

 

 

 

 

 

3 jdbcTemplate.queryForList(???)

 

返回 a List of Maps, using column name as key. 每一个map代表一条记录例如:

List rows = jdbcTemplate.queryForList("SELECT * FROM user");

 

 

for(int i=0;i<rows.size();i++){

 

Map userMap=rows.get(i);

 

System.out.println(userMap.get("id"));

System.out.println(userMap.get("name"));

System.out.println(userMap.get("age"));

 

}

 

 

4 jdbcTemplate.queryForMap(???)

 

queryForList(), 差不多,只是预期查询一行数据。返回 a Map, using column name as key.

 

The query is expected to be a single row query

 

 

 

5 jdbcTemplate.queryForRowSet(???)

 

返回RowSet, representing disconnected java.sql.ResultSet

 

 

 

 

JDBCTemplate的使用很简单,只要在ApplicationContext文件里定义一个jdbcTemplate节点,POJO获得注入后可以直接执行操作,不需要继承什么基类。

 

xml 代码

<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">          

      <property name="dataSource" ref="dataSource"/>       

</bean>  

java 代码

SqlRowSet rs = jdbcTemplate.queryForRowSet(sql, params);  

Tips1 jdbcTemplate有很多的ORM化回调操作将返回结果转为对象列表,但很多时候还是需要返回ResultSetSpring有提供一个类似ResultSet的,实现JDBC3.0 RowSet接口的 Spring SqlRowSet

 

Tips2.注意jdbcTemplate尽量只执行查询操作,莫要进行更新,否则会破坏Hibernate的二级缓存体系。

 

发布了28 篇原创文章 · 获赞 4 · 访问量 6万+
展开阅读全文

spring SimpleJdbcTemplate多条件查询的最佳实践.

02-21

大家好. 最近在研究jqgrid,其中牵扯到了多条件查询,而且是很高级的多条件查询. 如下图 [img]http://dl.iteye.com/upload/attachment/422393/383f4d08-c689-3219-8a37-22e66fc807b3.png[/img] 但是这就有个问题了 spring的官方文档中有查询所有字段,更新,添加 ,删除,根据某个字段进行条件查询的最佳实践例子. 但是就是没有SimpleJdbcTemplate的多条件查询字段的最佳实践例子. 目前我用到的方法如下: 随便找的一个例子 [code="java"] public List<OperatorSimple> getAllOperator(int toPage, int pageSize, String login, String name, String oper_group_id, int state) { String sql = "select p.id, p.login,p.password,p.name,p.email,p.tel,g.name,p.create_time,p.state,p.withdraw_time from oper_person_info as p " + "left join oper_group_info as g on p.oper_group_id = g.id where 1 = 1 "; Object[] params = new Object[4]; int index = 0; if (!login.equals("")) { sql += " and p.login like ? "; params[index] = login; index++; } if (!name.equals("")) { sql += " and p.name like ? "; params[index] = "%" + name + "%"; index++; } if (!oper_group_id.equals("")) { sql += " and p.oper_group_id like ? "; params[index] = oper_group_id; index++; } if (state == 1 || state == 0) { sql += " and p.state = ? "; params[index] = state; index++; } Object[] paramsEnd = new Object[index]; System.arraycopy(params, 0, paramsEnd, 0, index); int start = MysqlPaginationUtils.getStart(toPage, pageSize); sql = MysqlPaginationUtils.paginationSQLForMySQL(sql, start, pageSize); return super.getJdbcTemplate().query(sql, paramsEnd, new OperatorSimpleMapper()); }[/code] 但是这个方法我感觉好像不是最佳实践. 一来如果按照jqgrid提供的高级多条件查询,不是要写很多个if判断吗?(实际上我最高记录写了40多个...) 二来 这样也不好进行重构. 请问大家有什么好的多条件查询最佳实践吗? 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览