微人事第五天:springboot整合JdbcTemplate

现在来对springboot对持久层的整合
1.创建项目
勾选web,MYSQL Driver和JDBC API依赖
在这里插入图片描述
然后再pom.xml文件中修改连接数据库的版本号(修改成自己数据库的版本)

<dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
            <version>5.1.27</version>
        </dependency>

然后需要配置数据库连接池:

<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>

2.连接数据库的配置
使用JdbcTemplate需要提供数据库连接参数
这里在application.properties中配置

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/javaboy?characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

3.创建对应数据库表的实体类
在mysql数据库中有一个名称为javaboy的数据库,其中有一张表是user
user表中有id,username,address这三个字段。
现在创建的实体类对应的就是user表,并在实体类中创建set和get方法。

package org.javaboy.jdbctemplate.bean;

//创建实体类,对应user表
public class User {
    private Integer id;
    private String username;
    private String address;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

4.创建service类提供业务逻辑(也就是crud方法)

package org.javaboy.jdbctemplate.service;

import org.javaboy.jdbctemplate.JdbctemplateApplication;
import org.javaboy.jdbctemplate.bean.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;

@Service
public class UserService {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    public Integer addUser(User user) {
        return jdbcTemplate.update("insert into user (id,username,address) value (?,?,?)",
                user.getId(),user.getUsername(),user.getAddress());
    }
}

上面代码的核心就是注入了JdbcTemplate类,然后使用了JdbcTemplate中的update方法(这里你无论是删除,增加还是修改都用update方法,因为crud这些操作本质上就是对数据库进行修改),然后在update中的第一个参数编写sql语句,提供的具体值用?占位,之后的参数就是传递具体的值来替换?

那为何JdbcTemplate可以被注入呢?我们来讲解一下其中的原理
连按两下shift,输入JdbcTemplateAutoConfiguration查看
可以看到注解如下,也就是说生效的条件是要有DataSource和JdbcTemplate
其中DataSource我们在application.properties中已经配置过了,JdbcTemplate也在pom.xml文件中加入依赖了。

在这里插入图片描述
其中方法:如果你没有配置一个JdbcOperations系统就会帮你默认配置一个JdbcTemplate,JdbcOperations是JdbcTemplate的父类。

在方法中可以看到会帮你创建一个JdbcTemplate实例,然后返回这个实例
在这里插入图片描述
所以就可以解释为何能在service类中注入JdbcTemplate了。

5.测试类中测试
在springboot自带的测试类中注入UserService,然后使用这个类的方法

package org.javaboy.jdbctemplate;

import org.javaboy.jdbctemplate.bean.User;
import org.javaboy.jdbctemplate.service.UserService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class JdbctemplateApplicationTests {

    @Autowired
    private UserService userService;

    @Test
    void contextLoads() {
        User user = new User();
        user.setId(1);
        user.setUsername("javaboy");
        user.setAddress("www.javaboy.org");
        userService.addUser(user);
    }

}

6.点击运行测试类
在mysql数据库中查看:
在这里插入图片描述
可以看到数据添加成功。

上面就是使用JdbcTemplate对数据库进行添加操作,接下来来演示一下修改操作:
假设我们要把刚刚添加的那条数据的username中的javaboy修改掉
首先在service类中添加修改方法:
这里原理和添加是一样的

//更新方法
    public Integer updateUsernameById(User user) {
        return jdbcTemplate.update("update user set username = ? where id = ?",
                user.getUsername(),user.getId());
    }

然后在测试类中进行测试:

 @Test
    public void test1() {
        User user = new User();
        user.setId(1);
        user.setUsername("javaboy-2");
        userService.updateUsernameById(user);
    }

点击运行测试类,刷新数据库:
在这里插入图片描述
可以看到修改成功。
删除方法也是同样道理这里就不再演示了。
下面再来演示一下查询操作:
service中添加方法:

 //查询方法
    public List<User> getAllUser2() {
        return jdbcTemplate.query("select * from user",new BeanPropertyRowMapper<>(User.class));
    }

测试类:

@Test
    public void test2() {
        List<User> allUser2 = userService.getAllUser2();
        for (User user : allUser2) {
            System.out.println(user);
        }
    }

运行结果:
在这里插入图片描述

发布了287 篇原创文章 · 获赞 24 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_41998938/article/details/104029368