尚硅谷springboot3核心特性-数据访问(三)

整合SSM

SpringBoot整合springSpringMVCMybatis进行数据访问场景开发

创建SSM整合项目

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

配置数据源

1
2
3
4
5
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver  
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.url=jdbc:mysql://192.168.96.131:3306/test
spring.datasource.username=root
spring.datasource.password=123456

配置MyBatis

1
2
3
4
# 指定mapper.xml映射文件位置
mybatis.mapper-locations=classpath:/mapper/*.xml
# 参数项跳转,开启驼峰命名匹配,数据库下划线匹配javabean驼峰
mybatis.configuration.map-underscore-to-camel-case=true

CRUD编写

  • 编写Bean
  • 编写Mapper
  • 使用mybatisx插件,快速生成MapperXML
  • 测试CRUD

自动配置原理

SSM整合总结:

  • 导入mybatis-spring-boot-starter

  • 配置数据源信息

  • 配置myabtis的 mapper接口扫描 和 xml映射文件扫描

  • 编写 bean、mapper,生成xml,编写sql,进行crud。事务等操作依然和Speing中用法一样

  • 效果:

    • 所有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.JdbcClientAutoConfiguration
        • 给容器中放了JdbcClient操作数据库(对JdbcTemplate进行了二次封装)
      • 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
        • 支持事务
    • 具有的底层能力:数据源,JdbcTemplateJdbcClient,事务
  • MybatisAutoConfiguration:配置了mybatis的整合流程
    • mybatis-spring-boot-starter导入mybatis-spring-boot-autoconfigure(mybatis的自动配置包)
    • 默认加载两个自动配置类:
      • org.mybatis.spring.boot.autoconfigure.MybatisLanguageDriverAutoConfiguration
        • mybatis语言驱动配置
      • org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration
        • 必须在数据源配置号之后才配置
        • 给容器中添加SqlSessionFactory组件。创建和数据库的一次会话
        • 给容器中添加SqlSessionTemplate组件。操作数据库
    • Mybatis的所有配置绑定在MybatisProperties
    • 每个Mapper接口的代理对象是怎么创建放到容器中。详见@MapperScan原理
      • 利用@Import(MapperScannerRegistrar.class)批量给容器中注册组件,解析指定的包路径里面的每一个类,为每一个Mapper接口类,创建Bean定义信息,注册到容器中。

如何分析某个场景导入以后,开启了哪些自动配置类。
找:META-INF\spring\org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中配置的所有值,就是要开启的自动配置类,但是每个类可能有条件注解,基于条件注解判断哪个自动配置类生效了。

快速定位生效的配置

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

扩展:整合其他数据源

Druid数据源

  • 导入druid-starter
  • 写配置
  • 分析自动配置了哪些东西,怎么用

Druid官网:alibaba/druid

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
#数据源基本配置
spring.datasource.url=jdbc:mysql://192.168.200.100:3306/demo
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456
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
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');