publicintaddUser2(User user){ KeyHolder keyHolder = new GeneratedKeyHolder(); int update = jdbcTemplate.update(new PreparedStatementCreator() { @Override public PreparedStatement createPreparedStatement(Connection connection)throws SQLException { PreparedStatement ps = connection.prepareStatement("insert into user (username,address) values (?,?);", Statement.RETURN_GENERATED_KEYS); ps.setString(1, user.getUsername()); ps.setString(2, user.getAddress()); return ps; } }, keyHolder); user.setId(keyHolder.getKey().longValue()); System.out.println(user); return update; }
实际上这里就相当于完全使用了 JDBC 中的解决方案了,首先在构建 PreparedStatement 时传入 Statement.RETURN_GENERATED_KEYS,然后传入 KeyHolder,最终从 KeyHolder 中获取刚刚插入数据的 id 保存到 user 对象的 id 属性中去。
publicintdeleteUserById(Long id){ return jdbcTemplate.update("delete from user where id=?", id); }
当然你也可以使用 PreparedStatementCreator。
2.3 改
1 2 3
publicintupdateUserById(User user){ return jdbcTemplate.update("update user set username=?,address=? where id=?", user.getUsername(), user.getAddress(),user.getId()); }
当然你也可以使用 PreparedStatementCreator。
2.4 查
查询的话,稍微有点变化,这里主要向大伙介绍 query 方法,例如查询所有用户:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
public List<User> getAllUsers(){ return jdbcTemplate.query("select * from user", new RowMapper<User>() { @Override public User mapRow(ResultSet resultSet, int i)throws SQLException { String username = resultSet.getString("username"); String address = resultSet.getString("address"); long id = resultSet.getLong("id"); User user = new User(); user.setAddress(address); user.setUsername(username); user.setId(id); return user; } }); }