一、前言

二、创建对应开发模块

1、引入我们本次要使用的模块



2、当我们项目创建完成时会自动引入我们选中的启动器

<dependencies>
        <!--Web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--JDBC-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>

        <!-- MySQL驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

3、创建 yaml 配置文件进行对我们的数据库进行连接

spring:
  datasource:
    username: root
    password: 123456
    #如果出现时区报错提示在?后面加上这个:serverTimezone=UTC&
    url: jdbc:mysql://localhost:3306/test01?useUnicode=true&characterEncoding=utf-8
    driver-class-name: com.mysql.cj.jdbc.Driver

4、测试是否配置成功

@SpringBootTest
class Springboot05JdbcApplicationTests {
    @Autowired
    DataSource dataSource;

    @Test
    void contextLoads() throws SQLException {

        //查看默认数据源:com.zaxxer.hikari.HikariDataSource(目前速度最快的)
        System.out.println(dataSource.getClass());

        //获取数据库连接
        Connection connection = dataSource.getConnection();
        System.out.println("数据库连接信息:" + connection);

        //关闭连接
        connection.close();
    }
}

4.1、底层分析

  • 从上面代码执行中我们可以看到它默认给我们配置的数据源为:class com.zaxxer.hikari.HikariDataSource 。 然而,我们并没有手动配置。那这是什么原理呢?我们可以一同来看看,全局搜索一下 DataSourceAutoConfiguration 文件,关于数据源的所有自动配置都在这个文件中。
  • 这里导入的类都在 DataSourceConfiguration 配置类下,可以看出 Spring Boot 2.4.3 默认使用 HikariDataSource 数据源,且 2.0.X 之后都是默认使用这个数据源的。而以前版本,如 Spring Boot 1.5 默认使用 org.apache.tomcat.jdbc.pool.DataSource
  • HikariDataSource 号称 Java WEB 当前速度最快的数据源,相比于传统的 C3P0DBCPTomcat jdbc 等连接池更加优秀。

三、JDBCTemplate

  • 有了数据源(com.zaxxer.hikari.HikariDataSource),然后可以拿到数据库连接(java.sql.Connection),有了连接,就可以使用原生的 JDBC 语句来操作数据库。
  • 即使不使用第三方第数据库操作框架,如 MyBatis 等,Spring 本身也对原生的 JDBC 做了轻量级的封装,即 JdbcTemplate
  • 数据库操作的所有 CRUD 方法都在 JdbcTemplate 中。
  • Spring Boot 不仅提供了默认的数据源,同时默认已经配置好了 JdbcTemplate 放在了容器中,我们只需自己注入即可使用。
  • JdbcTemplate 的自动配置是依赖 org.springframework.boot.autoconfigure.jdbc 包下的 JdbcTemplateConfiguration 类。
JdbcTemplate主要方法:
  • execute 方法: 可以用于执行任何 SQL 语句,一般用于执行 DDL (数据库定义语言)语句。
  • update 方法及 batchUpdate 方法: update 方法用于执行新增、修改、删除等语句。batchUpdate 方法用于执行批处理相关语句。
  • query 方法及 queryForXXX方法: 用于执行查询相关语句。
  • call方法: 用于执行存储过程、函数相关语句。
方法测试
@RestController
@RequestMapping("/jdbc")
public class JdbcController {

    @Autowired
    JdbcTemplate jdbcTemplate;

    /**
     * 查询部门表中所有数据
     * @return: java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
     */
    @GetMapping("/list")
    public List<Map<String,Object>> deptList(){
        String sql = "select * from job";
        List<Map<String, Object>> deptlist = jdbcTemplate.queryForList(sql);
        return deptlist;
    }

    /**
     * 添加部门
     * @return: java.lang.String
     */
    @PostMapping("/save")
    public String addDept(){
        String sql = "insert into dept(id,dname,loc)"+"values(50,'研发部','杭州')";
        jdbcTemplate.update(sql);
        return "添加部门成功!";
    }

    /**
     * 根据 id 删除部门
     * @Param: [id]
     * @return: java.lang.String
     */
    @GetMapping("/clear/{id}")
    public String deleteDept(@PathVariable("id") int id){
        String sql = "delete from dept where id = ?";
        jdbcTemplate.update(sql,id);
        return "删除部门成功!";
    }

    @GetMapping("/update/{id}")
    public String updateDept(@PathVariable("id") int id){
        String sql = "update dept set dname = ?,loc = ? where id ="+id;
        Object[] objects = new  Object[2];
        objects[0] = "运营部";
        objects[1] = "宁波";
        jdbcTemplate.update(sql,objects);
        return "修改部门表数据成功!";
    }
}