当然,目前国内最主流是还是springBoot+mybatis来对数据库进行操作,很少会用到JdbcTemlate来实现对数据库的操作,因此可以作为了解。
一、构建Spring工程
1.依赖
如果说是本地连接数据库只需要mysql驱动就够了,但是远程连接的话,需要加入jdbcApi依赖,并且会用到alibaba的数据库连接池,后面会叙述。
2.创建数据库
3.配置数据库连接
# 服务器端口,如果不配置默认是8080端口
server.port=8080
# 数据库设置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#test为我的数据库名称
spring.datasource.url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8
#root为mysql用户名
spring.datasource.username=root
#password为数据库密码
spring.datasource.password=Passw0rd!
4.创建实体类
二、进行数据库的增、删、改、查。
在对数据库进行增删改查操作的时候,按照传统的写法:controller
层——接口;service
层——业务逻辑;Bean
层——数据;分别进行数据库的增、删、改、查。
另外需要注意,Jdbc中没有具体的增删方法,所用的增删改都是用update
,具体实现取决于update里面的sql语句。
1.编写实体类
User
package com.alvin.testmysql.bean;
public class User {
private Long id;
private String username;
private String gender;
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", gender='" + gender + '\'' +
'}';
}
//省略getter/setter方法
}
UserService
@Service
public class UserService {
@Autowired
JdbcTemplate jdbcTemplate;
//增
public Integer addUser(User user){
return jdbcTemplate.update(
"insert into user (username,gender) values (?,?);"
,user.getUsername(),user.getGender());
}
//改
public Integer updateUser(User user){
return jdbcTemplate.update(
"update user set username = ? where id = ?;"
,user.getUsername(),user.getId());
}
//删
public Integer deleteUser(User user){
return jdbcTemplate.update(
"delete from user where id =?",user.getId());
}
//查
public List<User> getAllUsers(){
return jdbcTemplate.query("select * from user", new RowMapper<User>() {
@Override
public User mapRow(ResultSet resultSet, int i) throws SQLException {
User user = new User();
long id = resultSet.getLong("id");
String username = resultSet.getString("username");
String gender = resultSet.getString("gender");
user.setId(id);
user.setUsername(username);
user.setGender(gender);
return user;
}
});
}
/**
* 如果说你的数据库表里的字段以及属性和Bean中的字段名和属性严格一一对应,
* 那么可以用下面这个简单的方法来进行数据库的查询
*/
public List<User> getAllUsers2(){
return jdbcTemplate.query(
"select * from user"
,new BeanPropertyRowMapper<>(User.class));
}
}
UserController
@RestController
public class UserController {
@Autowired
JdbcTemplate jdbcTemplate;
@Autowired
UserService userService;
//增
@GetMapping("/addUser")
public User addUser(
){
User user = new User();
user.setUsername("kitty");
user.setGender("女");
userService.addUser(user);
return user;
}
//改
@GetMapping("/updateUser")
public User updateUser(
@RequestParam Long id
){
User user = new User();
user.setUsername("小红");
user.setId(id);
userService.updateUser(user);
return user;
}
//删
@GetMapping("/deleteUser")
public User deleteUser(
@RequestParam Long id
){
User user = new User();
user.setId(id);
userService.deleteUser(user);
return user;
}
//查
@GetMapping("/selectUser")
public List<User> selectAllUsers(){
List<User> userList = userService.getAllUsers();
return userList;
}
//查2
@GetMapping("/selectUser2")
public List<User> selectAllUsers2(){
List<User> userList = userService.getAllUsers2();
return userList;
}
2.分别用浏览器访问即可实现
增:localhost:8080/addUser
改:localhost:8080/updateUser?id=1
删:localhost:8080/deleteUser?id=1
查:localhost:8080/selectUser
查2:localhost:8080/selectUser2
两个查询方法的区别:
如果说你的数据库表里的字段以及属性和Bean中的字段名和属性严格一一对应, 那么可以用selectUser2
来进行数据库的查询,一般情况下我们都要求一一对应,防止因为字段名不一致而导致不必要的错误。
三、心得体会
通过对JdbcTemlate的使用可以发现并不是很方便,尤其是把sql写入业务逻辑中去,会增加代码的阅读难度,耦合性比较高,但是因为有Spring的提供,相比于jdbc简单了很多,基本上留给我们的就是对sql语句的编写。因此,JdbcTemlate必须于Spring框架结合在一起使用、不支持数据库跨平台并且默认没有缓存。