目录
一、整合SSM场景
二、自动配置原理
引入pom依赖
org.mybatis.spring.boot mybatis-spring-boot-starter 3.0.0 mysql mysql-connector-java 8.0.17 数据库表:
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');
配置数据源
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?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8 spring.datasource.username=root spring.datasource.password=123456
配置mybatis相关配置
#配置mybatis mybatis.mapper-locations=classpath:/mapper/*.xml #开启驼峰命名 mybatis.configuration.map-underscore-to-camel-case=true
实体类:
@Data public class TUser { private Long id; private String loginName; private String nickName; private String passwd; }
mapper接口:
@Mapper public interface UserMapper { TUser getUserById(@Param("id") Long id); }
mapper接口映射文件:
service实现类:
@Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public TUser getUserById(Long id) { return userMapper.getUserById(id); } }
controller层:
@RestController public class UserController { @Autowired private UserService userService; @GetMapping("/getUserById/{id}") public TUser getUserById(@PathVariable("id") Long id){ return userService.getUserById(id); } }
在springboot启动类添加注解:
/** * @MapperScan 告诉mybatis扫描那个包下面的所有接口 */ @MapperScan(basePackages = "com.cjc.boot3ssm.mapper") @SpringBootApplication public class Boot3SsmApplication { public static void main(String[] args) { SpringApplication.run(Boot3SsmApplication.class, args); } }
jdbc场景的自动配置
:1、
mybatis-spring-boot-starter
导入spring-boot-starter-jdbc
,jdbc是操作数据库的场景。2、
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
、支持事务
3、具有的底层能力:数据源、
JdbcTemplate
、事务
MyBatisAutoConfiguration
:配置了MyBatis的整合流程1、
mybatis-spring-boot-starter
导入mybatis-spring-boot-autoconfigure(mybatis的自动配置包)
2、
默认加载两个自动配置类:①、org.mybatis.spring.boot.autoconfigure.MybatisLanguageDriverAutoConfiguration
②、org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration
、必须在数据源配置好之后才配置
、给容器中
SqlSessionFactory
组件。创建和数据库的一次会话、给容器中
SqlSessionTemplate
组件。操作数据库3、MyBatis的所有配置绑定在
MybatisProperties
4、
每个Mapper接口的代理对象是怎么创建放到容器中。详见@MapperScan原理:、利用
@Import(MapperScannerRegistrar.class)
批量给容器中注册组件。解析指定的包路径里面的每一个类,为每一个Mapper接口类,创建Bean定义信息,注册到容器中。
如何分析哪个场景导入以后,开启了哪些自动配置类。
找:
classpath:/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
文件中配置的所有值,就是要开启的自动配置类,但是每个类可能有条件注解,基于条件注解判断哪个自动配置类生效了。可以通过springboot配置文件进行配置定位
#开启调试模式,详细打印开启了哪些自动配置 debug=true # Positive(生效的自动配置) Negative(不生效的自动配置)