1,Springboot 3.0版本以上需要JDK17所以尽量不要是使用3.0以上的版本,不然会出现很多错误。
2,Spingboot的测试类扫描的包是启动类所在的包及其子包,如果包不对,测试类中就无法自动注入
1,如何搭建一个MP
1,写Dao接口,继承baseMapper<实体类>
@Mapper
public interface studentDao extends BaseMapper<student> {
}
@Mapper作用:
从mybatis3.4.0开始加入了@Mapper注解,目的就是为了不再写mapper映射文件。
接口方法注解主要是四个:@Insert、@Delete、@Update、@Select
添加了@Mapper注解之后这个接口在编译时会生成相应的实现类
@MapperScan作用:
![](https://img-blog.csdnimg.cn/img_convert/c9501073c74b9e227cc0cc573ad672ad.png)
![](https://img-blog.csdnimg.cn/img_convert/6899af1ad75f0222727822cba35e9aff.png)
修改的时候,传入的是实体类,也就是说,你传的实体类要有id,根据这个id去修改数据库中实体类的属性,如果有些属性没有被设置,就不会被修改。
2,lombok作用
简化实体类的set,get,构造方法,hash和equal覆盖的生成
![](https://img-blog.csdnimg.cn/img_convert/8eb33289844135eb445881548b216a4a.png)
一个@Data都包含了所有,但是不包含两个构造方法
一个小技巧:Ctrl + H 查看接口的所有实现
3.MP如何实现分页
我们做分页,就相当于在select * form table XXXX limit XXX。在sql语句后面追加一些语句,如limit XXX,就相当于实现了功能增强。
void getFenye()
{
IPage page = new Page(1,2);//当前页,每页多少条
studentDao.selectPage(page,null);
page.getCurrent();//获得当前页码
page.getPages();//一共多少页
page.getRecords();//查询数据库的结果,返回list集合
page.getTotal();//所有记录条数
page.getSize();//每一页的条数
}
3.1MP给我们提供了分页拦截器,配置分页拦截器,不然分页不会生效。
@Configuration
public class MPconfig {
@bean
public MybatisPlusInterceptor MPintercepter()
{
//定义拦截器
MybatisPlusInterceptor mp = new MybatisPlusInterceptor();
//往大的拦截器中添加具体的拦截器
mp.addInnerInterceptor(new PaginationInnerInterceptor());
return mp;
}
}
@Configuration详解,功能:将想要的组件添加到容器中
@bean:给容器中添加组件,以方法名作为组件的id。返回类型为组件类型,返回的值,就是组件在容器中的实例
3.2执行分页功能
void getFenye()
{
IPage page = new Page(1,2);//当前页,每页多少条
studentDao.selectPage(page,null);
page.getCurrent();//获得当前页码
page.getPages();//一共多少页
page.getRecords();//查询数据库的结果,返回list集合
page.getTotal();//所有记录条数
page.getSize();//每一页的条数
}
4,MP实现条件查询
第一种方式
void getTJ()
{
//条件查询第一种方式,使用Wrapper封装条件
QueryWrapper wp = new QueryWrapper();
//参数为列名,比较的值
wp.lt("age",18);//lt小于
List<student> students = studentDao.selectList(wp);
System.out.println(students);
}
![](https://img-blog.csdnimg.cn/img_convert/64b7646263fb421d89ce237c5877adca.png)
![](https://img-blog.csdnimg.cn/img_convert/8bce6b3c2d342b35fceb508f029e2217.png)
这是多条件查询。上面是and 关系
![](https://img-blog.csdnimg.cn/img_convert/c204d8b4c3b90f6cd397b87a141eaa52.png)
这是or条件查询。
![](https://img-blog.csdnimg.cn/img_convert/e8cf2052913392bfbef91f17644f979c.png)
4.1查询条件为null值的情况
![](https://img-blog.csdnimg.cn/img_convert/21a944211006c78e6f484b4c415c891a.png)
通过第一个参数判断,如果是true,连接后面的条件。如果不是true,就不连接条件。
4.2查询投影
就想挑选查询出来的字段有哪些。
![](https://img-blog.csdnimg.cn/img_convert/ca6c0cb69a329e8652023cfe8145200b.png)
框框里是要投影的字段,这种只适合lamad格式
![](https://img-blog.csdnimg.cn/img_convert/3815cebb4631be2b26679163c4d2c9e6.png)
不使用lamad形式
lqw.select(字段名):条件查询挑选某些字段
![](https://img-blog.csdnimg.cn/img_convert/36e2cb5e36933ef2f3beb7446451b193.png)
还可以进行分组,但是我们要使用selectMap,得到一个键值组合
![](https://img-blog.csdnimg.cn/img_convert/a1f0809c5c1f1120423bf50d0305b8e2.png)
对于某些函数不能用的情况,就自己在Dao中书写
4.3查询条件
![](https://img-blog.csdnimg.cn/img_convert/cd19e3365b943a50154ad7b94f1bab5e.png)
eq(字段,值)
![](https://img-blog.csdnimg.cn/img_convert/729d6837d55b05ee2eb2ec5289eff2af.png)
范围查询,between(字段,小的值,大的值)
![](https://img-blog.csdnimg.cn/img_convert/64a6536f1c1baeebe9977da09e46a6d6.png)
模糊查询
![](https://img-blog.csdnimg.cn/img_convert/dba023772b6cb7dc3971f32943f76ddc.png)
![](https://img-blog.csdnimg.cn/img_convert/36b2186dccda9d895c1a7e84519755bc.png)
![](https://img-blog.csdnimg.cn/img_convert/66bd2188b79581203e29cfe63054cf45.png)
![](https://img-blog.csdnimg.cn/img_convert/4a2fee1c379b3a20cb61aac60f87764c.png)
likeright:百分号在右边。 likeleft:百分号在左边
5,字段映射
当数据库的字段与实体类的字段不一致时,怎么办呢?
![](https://img-blog.csdnimg.cn/img_convert/8de3410697e11ac203cd3be9276b959b.png)
使用@TableField注解,在value中关联数据库中的字段。
![](https://img-blog.csdnimg.cn/img_convert/f8ef62f723d1b8af2291ab07d43e5504.png)
![](https://img-blog.csdnimg.cn/img_convert/1866efe29a443d9b4ee1b8b7a6b4a01a.png)
使用exist属性,改为false,表明这个在数据库中不存在。
![](https://img-blog.csdnimg.cn/img_convert/b0ed8c9609e640fd24d580632230c4fc.png)
采用select * 会导致开放所有字段的查看权限。
![](https://img-blog.csdnimg.cn/img_convert/f73f3cdba64bd4fa6c8b6fcf5c7785b9.png)
使用select改为false,表示该属性不参与查询。
![](https://img-blog.csdnimg.cn/img_convert/917967b9c86b78f330f464a647731242.png)
6,id生成策略
![](https://img-blog.csdnimg.cn/img_convert/9335f637b3845ec14e7c0229a546cf0d.png)
雪花算法:64位二进制,long值,数据库 bigint
![](https://img-blog.csdnimg.cn/img_convert/cd10cfdf383a58165ea09e0949d72609.png)
![](https://img-blog.csdnimg.cn/img_convert/28dc070fecbfcb43344573bb520753ba.png)
可以选择在yml配置文件中配置所有实体类的id策略。 还有很多可以在yml中进行全局配置,比如表名的前缀等
![](https://img-blog.csdnimg.cn/img_convert/64f2f90e6bdc3668307b0e638e9e9119.png)
7,多数据操作
![](https://img-blog.csdnimg.cn/img_convert/8aa9bf6236cc9783114d0f6f9ca25e35.png)
8,逻辑删除
![](https://img-blog.csdnimg.cn/img_convert/e547df0daca13f1fde4709dcdbaf23af.png)
![](https://img-blog.csdnimg.cn/img_convert/e5f3e3b343029de4b70fba1e857d8f36.png)
进行逻辑删除后,执行select查全集,默认排除已经被逻辑删除的数据
全局配置
![](https://img-blog.csdnimg.cn/img_convert/91b9550679aa8d9c24b58233fe07d175.png)