该类用来轻量级包装JDBC!以后需要连接数据库时,使用本类即可!你不需要再使用Connection、PreparedStatement,以及ResultSet等东西了!
即对数据库做CRUD时,使用本类即可!
一、更新操作(7)
public int update(String sql)
比较少用!
public int update(String sql, final Object[] params)
执行sql语句,sql中的“?”使用params中给定的值来替换!sql中有几个“?”,params中就应该有几个值。其中sql只能是insert、update,或delete语句!
public int update(String sql,PreparedStatementSetter pss)
PreparedStatementSetter接口只有一个方法:setValues(PreparedStatement)。这个接口让我们自己来设置sql语句中的“?”!我们还可以在setValues()方法中调用PreparedStatement类的非设置“?”的方法!
本方法不是太常用,只用你需要自己来设置PreparedStatement时再使用本方法,通常可以使用上面的方法!
public int update(final String sql, final Object[] params, final KeyHolder keyHolder)
本方法是用来执行insert语句的,并且对应的数据库表必须设置了自增长!其中keyHolder对象是用来获取自增长值的。
public intupdate(PreparedStatementCreator psc)
public intupdate(PreparedStatementCreator psc, KeyHolder keyHolder)
public int update(PreparedStatementCreatorpsc, PreparedStatementSetter pss)
其中PreparedStatementCreator只有一个方法:PreparedStatementcreatePreparedStatement(Connection)!该方法让我们自己来创建PreparedStatement。这个方法不是很常用!当我们需要自己来创建特殊的PreparedStatement时,才需要使用它!
只有你对第二个方法不满意时,你才需要使用本章的其它方法!
二、单行单列查询(6)
public int queryForInt(Stringsql)
其中sql必须是单行、单列的查询语句,并且它不能有“?”,再并且查询结果需要是int类型。
public int queryForInt(Stringsql, Object[] params)
public long queryForLong(Stringsql)
public long queryForLong(Stringsql, Object[] params)
public Object queryForObject(String sql)
public Object queryForObject(String sql, Object[]params)
三、单行查询(4)
public Map queryForMap(String sql)
public Map queryForMap(String sql, Object[] params)
返回的Map中,key是表的字段名,value是当前字段对应的值。就算查询语句的结果集有多条记录,但该方法只把第一行的记录映射成Map。
public List queryForList(String sql) {
return newArrayList(queryForMap(sql).values);
}
public List queryForList(String sql, Object[]params)
本方法是把queryForMap()返回的Map对象,通过调用values后得到的Collection处理后的List。
四、查询(10)
public Object query(String sql, ResultSetExtractorrse)
其中ResultSetExtractor接口只有一个方法:Object extractData(ResultSet rs),该方法需要把结果集转换成一个对象。你可以通过这个方法把结果集转换成任何类型的对象,例如可以把结果集转换成一个List。这个方法只会被调用一次!!!这个方法的返回值就是query()方法的返回值!
extractData()把结果集映射的工作交给了你!而其他工作,你无需操心!
extractData()方法只会被调用一次,你需要在这个方法中把整个(多行多列)结果集映射成一个对象。也就是说,这一个对象应该可以表示一个结果集!例如返回值为List<Student>类型!
public Object query(String sql,Object[]params, ResultSetExtractor rse)
public void query(String sql,RowCallbackHandler rch)
public void query(String sql,Object[] params, RowCallbackHandler rch)
其中RowCallbackHandler只有一个方法:voidprocessRow(ResultSet rs)。processRow()会被调用多次,也就是说,结果集有几行,processRow()就会被调用几次。这个方法中我们需要把一行记录映射一下,但这个方法没有返回值,映射的结果也就不能返回,你需要自己来处理结果保存。
public List query(String sql, RowMapper rowMapper)
public List query(String sql, Object[] params,RowMapper rowMapper)
public Object query(PreparedStatementCreator psc,PreparedStatementSetter pss, ResultSetExtractor rse)
public Object query(PreparedStatementCreator psc,ResultSetExtractor rse)
public voidquery(PreparedStatementCreator psc, RowCallbackHandler rch)
public List query(PreparedStatementCreator psc,RowMapper rowMapper)
五、批处理(1)
public int[] batchUpdate(Stringsql, Object[][] params)