相较于使用原生JDBC技术连接数据库,使用JDBCTemplate技术简化了操作
- 首先在资源的创建与销毁方面,它整合了资源创建与销毁。
- 其次在访问数据库的方法上也做出了修改,它使用了query和update两个方法,两个方法的返回值分别为List和int,并且对查询也就是query方法的返回值做出了进一步的处理
处理主要为以下两种
1.第一种是通过RowMapper来将数据库查询返回的数据映射成为一个实例对象,映射对象前我们需要先创建一个与表对应的实体类,通过在query方法的参数中传入sql和一个RowMapper匿名内部类并重写内部的maprow方法,将sql执行返回的结果集ResultSet和行号作为参数传入maprow方法中反复调用maprow方法,将该方法封装的实例对象返回到query方法返回的集合中。
List<Java类> personList = jdbcTemplate.query("查询的SQL语句", new RowMapper<Java类>() {
/**
功能:作为JdbcTemplate,将查询结果的每个字段映射为一个ORM对象的属性的实现。
执行时机:查询结果的每条数据的映射,都会调用一次mapRow方法。
参数:
ResultSet:结果集,封装了MySQL返回的查询结果。可以看作是之前MySQL客户端返回的行结果。
rowNum:当前映射的行,在整体本次查询结果的行号。
*/
@Override
public Java类 mapRow(ResultSet rs, int rowNum) throws SQLException {
//获取当前行数据
rs.getXxxx("查询结果列名");
rs.getString("");
rs.getInt("");
rs.getDouble("");
// 将结果封装成Java对象,并返回。
}
});
2.第二种是在第一种的基础上对RowMapper进行了进一步的简化,通过传入BeanPropertyRowMapper实现类对象进行查询,这个实现类是RowMapper的接口实现类,它内部实现了RowMapper接口,对它进行了进一步的封装。它的操作是需要传入对应实体类的类对象,底层代码会通过反射将数据库返回的数据映射成为对象。
List<Person> list=jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Person.class));