博客主页:我的主页
欢迎点赞 收藏 留言 欢迎讨论!
本文由 【泠青沼~】 原创,首发于 CSDN
由于博主是在学小白一枚,难免会有错误,有任何问题欢迎评论区留言指出,感激不尽!个人主页
Spring对数据库的操作在jdbc上面做了更深层次的封装,而JdbcTemplate便是Spring提供的一个操作数据库的便捷工具。我们可以借助JdbcTemplate来执行所有数据库操作,例如插入,更新,删除和从数据库中检索数据,并且有效避免直接使用jdbc带来的繁琐编码
不仅要加入jdbc依赖,还要加入数据库驱动依赖(这里加入mysql)
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-jdbcartifactId>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
dependency>
public class User {
private Integer id;
private String username;
private String password;
GET和SET方法省略...
}
@Autowired
JdbcTemplate jdbcTemplate;
public int adduser(User user){
int i = jdbcTemplate.update("insert into user (username,password)values (?,?)", user.getUsername(), user.getPassword());
return i;
}
下方的方法通过GeneratedKeyHolder可以拿到在插入数据库数据之后,数据库分配给此项数据的ID,并返回给后台
public int adduser2(User user){
GeneratedKeyHolder keyHolder = new GeneratedKeyHolder();
int update = jdbcTemplate.update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
PreparedStatement ps = con.prepareStatement("insert into user (username,password)values (?,?)", Statement.RETURN_GENERATED_KEYS);
ps.setObject(1, user.getUsername());
ps.setObject(2, user.getPassword());
return ps;
}
}, keyHolder);
user.setId(keyHolder.getKey().intValue());
return update;
}
public int deletebyid(int id){
int update = jdbcTemplate.update("delete from user where id=?", id);
return update;
}
public int updatebyid(int id,String username){
int update = jdbcTemplate.update("update user set username=? where id=?", username,id );
return update;
}
方法比较繁琐,但是灵活性较高,对属性的命名没有较高的要求
public List<User> getAll(){
List<User> list = jdbcTemplate.query("select * from user", new RowMapper<User>() {
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
String id = rs.getString("id");
String username = rs.getString("username");
String password = rs.getString("password");
user.setUsername(username);
user.setId(Integer.valueOf(id));
user.setPassword(password);
return user;
}
});
return list;
}
方法简单,便捷高效,但是对数据库表列名和实体类的属性名字有较高的要求,需要两者名字必须一致
public List<User> getAll(){
List<User> list = jdbcTemplate.query("select * from user", new RowMapper<User>() {
@Override
public User mapRow(ResultSet rs, int rowNum) throws SQLException {
User user = new User();
String id = rs.getString("id");
String username = rs.getString("username");
String password = rs.getString("password");
user.setUsername(username);
user.setId(Integer.valueOf(id));
user.setPassword(password);
return user;
}
});
return list;
}
在大部分情况下,我们都会直接使用更加强大的持久化框架来访问数据库,比如MyBatis、Hibernate或者Spring Data JPA,我们这里讲解JdbcTemplate的整合,只是告诉大家有这么一种操作数据库的方式