1 正文
1. springboot自动装配原理---
2. springboot整合mbatis-plus
3. springboot整合swagger2
4. springboot整合定时器
2 springboot自动装配原理
2.1 springboot包扫描原理
包建议大家放在主类所在包或者子包。默认包扫描的是主类所在的包以及子包。
主函数 @SpringBootApplication 该注解是一个复合注解,包含@EnableAutoConfiguration,这个注解开启了自动配置功能, 该注解也是一个复合注解,包含AutoConfigurationImportSelector该注解中包含@Import({Registrar.class}),这个注解引入Registrar类,该类中存在registerBeanDefinitions,可以获取扫描的包名。
如果需要人为修改扫描包的名称则需要在主类上@ComponentScan(basepackage={"包名"})
2.2 springboot自动装配原理
主函数在运行会执行一个使用@SpringbootApplication注解的类,该注解是一个复合注解,包含@EnableAutoConfiguration, 该注解开启自动配置功能,该注解也是一个复合注解,包含@Import() 该注解需要导入AutoConfigurationImportSelector类。 该类会加载很多自动装配类,而这些自动装配类完成相应的自动装配原理。
3 springboot 整合 mybatis-plus
3.1 mybatis-plus概述
MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。
不能替代mybatis ,以后对于单表操作的所有功能,都可以使用mp完成。但是链表操作的功能还得要校验mybatis.
3.2 如何使用mp
(1) 创建表并加入数据
DELETE FROM user;
INSERT INTO user (id, name, age, sex) VALUES
(1, '石', 23, '男'),
(2, '乔', 24, '男'),
(3, '王', 21, '男'),
(4, '平', 22, '男');
(2)创建一个springboot工程并引入相关的依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.12.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.syp</groupId>
<artifactId>springboot_mybatis-plus</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot_mybatis-plus</name>
<description>springboot_mybatis-plus</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--swagger2依赖-->
<dependency>
<groupId>com.spring4all</groupId>
<artifactId>swagger-spring-boot-starter</artifactId>
<version>1.9.1.RELEASE</version>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>swagger-bootstrap-ui</artifactId>
<version>1.7.8</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
(3) 配置数据源
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql:///db1
spring.datasource.username=root
spring.datasource.password=shi001104
(4) 创建实体类
@Data
@ToString
@NoArgsConstructor
public class User {
@TableId(type = IdType.AUTO) // 自动增长
private Integer id;
private String name;
private Integer age;
private String sex;
public User(String name, Integer age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
}
(5) 创建一个dao接口
public interface UserMapper extends BaseMapper<User> {
}
(6) 为接口生成代理实现类
@SpringBootApplication
@MapperScan(basePackages = "com.syp.mapper")
public class SpringbootMybatisPlusApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootMybatisPlusApplication.class, args);
}
}
(7) 测试
@SpringBootTest
class SpringbootMybatisPlusApplicationTests {
@Autowired
private UserMapper userMapper;
// Id查询
@Test
void select() {
User user = userMapper.selectById(1);
System.out.println(user);
}
}
3.3 使用mp完成CRUD
@SpringBootTest
class SpringbootMybatisPlusApplicationTests {
@Autowired
private UserMapper userMapper;
// Id查询
@Test
void select() {
User user = userMapper.selectById(1);
System.out.println(user);
}
// 增加
@Test
void insect(){
User user = new User("李",22,"男");
System.out.println(userMapper.insert(user));
}
// 删除
@Test
void delete(){
// 删除一个
System.out.println(userMapper.deleteById(4));
// 批量删除
List<Integer> integers = new ArrayList<>();
integers.add(5);
integers.add(6);
System.out.println(userMapper.deleteBatchIds(integers));
}
// 修改
@Test
void update(){
User user = new User("平",22,"男");
user.setId(4);
System.out.println(userMapper.updateById(user));
}
// 查询所有
@Test
void select2(){
System.out.println(userMapper.selectList(null)); // null 代表查询所有
}
}
3.4 使用mp完成条件查询
@SpringBootTest
class SpringbootMybatisPlusApplicationTests {
@Autowired
private UserMapper userMapper;
// 各种查询条件
@Test
void select3(){
QueryWrapper wrapper = new QueryWrapper();
// wrapper.ge("age",23);
wrapper.like("name","石");
List list = userMapper.selectList(wrapper);
list.forEach(System.out::println);
}
}
3.5 联表使用mp的分页对象
@Autowired
private UserMapper userMapper;
@Test
void select4(){
Page<User> page = new Page<>(1,3);
QueryWrapper<User> wrapper=new QueryWrapper<>();
wrapper.like("name","石");
userMapper.findPage(page,wrapper);
System.out.println("当前页的记录"+page.getRecords());
System.out.println("获取总页数"+page.getPages());
System.out.println("获取总条数"+page.getTotal());
}