笔记 笔记
首页
  • 开发工具
  • Java Web
  • Java 进阶
  • 容器化技术
  • Java 专栏

    • Java 核心技术面试精讲
    • Java 业务开发常见错误 100 例
  • 数据库专栏

    • MySQL 实战 45 讲
    • Redis 核心技术与实战
  • 安全专栏

    • OAuth 2.0 实战课
  • 计算机系统
  • 程序设计语言
  • 数据结构
  • 知识产权
  • 数据库
  • 面向对象
  • UML
  • 设计模式
  • 操作系统
  • 结构化开发
  • 软件工程
  • 计算机网络
  • 上午题错题
在线工具 (opens new window)

EasT-Duan

Java 开发
首页
  • 开发工具
  • Java Web
  • Java 进阶
  • 容器化技术
  • Java 专栏

    • Java 核心技术面试精讲
    • Java 业务开发常见错误 100 例
  • 数据库专栏

    • MySQL 实战 45 讲
    • Redis 核心技术与实战
  • 安全专栏

    • OAuth 2.0 实战课
  • 计算机系统
  • 程序设计语言
  • 数据结构
  • 知识产权
  • 数据库
  • 面向对象
  • UML
  • 设计模式
  • 操作系统
  • 结构化开发
  • 软件工程
  • 计算机网络
  • 上午题错题
在线工具 (opens new window)

购买兑换码请添加

添加时候请写好备注,否则无法通过。

  • Maven

  • Bootstrap

  • Spring

  • Spring MVC

  • MyBatis

  • JUnit

  • GitFlow 工作流指南

  • SpringBoot

    • SpringBoot3-快速入门
    • SpringBoot3-Web开发
    • SpringBoot3-数据访问
      • 创建SSM整合项目
      • 配置数据源
      • 指定mapper映射文件位置
      • CRUD
      • 自动配置原理
      • 快速定位生效的配置
      • 案例
        • Druid
    • SpringBoot3-基础特性
    • SpringBoot3-核心原理
    • SpringBoot3-场景集成
  • Reactor

  • 微服务

  • Java Web
  • SpringBoot
EasT-Duan
2024-09-05
目录

SpringBoot3-数据访问

欢迎来到我的 ChatGPT 中转站,极具性价比,为付费不方便的朋友提供便利,有需求的可以添加左侧 QQ 二维码,另外,邀请新用户能获取余额哦!最后说一句,那啥:请自觉遵守《生成式人工智能服务管理暂行办法》。

本章内容主要是演示一下 SpringBoot 整合 Spring 、 SpringMVC 、 MyBatis 进行数据访问场景开发的功能

# 创建 SSM 整合项目

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>3.0.1</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency
1
2
3
4
5
6
7
8
9
10

# 配置数据源

spring.datasource.url=jdbc:mysql://localhost:3306/springboot3-demo?useSSL=false&serverTimezone=UTC
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=springboot3
spring.datasource.password=springboot3
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
1
2
3
4
5

# 指定 mapper 映射文件位置

#指定mapper映射文件位置
mybatis.mapper-locations=classpath:/mapper/*.xml
#参数项调整
mybatis.configuration.map-underscore-to-camel-case=true
1
2
3
4

注意

这里必须要说明的是,目前 mybatis 与 springboot 的整合并不好,最新版本的 mybatis 只支持 springboot3.1。所以如果使用的是最新版本的 springboot 目前只能使用mybatis-plus了。

# CRUD

关于基础 CRUD 的编写,推荐直接使用 MyBatisX(免费)、MyBatisCodeHelperPro(收费)来自动生成,手写的不一定对,而且重复造轮子。下面是插件的名称和图标。这里以 MyBatisCodeHelperPro 为例

# 自动配置原理

SSM 整合总结:

  1. 导入 mybatis-spring-boot-starter
  2. 配置数据源信息
  3. 配置 mybatis 的 mapper接口扫描 与 xml映射文件扫描
  4. 编写 bean,mapper,生成 xml,编写 sql 进行 crud。事务等操作依然和 Spring 中用法一样
  5. 效果:
    • 所有 sql 写在 xml 中
    • 所有 mybatis配置 写在 application.properties 下面

jdbc 场景的自动配置:

  • mybatis-spring-boot-starter 导入 spring-boot-starter-jdbc`,jdbc 是操作数据库的场景

  • Jdbc 场景的几个自动配置

    • org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration

      • 数据源的自动配置
      • 所有和数据源有关的配置都绑定在 DataSourceProperties
      • 默认使用 HikariDataSource
    • org.springframework.boot.autoconfigure.jdbc.JdbcTemplateAutoConfiguration

      • 给容器中放了 JdbcTemplate 操作数据库
    • org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration

    • org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration

      • 基于 XA 二阶提交协议的分布式事务数据源
    • org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration

    • 支持事务

  • 具有的底层能力:数据源、 JdbcTemplate 、事务

MyBatisAutoConfiguration :配置了 MyBatis 的整合流程

  • mybatis-spring-boot-starter 导入 mybatis-spring-boot-autoconfigure(mybatis的自动配置包)
  • 默认加载两个自动配置类:
    • org.mybatis.spring.boot.autoconfigure.MybatisLanguageDriverAutoConfiguration
    • org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration
      • 必须在数据源配置好之后才配置
      • 给容器中 SqlSessionFactory 组件。创建和数据库的一次会话
      • 给容器中 SqlSessionTemplate 组件。操作数据库
  • MyBatis 的所有配置绑定在 MybatisProperties
  • 每个 Mapper 接口的代理对象是怎么创建放到容器中。详见 **@MapperScan** 原理:
    • 利用 @Import(MapperScannerRegistrar.class) 批量给容器中注册组件。解析指定的包路径里面的每一个类,为每一个 Mapper 接口类,创建 Bean 定义信息,注册到容器中。

如何分析哪个场景导入以后,开启了哪些自动配置类?

找: classpath:/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件中配置的所有值,就是要开启的自动配置类,但是每个类可能有条件注解,基于条件注解判断哪个自动配置类生效了。

# 快速定位生效的配置

#开启调试模式,详细打印开启了哪些自动配置
debug=true
## Positive(生效的自动配置)  Negative(不生效的自动配置)
1
2
3

# 案例

CREATE TABLE `t_user`
(
    `id`         BIGINT(20)   NOT NULL AUTO_INCREMENT COMMENT '编号',
    `login_name` VARCHAR(200) NULL DEFAULT NULL COMMENT '用户名称' COLLATE 'utf8_general_ci',
    `nick_name`  VARCHAR(200) NULL DEFAULT NULL COMMENT '用户昵称' COLLATE 'utf8_general_ci',
    `passwd`     VARCHAR(200) NULL DEFAULT NULL COMMENT '用户密码' COLLATE 'utf8_general_ci',
    PRIMARY KEY (`id`)
);
insert into t_user(login_name, nick_name, passwd) VALUES ('zhangsan','张三','123456');
1
2
3
4
5
6
7
8
9
## 一、数据源基本配置
spring.datasource.url=jdbc:mysql://localhost:3306/springboot3-demo?useSSL=false&serverTimezone=UTC
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=springboot3
spring.datasource.password=springboot3
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
## 二、上面说了默认使用了hikari连接池,也可以在这里配置,二选一!!!
spring.datasource.hikari.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.hikari.jdbc-url=jdbc:mysql://localhost:3306/springboot3-demo?useSSL=false&serverTimezone=UTC
spring.datasource.hikari.username=springboot3
spring.datasource.hikari.password=springboot3
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
1
2
3
4
5
6
7
8
9
10
11
12
//如果使用了hikari连接池的配置方式,那么必须要配置下面这个bean,因为springboot默认会去读取spring.datasource.url等等开头的配置信息
@Configuration
public class MyDataSourceConfig {
    @Bean
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource.hikari")
    public DataSource dataSource() {
        return new HikariDataSource();
    }
}
//mapper、entity、service、xml这些东西就不写了,插件自动生成。
1
2
3
4
5
6
7
8
9
10
11

# Druid

#数据源基本配置
spring.datasource.url=jdbc:mysql://localhost:3306/springboot3-demo?useSSL=false&serverTimezone=UTC
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=springboot3
spring.datasource.password=springboot3
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

## 配置StatFilter监控
spring.datasource.druid.filter.stat.enabled=true
spring.datasource.druid.filter.stat.db-type=mysql
spring.datasource.druid.filter.stat.log-slow-sql=true
spring.datasource.druid.filter.stat.slow-sql-millis=2000
## 配置WallFilter防火墙
spring.datasource.druid.filter.wall.enabled=true
spring.datasource.druid.filter.wall.db-type=mysql
spring.datasource.druid.filter.wall.config.delete-allow=false
spring.datasource.druid.filter.wall.config.drop-table-allow=false
## 配置监控页,内置监控页面的首页是 /druid/index.html
spring.datasource.druid.stat-view-servlet.enabled=true
spring.datasource.druid.stat-view-servlet.login-username=admin
spring.datasource.druid.stat-view-servlet.login-password=admin
spring.datasource.druid.stat-view-servlet.allow=*

## 其他 Filter 配置不再演示
## 目前为以下 Filter 提供了配置支持,请参考文档或者根据IDE提示(spring.datasource.druid.filter.*)进行配置。
## StatFilter
## WallFilter
## ConfigFilter
## EncodingConvertFilter
## Slf4jLogFilter
## Log4jFilter
## Log4j2Filter
## CommonsLogFilter
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

更多配置请看官网 (opens new window)。

#SpringBoot
上次更新: 2025/04/12, 05:37:39
SpringBoot3-Web开发
SpringBoot3-基础特性

← SpringBoot3-Web开发 SpringBoot3-基础特性→

最近更新
01
Reactor 核心
02-24
02
前置条件
10-30
03
计算机网络
09-13
更多文章>
Theme by Vdoing | Copyright © 2019-2025 powered by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式