1. 回顾
1. springboot概述: 简化spring工程的搭建。
2. springboot配置文件: (1)properties (2)yml 语法格式
3. java代码如何获取配置文件中的内容。
[1]类上加个注解@ConfigurationProperties(prefix="")
[2]在属性上@Value("${key}")----只能读取基本和字符串。
4. springboot整合mybatis持久化框架。
[1]引入starter启动依赖
[2]修改配置文件---数据源的信息 映射文件的路径
[3]dao接口---@Mapper或者@MapperScanner(basepackages="")
2. 正文
1. springboot自动装配原理---
2. springboot整合mbatis-plus
3. springboot整合swagger2
4. springboot整合定时器
3. springboot自动装配原理
3.1 springboot包扫描原理
包建议大家放在主类所在包或者子包。默认包扫描的是主类所在的包以及子包。
主函数在运行时会加载一个使用@SpringBootApplication标记的类。而该注解是一个复合注解,包含@EnableAutoConfiguration,这个注解开启了自动配置功能。 该注解也是一个复合注解,包含@AutoConfigurationPackage。 该注解中包含@Import({Registrar.class}),这个注解引入Registrar类。该类中存在registerBeanDefinitions,可以获取扫描的包名。
如果需要人为修改扫描包的名称则需要在主类上@ComponentScan(basepackage={"包名"})
3.2 springboot自动装配原理
思考: 有没有自己使用DispatcherServlet. 为什么DispatcherServlet能用。
主函数在运行会执行一个使用@SpringbootApplication注解的类,该注解是一个复合注解,包含@EnableAutoConfiguration, 该注解开启自动配置功能,该注解也是一个复合注解,包含@Import() 该注解需要导入AutoConfigurationImportSelector类。 该类会加载很多自动装配类,而这些自动装配类完成相应的自动装配原理。
6分钟
4. springboot整合mybatis-plus
4.1 mybatis-plus概述
MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。
不能替代mybatis ,以后对于单表操作的所有功能,都可以使用mp完成。但是链表操作的功能还得要校验mybatis.
4.2 如何使用mp
(1)创建表并加入数据
DELETE FROM user;
INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, '[email protected]'),
(2, 'Jack', 20, '[email protected]'),
(3, 'Tom', 28, '[email protected]'),
(4, 'Sandy', 21, '[email protected]'),
(5, 'Billie', 24, '[email protected]');
(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.ykq</groupId>
<artifactId>qy163-springboot03</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>qy163-springboot03</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<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.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
(3)配置数据源
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.url=jdbc:mysql:///company
(4)创建实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}
(5)创建一个dao接口
public interface UserMapper extends BaseMapper<User> {
}
(6)为接口生成代理实现类
@SpringBootApplication
@MapperScan(basePackages = "com.ykq.dao")
public class Qy163Springboot03Application {
public static void main(String[] args) {
SpringApplication.run(Qy163Springboot03Application.class, args);
}
}
(7)测试
package com.ykq;
import com.ykq.dao.UserMapper;
import com.ykq.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class Qy163Springboot03ApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
void testFindById() {
User user = userMapper.selectById(6);
System.out.println(user);
}
}
总结: 1.引入mp依赖 2. 创建数据源 3. 实体类 4.dao并继承BaseMapper<>接口 5.接口扫描
6.测试
4.3 使用mp完成CRUD
@SpringBootTest
class Qy163Springboot03ApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
void testFindById() {
User user = userMapper.selectById(1); //根据主键查询数据 默认主键名id 如果主键名不叫id
System.out.println(user);
}
@Test
public void deleteById(){
// int i = userMapper.deleteById(1);
// System.out.println(i);
List<Integer> ids=new ArrayList<>();
ids.add(2);
ids.add(3);
ids.add(5);
ids.add(6);
int i = userMapper.deleteBatchIds(ids);
System.out.println(i);
}
//默认主键的生成策略:雪花算法-唯一id值。
//使用递增 如果想使用递增策略:必须保证表中的id递增,而且需要在@TableId(type=IdType.AUTO)
@Test
public void testInsert(){
User user=new User("蔡雨新",16,"[email protected]");
int insert = userMapper.insert(user);
System.out.println(insert);
}
@Test
public void testUpdate(){
User user=new User("乔文庆",18,"[email protected]");
user.setUid(7L);
userMapper.updateById(user);
}
}
4.4 使用mp完成条件查询
@Test
public void testFind(){
//select * from user where uname like '%乔%' or age 19 and 25;
//Wrapper<T> queryWrapper:查询对象。 条件接口。QUeryWrapper 查询条件类 UpdateWrapper更新条件类 LambdaWrapper 使用lambda表达式
QueryWrapper<User> wrapper=new QueryWrapper<>(); //
wrapper.likeRight("uname","_乔");
wrapper.or();
wrapper.between("age",19,25);
wrapper.orderByDesc("age");
wrapper.select("uname","age");
List<User> list = userMapper.selectList(wrapper);
list.forEach(System.out::println);
}
//分页需求--PageHelper---默认mp分页需要加分页拦截器
@Test
public void testPage(){
Page<User> page=new Page<>(1,3); //current:当前第几页 size:每页显示条数
userMapper.selectPage(page,null); //把查询分页的结果封装到page对象中
System.out.println("当前页的记录"+page.getRecords());//获取当前页的记录
System.out.println("获取总页数"+page.getPages());//获取当前页的记录
System.out.println("获取总条数"+page.getTotal());//获取当前页的记录
}
4.5 联表使用mp的分页对象
//联表操作--使用mp中自动的分页。
@Autowired
private EmpMapper empMapper;
@Test
public void testPage2(){
Page<Emp> page=new Page<>(1,3);
QueryWrapper<Emp> wrapper=new QueryWrapper<>();
wrapper.gt("sal",1000);
empMapper.findPage(page,wrapper);
System.out.println("当前页的记录"+page.getRecords());//获取当前页的记录
System.out.println("获取总页数"+page.getPages());//获取当前页的记录
System.out.println("获取总条数"+page.getTotal());//获取当前页的记录
}
标签:04,System,学习,user,println,注解,com,out
From: https://www.cnblogs.com/av404/p/17323115.html