Springr JdbcTemplate是对JDBC的轻度封闭,使用还是比较方便,在Spring中就自带
主要方法有三类
execute() 所有sql都可以执行,要拼接完整sql,一般不用
update() 主要用于插入、更新、删除
query***() 查询
query***这类方法主要有下面这三类大量重载
1、queryForObject(sql,Integer.class)
查询返回一个对象,不过只能是(基本类型的包装类型如 Integer),想要返回自定义类型,要使用new RowMapper来进行手动的映射
//指定基本类型包装类型
String name = jdbcTemplate.queryForObject("select name from user where id = 1", String.class);
//自定义类型手动映射
User user = jdbcTemplate.queryForObject("select * from user where id =1", new RowMapper<Student>() {
@Override
public Student mapRow(ResultSet rs, int i) throws SQLException {
User user = new User();
if (rs.next()) {
user.setName(rs.getString("name"));
user.setAge(rs.getInt("age"));
}
return user;
});
2、queryForList(sql,String.class)
查询返回一个List类型,List中的类型也只能时基本类型包装类,如果不指定类型会返回List<Map<String,Object>> 类型的数据,这个方法竟然只支持这两种方式,不能自定义类型
//指定基本类型包装类型
List<String> List = jdbcTemplate.queryForList("select name from user", String.class);
//不指定类型返回List<Map<String,Object>>
List<Map<String, Object>> list = jdbcTemplate.queryForList("select * from user");
3、query()
这个方法支持自动映射,使用BeanPropertyRowMapper<>(User.class)不过返回的是List类型的,要想返回单个对象就是使用new ResultSetExtractor()这种方式来实现手动映射
//自动映射
List<User> list = jdbcTemplate.query("select * from user", new BeanPropertyRowMapper<>(User.class));
//手动映射
User user = jdbcTemplate.query("select * from user", (rs) -> {
User user = new User();
if (rs.next()) {
user.setName(rs.getString("name"));
user.setAge(rs.getInt("age"));
}
return user;
});
Spring JdbcTemplate是对JDBC的轻度封闭,没有那么像mybatis那样多的映射实现,不过也能满足所有查询需要,因为轻量所有性能还是相对高的