1. springboot自动装配原理
1.1 springboot包扫描原理
springboot包扫描默认回扫描主类的包以及子包,也可以加一个@ComponentScan(basepackage={"包名"}) 注解来进行扫描
1.2.springboot自动装配
自动装配就是把别人(官方)写好的config配置类加载到spring容器,然后根据这个配置类生成一些项目需要的bean对象。
@EnableAutoConfiguration:实现自动装配的核心注解
EnableAutoConfiguration
只是一个简单地注解,自动装配核心功能的实现实际是通过 AutoConfigurationImportSelector
类,该类类加很多自动装配类,可以完成自动装配。
2. springboot整合mybatis-plus
2.1.什么是mybatis-plus
mybatis-plus就是mybatis升级版,在mybatis的基础上只做增强不做改变,为简化开发、提高效率而生。
2.1.怎么使用mybatis-plus
(1)创建一个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.aaa</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>
(2)配置数据源
(3)编写java代码
3.1实体类
package com.yyj.pojo;
import java.io.Serializable;
import lombok.Data;
/**
*
* @TableName class
*/
@Data
public class Class implements Serializable {
/**
* 班级编号
*/
private Integer cid;
/**
* 班级名字
*/
private String cname;
private static final long serialVersionUID = 1L;
@Override
public boolean equals(Object that) {
if (this == that) {
return true;
}
if (that == null) {
return false;
}
if (getClass() != that.getClass()) {
return false;
}
Class other = (Class) that;
return (this.getCid() == null ? other.getCid() == null : this.getCid().equals(other.getCid()))
&& (this.getCname() == null ? other.getCname() == null : this.getCname().equals(other.getCname()));
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((getCid() == null) ? 0 : getCid().hashCode());
result = prime * result + ((getCname() == null) ? 0 : getCname().hashCode());
return result;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getSimpleName());
sb.append(" [");
sb.append("Hash = ").append(hashCode());
sb.append(", cid=").append(cid);
sb.append(", cname=").append(cname);
sb.append(", serialVersionUID=").append(serialVersionUID);
sb.append("]");
return sb.toString();
}
}
3.2mapper层接口继承BaseMapper<实体类>
(4)为接口生成代理实现类
(5)测试类
5.1(增,删,改,查,分页,多表分页)
package com.yyj;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yyj.mapper.StudentMapper;
import com.yyj.pojo.Student;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
class Qy1633springbootApplicationTests {
@Autowired
private StudentMapper studentMapper;
@Test
void insert() {
Student student = new Student();
student.setSname("zhansan");
student.setSid(2);
student.setAge(19);
student.setCid(1);
int insert = studentMapper.insert(student);
System.out.println(insert);
}
@Test
void delte(){
int i = studentMapper.deleteById(5);
System.out.println(i);
}
@Test
void update(){
Student student = new Student();
student.setSid(1);
student.setSname("lisi");
student.setAge(10);
student.setCid(2);
int update = studentMapper.updateById(student);
System.out.println(student);
}
@Test
void selectById(){
Student student = studentMapper.selectById(1);
System.out.println(student);
}
@Test
void pageselect(){
Page<Student> page = new Page<>(1,3);
studentMapper.selectPage(page,null);
System.out.println("当前页的记录"+page.getRecords());
System.out.println("获取总页数"+page.getPages());
System.out.println("获取总条数"+page.getTotal());
}
@Test
void testfind(){
QueryWrapper<Student> wrapper=new QueryWrapper<>();
// wrapper.like("sname", "明");
// wrapper.between("age",15,22);
// wrapper.orderByDesc("age");
// wrapper.select("sname","age");
wrapper.or();
List<Student> list=studentMapper.selectList(wrapper);
list.forEach(System.out::println);
}
@Test
void testpage(){
Page<Student> page=new Page<>(1,2);
QueryWrapper<Student> wrapper=new QueryWrapper<>();
wrapper.select("sanem","age");
studentMapper.findPage(page,wrapper);
System.out.println("当前页的记录"+page.getRecords());
System.out.println("获取总页数"+page.getPages());
System.out.println("获取总条数"+page.getTotal());
}
}