参考博客 https://blog.csdn.net/u013476542/article/details/53257788
相信大多数人来到这篇博客都是为了RowMapper使用来的, 那就先说RowMapper的使用
1, 查询多条记录
@Test
public void findAll() {
String sql = "select * from user";
List users = jdbcTemplate.query(sql, new RowMapper() {
// int i : 别问, 问就是行号, 遍历到第几行了
@Override
public User mapRow(ResultSet resultSet, int i) throws SQLException {
User user = new User();
user.setId(resultSet.getInt(1));
user.setUsername(resultSet.getString(2));
user.setPassword(resultSet.getString(3));
return user;
}
});
System.out.println(users);
}
2,查询单条记录(up在页面上直接改的 ,应该没啥问题, 只是没测试 , 如果有错误 ,请留言 谢谢)
@Test
public void find() {
String sql = "select * from user where id = ?";
User user = jdbcTemplate.queryForObject(sql, new RowMapper() {
@Override
public User mapRow(ResultSet resultSet, int i) throws SQLException {
User user = new User();
user.setId(resultSet.getInt(1));
user.setUsername(resultSet.getString(2));
user.setPassword(resultSet.getString(3));
return user;
}
}, 1);
System.out.println(user);
}
查询多条记录和查询单条记录使用的RowMapper是一样的 , 所以, 你可以将其封装成一个类, 专门用来封装对象
RowMapper 就是一个接口, 所以 封装实现类应该对你小菜一碟。
好了下面要说的是RowCallbackHandler
直接上Demo
@Test
public void callbackDemo(){
String sql = "select * from user";
jdbcTemplate.query(sql, new RowCallbackHandler() {
@Override
public void processRow(ResultSet resultSet) throws SQLException {
/**
* 可以将一部分事务放在该方法底下做, 比如,给所有用户发送邮件,
* 只要不需要展示的, 我感觉都可以处理, 只是也导致Service层和DAO层有点分布不清,个人觉得需要在进行加工下, 这个方法才有用
* 个人感觉作用不大 , 其实还有其他方法可以避免内存压力过大...没必要用这种会导致项目分层不清的方法
* 避免了内存中出现大量数据库数据, 导致内存压力过大
*/
System.out.println(resultSet.getString("username"));
}
});
}
这个方法, 怎么说呢 个人觉得会导致Service层和DAO层分布不清, 导致项目很混乱, 我个人不想用这玩意, 这玩意比较特殊的地方是: 可以避免出现大规模的数据库数据读入内存, 对比RowMapper就是, RowMapper将数据库查询数据全部读入List集合中, 会导致JVM内存压力过大, 具体参考文章开头的链接 。 但是 RowCallbackHandler感觉上并不是那么好使。。。