Spring Boot 整合持久层技术——使用JdbcTemlate实现数据库的增删改查

 当然,目前国内最主流是还是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框架结合在一起使用、不支持数据库跨平台并且默认没有缓存。

发布了71 篇原创文章 · 获赞 102 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/qq_44717317/article/details/104113493