1.Springboot
1.1什么是springboot,springboot的概述
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的创建、运行、调试、部署等。使用Spring Boot可以做到专注于Spring应用的开发,而无需过多关注XML的配置。Spring Boot使用“习惯优于配置”的理念,简单来说,它提供了一堆依赖打包,并已经按照使用习惯解决了依赖问题。使用Spring Boot可以不用或者只需要很少的Spring配置就可以让企业项目快速运行起来。
1.2 springboot 的特点
(1)快速开发spring应用的框架
(2)内嵌tomcat和jetty容器,不需要单独安装容器,jar包直接发布一个web应用
(3)简化maven配置,parent这种方式,一站式引入需要的各种依赖
(4)基于注解的零配置思想
(5)和各种流行框架:spring web mvc,mybatis等无缝整合
1.3使用idea搭建springboot工程
(1)搭建环境
1. jdk 1.8
2. idea 2022.2.2
3. win11
(2)打开idea File----->new------>project
(3)测试 :想要看是否搭建成功可以创建一个controller层测试一下
启动主加载类
浏览器访问刚才controller的路径
1.4spring常用的配置文件
有properties和yml格式
(1)properties格式
(2)yml格式
如果端口号或上下文路径改动,则访问路径也要改动,无论使用properties或者yml格式,名字必须叫做application,不然主加载类扫描不到,且如果两个文件同时存在且里面有相同的配置则会优先使用properties里面的配置yml其次。
1.5 java如何读取配置文件中的内容
(1)使用@ConfigurationProperties获取配置文件
application 用等号连接
yml 用 ":"然后分级 (属性:后要加一个空格)
(2)使用@Value读取内容(注意:他只能读取基本类型和String类型。加在属性上)
1.6springboot整合数据源
数据源有很多类型,我用的是druid
(1)引入相关依赖
<!--mysql的驱动依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.21</version>
</dependency>
(2)配置数据源信息
driver-class-name=com.mysql.cj.jdbc.Driver( 这里加不加cj看数据库版本)
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.druid.username=root
spring.datasource.druid.password=
spring.datasource.druid.url=jdbc:mysql:///
///后拼接数据库名字 时区看个人idea版本
2.springboot整合mybatis
2.1引入依赖
<?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.hql</groupId>
<artifactId>qy163-springboot02</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>qy163-springboot02</name>
<description>qy163-springboot02</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>
<!--mybatis和springboot整合的依赖 启动依赖-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.21</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</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>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
2.2修改配置文件
#指定映射文件所在的路径–
mybatis.mapper-locations=classpath:mapper/*.xml
#mybatis日志文件
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
2.3mapper接口
2.4为接口生成给代理类
2.5测试
3.Springboot装配原理
3.1springboot包扫描原理
包建议大家放在主类所在包或者子包。默认包扫描的是主类所在的包以及子包。
主函数在运行时会加载一个使用@SpringBootApplication标记的类。而该注解是一个复合注解,包含@EnableAutoConfiguration,这个注解开启了自动配置功能。 该注解也是一个复合注解,包含@AutoConfigurationPackage。 该注解中包含@Import({Registrar.class}),这个注解引入Registrar类。该类中存在registerBeanDefinitions,可以获取扫描的包名。
如果需要人为修改扫描包的名称则需要在主类上@ComponentScan(basepackage={"包名"})
3.2springboot自动装配原理
主函数在运行会执行一个使用@SpringbootApplication注解的类,该注解是一个复合注解,包含@EnableAutoConfiguration, 该注解开启自动配置功能,该注解也是一个复合注解,包含@Import() 该注解需要导入AutoConfigurationImportSelector类。 该类会加载很多自动装配类,而这些自动装配类完成相应的自动装配原理。
4springboot整合mybatis-plus(mp)
4.1mybatis-plus概述
MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
愿景
我们的愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍。
但是不能替代mybatis,单表CRUD可以用mp实现,但是链表操作还是需要mybatis校验
4.2 mybatis-plus的使用
(1)在数据库中创建表user
DELETE FROM user; INSERT INTO user (id, name, age, email) VALUES (1, 'Jone', 18, 'test1@baomidou.com'), (2, 'Jack', 20, 'test2@baomidou.com'), (3, 'Tom', 28, 'test3@baomidou.com'), (4, 'Sandy', 21, 'test4@baomidou.com'), (5, 'Billie', 24, 'test5@baomidou.com');
(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.sws</groupId>
<artifactId>qy163-springboot02</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>qy163-springboot02</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>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.16</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</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>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
4.3配置数据源
spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.druid.username=root spring.datasource.druid.password= spring.datasource.druid.url=jdbc:mysql:/// 表名 ?
4.4创建实体类
@Data @NoArgsConstructor @AllArgsConstructor public class User { private Long id; private String name; private Integer age; private String email; }
4.5创建一个mapper接口
public interface UserMapper extends BaseMapper<User> {
}
4.6为接口生成代理实现类
或者在mapper上加上注解
4.7测试
@SpringBootTest
class DemoApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
void test() {
User user = userMapper.selectById(8);
System.out.println(user);
}
}
4.8使用mp完成的CRUD
@SpringBootTest
class DemoApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
public void select(){
QueryWrapper<User> wrapper=new QueryWrapper<>();
wrapper.likeRight("name","_男");
wrapper.or();
wrapper.between("age",18,24);
List<User> list = userMapper.selectList(wrapper);
System.out.println(list);
}
@Test
public void deleteById(){
int i = userMapper.deleteById(4);
System.out.println(i);
}
@Test
public void delete(){
List<Integer> list=new ArrayList<>();
list.add(2);
list.add(3);
userMapper.deleteBatchIds(list);
}
@Test
public void insert(){
User user = new User(9L,"东东",20,"111@qq.com");
int insert = userMapper.insert(user);
System.out.println(insert);
}
@Test
public void update(){
User user = new User(8L,"渣男",18,"215@qq.coom");
user.setId(7L);
userMapper.updateById(user);
}
}
4.9使用mp完成条件查询
@Test public void page2(){ QueryWrapper<User> wrapper=new QueryWrapper<>(); wrapper.gt("age",18);//gt 大于 List<User> list = userMapper.selectList(wrapper); list.forEach(System.out::println); } //分页查询 @Test public void page(){ Page<User> page=new Page<>(1,3);//1:当前第几页 3:每页显示条数 userMapper.selectPage(page,null);//把查询分页的结果封装到page对象中 System.out.println("当前页的数据"+page.getRecords());//获取当前页的数据 System.out.println("当前的页数:"+page.getPages()); System.out.println("所有数据日条数:"+page.getTotal()); } selectList(wrapper); list.forEach(System.out::println); } //分页查询 @Test public void page(){ Page<User> page=new Page<>(1,3);//1:当前第几页 3:每页显示条数 userMapper.selectPage(page,null);//把查询分页的结果封装到page对象中 System.out.println("当前页的数据"+page.getRecords());//获取当前页的数据 System.out.println("当前的页数:"+page.getPages()); System.out.println("所有数据日条数:"+page.getTotal()); }