SpringBoot3核心特性-数据访问

目录

传送门

SpringMVC的源码解析(精品)
Spring6的源码解析(精品)
SpringBoot3框架(精品)
MyBatis框架(精品)
MyBatis-Plus
SpringDataJPA
SpringCloudNetflix
SpringCloudAlibaba(精品)
Shiro
SpringSecurity
java的LOG日志框架

Activiti(敬请期待)
JDK8新特性
JDK9新特性
JDK10新特性
JDK11新特性
JDK12新特性
JDK13新特性
JDK14新特性
JDK15新特性
JDK16新特性
JDK17新特性
JDK18新特性
JDK19新特性
JDK20新特性
JDK21新特性
其他技术文章传送门入口

前言

由于面试问到的比较多,而且做java开发这块还是需要真正掌握的。

现有笔记尚硅谷雷锋阳老师的:SpringBoot3全栈指南,是我目前见过的最好笔记了。

参考视频尚硅谷雷锋阳老师的:SpringBoot零基础教程,面试&加薪必会,视频是24小时31分钟的高质量教程。

参考代码:https://gitee.com/leifengyang/spring-boot-3

最经典的20个Spring Boot面试题,95%以上会被问到,不服来战

为了防止雷锋阳老师的日志查看不到,这里分类整理一下。下面文章不定时更新

SpringBoot3核心特性-快速入门

SpringBoot3核心特性-Web开发

SpringBoot3核心特性-数据访问

SpringBoot3核心特性-基础特性

SpringBoot3核心特性-核心原理

SpringBoot3场景整合

SpringBoot3响应式编程全套-Reactor核心

SpringBoot3响应式编程全套-Spring Webflux

SpringBoot3响应式编程全套-R2DBC

SpringBoot3响应式编程全套-Spring Security Reactive

整合SSM场景

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

一、创建SSM整合项目

xml 复制代码
<!-- 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>

二、配置数据源

java 复制代码
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.zaxxer.hikari.HikariDataSource

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

三、配置MyBatis

java 复制代码
#指定mapper映射文件位置
mybatis.mapper-locations=classpath:/mapper/*.xml
#参数项调整
mybatis.configuration.map-underscore-to-camel-case=true

四、CRUD编写

● 编写Bean

● 编写Mapper

● 使用mybatisx插件,快速生成MapperXML

● 测试CRUD

五、自动配置原理

SSM整合总结:

  1. 导入 mybatis-spring-boot-starter
  2. 配置数据源信息
  3. 配置mybatis的mapper接口扫描与xml映射文件扫描
  4. 编写bean,mapper,生成xml,编写sql 进行crud。事务等操作依然和Spring中用法一样
  5. 效果:
    a. 所有sql写在xml中
    b. 所有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文件中配置的所有值,就是要开启的自动配置类,但是每个类可能有条件注解,基于条件注解判断哪个自动配置类生效了。

六、快速定位生效的配置

java 复制代码
#开启调试模式,详细打印开启了哪些自动配置
debug=true
# Positive(生效的自动配置)  Negative(不生效的自动配置)

七、扩展:整合其他数据源

1、Druid 数据源

暂不支持 SpringBoot3

● 导入druid-starter

● 写配置

● 分析自动配置了哪些东西,怎么用

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

java 复制代码
#数据源基本配置
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

2、附录:示例数据库

sql 复制代码
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');

铁哥备注:评论截图


相关推荐
nlog3n2 小时前
Java策略模式详解
java·bash·策略模式
兰琛2 小时前
Compose组件转换XML布局
android·xml·kotlin
我是个假程序员3 小时前
sql server数据库可疑修复
数据库
水w4 小时前
【Android Studio】解决报错问题Algorithm HmacPBESHA256 not available
android·开发语言·android studio
极限实验室4 小时前
如何使用 Nginx 代理 Easysearch 服务
数据库·nginx
whn19774 小时前
selectdb修改表副本
数据库
Mryan20055 小时前
解决GraalVM Native Maven Plugin错误:JAVA_HOME未指向GraalVM Distribution
java·开发语言·spring boot·maven
TDengine (老段)5 小时前
TDengine 中的视图
数据库·物联网·oracle·时序数据库·tdengine·iotdb
VX_CXsjNo15 小时前
免费送源码:Java+SSM+Android Studio 基于Android Studio游戏搜索app的设计与实现 计算机毕业设计原创定制
java·spring boot·spring·游戏·eclipse·android studio·android-studio
ylfhpy5 小时前
Java面试黄金宝典33
java·开发语言·数据结构·面试·职场和发展·排序算法