Spring Boot(十)--------整合JDBC

Spring Boot(十)--------整合JDBC

19、整合JDBC

19.1 SpringData简介

  • 对于数据访问层,无论是 SQL(关系型数据库) 还是 NOSQL(非关系型数据库),Spring Boot 底层都是采用 Spring Data 的方式进行统一处理

  • Spring Boot 底层都是采用 Spring Data 的方式进行统一处理各种数据库,Spring Data 也是 Spring 中与 Spring Boot、Spring Cloud 等齐名的知名项目。

  • Sping Data 官网:Spring Data

  • 数据库相关的启动器 :可以参考官方文档:Spring Boot Reference Documentation

19.2 整合JDBC

19.2.1 创建测试项目测试数据源
  • 新建测试项目springboot-04-data,导入相应基础模块(Web和SQL)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xEkYhK4C-1646227800889)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220302203427737.png)]

  • 项目自动帮我们导入了一些启动器
	<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
		
        <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>
  • 编写yaml配置文件链接数据库,使用mybatis数据库
spring:
  datasource:
    username: root
    password: 123456
    #?serverTimezone=UTC解决时区的报错,也可以去MySQL安装路径 my.ini 下修改配置,一劳永逸
    url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
    # mysql8以上加.cj
    driver-class-name: com.mysql.cj.jdbc.Driver
  • 链接数据库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0lchcSA1-1646227800890)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220302204330911.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nUFQva8A-1646227800892)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220302204524090.png)]

  • 配置完之后,就可以直接使用了,因为Spring Boot已经默认进行了自动配置,去测试类测试一下
@SpringBootTest
class Springboot04DataApplicationTests {

    //把yaml配置的数据库注册过来
    @Autowired
    DataSource dataSource;

    @Test
    void contextLoads() throws SQLException {
        //查看默认数据源 :class com.zaxxer.hikari.HikariDataSource
        System.out.println(dataSource.getClass());

        //获得数据库链接
        Connection connection = dataSource.getConnection();
        System.out.println(connection);

        //关闭链接
        connection.close();
    }
}
  • 默认配置的数据源为:class com.zaxxer.hikari.HikariDataSource

  • 数据源所有自动配置都在DataSourceAutoConfiguration文件,其中导入了DataSourceProperties文件

  • Spring Boot 2.2.5 默认使用HikariDataSource 数据源,而以前版本,如 Spring Boot 1.5 默认使用 org.apache.tomcat.jdbc.pool.DataSource 作为数据源

  • 可以使用 spring.datasource.type 指定自定义的数据源类型,值为 要使用的连接池实现的完全限定名。

19.3 JDBCTemplate

  • xxxxTemplates:Spring Boot已经配置好的模板bean,拿来即用

  • 有了数据源(com.zaxxer.hikari.HikariDataSource),然后可以拿到数据库连接(java.sql.Connection),有了连接,就可以使用原生的 JDBC 语句来操作数据库;

  • 即使不使用第三方第数据库操作框架,如 MyBatis等,Spring 本身也对原生的JDBC做了轻量级的封装,即JdbcTemplate

  • 数据库操作的所有CRUD方法都在 JdbcTemplate

  • Spring Boot 不仅提供了默认的数据源,同时默认已经配置好了 JdbcTemplate 放在了容器中,程序员只需自己注入即可使用

  • JdbcTemplate 的自动配置是依赖 org.springframework.boot.autoconfigure.jdbc 包下的 JdbcTemplateConfiguration

19.3.1 JDBC Template主要提供以下几类方法
  • execute()方法:可以用于执行任何SQL语句,一般用于执行DDL语句
  • update()方法及batchUpdate()方法:update()方法用于执行新增、修改、删除等语句;batchUpdate()方法用于执行批处理相关语句
  • query()方法及queryForXXX()方法:用于执行查询相关语句
  • call()方法:用于执行存储过程、函数相关语句

19.4 测试

  • 新建一个JDBCController,注入jdbcTemplate,尝试使用原生JDBC对数据进行操作
@RestController
public class JDBCController {
    @Autowired
    JdbcTemplate jdbcTemplate;

    //查询数据库的所有信息
    //没有实体类的情况下,如何获取数据库中的东西?  万能的MAP
    //注意:此处我用IDEA连接了数据库,所以表名要写mybatis.user而不是user
    @GetMapping("/userList")
    public List<Map<String,Object>> userList(){
        String sql = "select * from mybatis.user";
        List<Map<String,Object>> list_maps =  jdbcTemplate.queryForList(sql);
        return list_maps;
    }

    //增加数据
    @GetMapping("/addUser")
    public String addUser() {
        String sql = "insert into mybatis.user(id,name,pwd) values(10,'小明','123456')";
        jdbcTemplate.update(sql);
        return "update-ok";
    }

    //修改数据
    @GetMapping("/updateUser/{id}")
    public String updateUser(@PathVariable("id") int id) {
        String sql = "update mybatis.user set name  = ?,pwd = ? where id = " + id;
        //封装
        Object[] objects = new Object[2];

        objects[0] = "小李";
        objects[1] = "mmmmmm";

        jdbcTemplate.update(sql,objects);
        return "update-ok";
    }

    //删除数据
    @GetMapping("/deleteUser/{id}")
    public String deleteUser(@PathVariable("id") int id) {
        String sql = "delete from mybatis.user where id = ?";
        jdbcTemplate.update(sql,id);
        return "update-ok";
    }
}
  • 测试成功
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值