SpringBoot3——数据访问

整合SSM场景

SpringBoot 整合 Spring、SpringMVC、MyBatis 进行数据访问场景开发

创建SSM整合项目

<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
<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>

配置数据源

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=root
spring.datasource.password=123456

配置MyBatis

# 配置整合MyBatis
mybatis.mapper-locations=classpath:/mapper/*.xml
# 打开驼峰命名规则
mybatis.configuration.map-underscore-to-camel-case=true

安装MyBatisX插件,帮助我们生成Mapper接口的xml文件即可

需要注意的是:

还要再启动类标注@MapperScan注解,指定mapper接口类的位置,不然项目扫描不到

CRUD编写

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

自动配置原理

SSM整合总结

  • 导入 mybatis-spring-boot-starter
  • 配置数据源消息
  • 配置mybatis的mapper接口扫描与xml映射文件扫描
  • 编写bean,mapper,生成xml,编写sql进行crud。事务等操作依然和Spring中用法一样
  • 效果
    • 所有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操作数据库,不过我们一般不用,都是使用MyBatis等专业框架
      • org.springframework.boot.autoconfigure.jdbc.JndiDataSourceAutoConfiguration
      • org.springframework.boot.autoconfigure.jdbc.XADataSourceAutoConfiguration
        • 基于XA二阶提交协议的分布式事务数据源
      • org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration
        • 支持事务
    • 具有的底层能力:数据源、JdbcTeplate、事务

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.AytoConfiguration.imports这个文件中配置的所有值,每个值就是一个要开启的自动配置类,但是每一个类都可能会有条件注解,基于条件注解判断哪个自动配置类生效了

快速定位生效的配置

# 开启调试模式,能够详细打印开启了哪些自动配置
debug=true
# Positive —— 生效的自动配置
# Negative —— 未生效的自动配置

扩展:整合其他数据源

例如:若是想要整合Druid数据源

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

Druid官网:https://github.com/alibaba/druid

#数据源基本配置
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

附录:示例数据库

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');
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值