JDBCTemplate基础方法query()的运用

原创文章,转载时请注明出处。


最近公司在优化代码,把基础的JDBCsql语句转为JDBCTemplate,自己在网上找了很久,大多都是query()方法的延伸,比如queryForObject(),queryForInt(),queryForString(),queryForList(),queryForMap()等等的介绍,反而没有根源方法query()的说明,于是请教了公司里的前辈,瞬间感觉豁然开朗。


首先是代码


JdbcTemplate jdbcTemplate = new JdbcTemplate();
List list;
list = jdbcTemplate.query(sql,new Object[] { args1,args2 }, new RowMapper()
{
	@Override
     public Object mapRow(ResultSet rs, int rowNum) throws SQLException 
	{
		//statements...
	}
});

先从参数讲起:

sql是已经写好的sql查询语句,args1,args2是需要替换sql语句占位符的参数,注意必须按照顺序一一对应,其他部分都可以不用修改,这样的话已经可以达成一个基础的sql语句查询并返回结果的功能。

然后是返回类型:

默认的话query返回的是一个Map的集合,这里我用List作为这个集合,于是返回的是List,每个Map对应一行查询结果,比如你查出来有5行数据,就会有5个Map。

对于这个Map而言,它会把查询出来的数据按照<列名称,对应列的值>作为键值对存入Map,每条属性一个键值对。比如我查出来有一条数据是name=sample, status=active,那么对应Map就会存入两个键值对。

然而,spring还提供了一个可扩展的方法mapRow,这个方法可以自定义集合中返回的数据类型,如上文所述,默认返回是Map,但是用户可以自定义,如以下代码:

@Override
     public Object mapRow(ResultSet rs, int rowNum) throws SQLException 
	{
	String s = { rs.getString("name") + " is "+  rs.getString("status") };
     return s;
	}


这样的话我就自定义了结果集数据的返回类型,格式是 name is status 

如果我有两条数据分别是

name = lucien, status = active

name = simon, status = inactive

那么query返回出来的最终结果就是[ "lucien is active", "simon is inactive" ]




你可能感兴趣的:(JDBCTemplate基础方法query()的运用)