mybatis-plus3.5.1学习笔记

1、ID

1>id策略有6种:
在这里插入图片描述
想要id自增就在id上面添加

@TableId(type = IdType.AUTO)

mybaits-plus的默认的主键策略是:

@TableId(type = IdType.ID_WORKER)

这样生成的是19位的数字id。

有的人喜欢使用UUID:

@TableId(type = IdType.UUID)

2、createTime(创建时间),updateTime(修改时间)

1>首先我们的数据库字段必须要有createTime(创建时间),updateTime(修改时间)这两个字段
2>在实体类添加注解

@TableField(fill = FieldFill.INSERT)
private Date createTime;@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;

3>在项目目录下新增一个handler包,在包下创建MyMetaObjectHandler.java

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {//使用mp实现添加操作,这个方法执行@Overridepublic void insertFill(MetaObject metaObject) {this.setFieldValByName("createTime", new Date(), metaObject);this.setFieldValByName("updateTime", new Date(), metaObject);}//使用mp实现修改操作,这个方法执行@Overridepublic void updateFill(MetaObject metaObject) {this.setFieldValByName("updateTime", new Date(), metaObject);}
}

3、乐观锁——version

1> 数据库表中添加:“version”,并设置默认值为1
2>实体类中添加字段,然后加上@version注解

@Version
private Integer Version;

3>在项目目录下新建一个包:config。然后在包下面新建:Mpconfig.java文件。

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;@EnableTransactionManagement
@Configuration
@MapperScan("com.bang.mp.mapper")//这里是扫描mapper
public class MpConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor(){MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();//乐观锁插件mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());//分页插件mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return mybatisPlusInterceptor;}
}

4>进行测试

//首先插入一条数据,version字段默认赋值为1
@Test
void testInsert(){User user = new User();user.setAge(18);user.setName("阿昌");user.setEmail("995931576@qq.com");int result = userMapper.insert(user);
}
//在对这条数据进行修改,version会变成 2
@Test
void testOptimisticLocker(){//查询User user = userMapper.selectById(1364080977348956166L);//修改数据user.setName("Helen Yao");user.setEmail("helen@qq.com");//执行更新userMapper.updateById(user);
}

4、分页插件

1>在Mpconfig.java 中添加,为了方便,我在步骤3:乐观锁中已经添加了

//分页插件mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));

2>测试

//分页查询
@Test
void testPage(){//1、创建page对象//传入参数:当前页 和 每页显示记录数Page<User> userPage = new Page<>(1,3);//调用mp分页查询方法//调用mp分页查询过程中,底层会封装,把所有分页数据分装到page对象中userMapper.selectPage(userPage,null);//通过page对象获取数据userPage.getRecords().forEach(System.out::println);//遍历查询的分页数据System.out.println(userPage.getCurrent());//获取当前页System.out.println(userPage.getSize());//每页显示记录数System.out.println(userPage.getTotal());//总记录数System.out.println(userPage.getPages());//总页数System.out.println(userPage.hasNext());//判断是否有下一页System.out.println(userPage.hasPrevious());//判断是否有上一页
}

5、逻辑删除

1> 数据库表中添加:“deleted”,并设置默认值为0,在这里mybatis-plus默认0是未删除,1是已删除。
2>实体类中添加字段,然后加上@TableLogic注解

@TableLogic
private Integer deleted;

3>测试

/**
* 测试 逻辑删除
*/
@Test
public void testLogicDelete() {
int result = userMapper.deleteById(1L);
System.out.println(result);
}

6、条件查询

QueryWrapper queryWrapper = new QueryWrapper();
//ge >= ,gt> ,le<=, lt<
queryWrapper.ge("age",30);
//eq,ne//between 年龄在20岁到30岁
queryWrapper.between("age",20,30);//like 模糊查询
queryWrapper.like("name","岳");//orderBy
queryWrapper.orderByAsc("id");
queryWrapper.orderByDesc("id");
//last 就是在sql 的后面添加
queryWrapper.last("limit 1");
//查询指定的列
queryWrapper.select("id","name");
List<User> list = userMapper.selectList(queryWrapper);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570407.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python网络编程之socket编程

什么是Socket&#xff1f; Socket是应用层与TCP/IP协议族通信的中间软件抽象层&#xff0c;它是一组接口。在设计模式中&#xff0c;Socket其实就是一个门面模式&#xff0c;它把复杂的TCP/IP协议族隐藏在Socket接口后面&#xff0c;对用户来说&#xff0c;一组简单的接口就是全…

idea必装插件

1、lombok 这个是自动生成getter,setter的插件工具&#xff0c;现在idea已经集成了&#xff0c;好像不用单独去插件市场下载。 2、Free MyBatis Tool 官方话术&#xff1a; Free MyBatis Tool 是一款增强idea对mybatis支持的插件 主要功能如下&#xff1a; 生成mapper xml文…

Contest Hunter 0103最短Hamilton路径 【状压dp】 By cellur925

题目传送门 Hamilton路径的定义&#xff1a;从0&#xff08;起点&#xff09;到n-1&#xff08;终点&#xff09;不重不漏地经过每个点恰好一次。 由于数据范围非常小&#xff0c;考虑状压。如NOIP2017宝藏一题&#xff0c;把状态压缩设为n个点是否已到达的二进制数。1表示到达…

java使用itext生成pdf,超简单教学,有手就行

前言&#xff1a;以前出过两期用itext填充pdf的文章&#xff0c;有人说那个会那字体加入到pdf中&#xff0c;导致pdf占用内存过大&#xff0c;那么今天就来分享一期另外的方法。 java使用itext生成pdf1、导包2、直接贴代码&#xff0c;然后大家看注释3、效果1、导包 <depen…

2018-2019-1 20165221 《信息安全系统设计基础》第一周学习总结

2018-2019-1 20165221 《信息安全系统设计基础》第一周学习总结 教材学习总结 有关vim 打开方式&#xff1a;vim [文件名]按i会进入insert模式&#xff0c;可以对代码进行编辑按Esc会进入普通模式&#xff0c;此时可以使用快捷键进行编辑&#xff0c;编辑方式为&#xff1a; 指…

itext5固定段落Paragraph,指定段落位置

前几期分析了怎么用itext生成pdf&#xff0c;有兴趣的可以去看看。 1&#xff0c;java使用itext生成pdf&#xff0c;超简单教学&#xff0c;有手就行 2&#xff0c;java使用itext填充pdf模板&#xff0c;超简单教学&#xff0c;有手就行 然后现在有了新的需求&#xff0c;需…

wordcount C

Gitee 代码链接&#xff1a;https://gitee.com/huangxue1111/codes/12rfs3ztj5ga8ymce7qi910 #include<stdio.h>#include<stdlib.h>#include<string.h>#include<windows.h>#define IN 1#define OUT 0void main() {FILE *fp;int length;fp fopen("…

PS中如何使用通道计算来进行美白

打开本机的Photoshow&#xff0c;把要美白的图片添加进来。 通过快捷键ctrlj 创建一个图层副本。 然后选择通道中的蓝色&#xff0c;复制通道&#xff0c;这里说明一下为什么要选择蓝色&#xff1a;因为蓝色和绿色是较暗的&#xff0c;把暗的选出来&#xff0c;目的是为了更…

Eclipse中导入Java项目出现“No projects are found to import”

如图所示&#xff1a; &#xff0c; 这其实是你的项目中缺少了两个文件&#xff1a;.classpath文件和 .project文件 所以eclipse找不到你的项目了。 解决办法&#xff1a; 在你的Eclipse中再新建一个新的项目&#xff0c;项目的类型和项目名和你想要导入的项目名一样&am…

为什么tomcat在eclipse中启动了,访问不了

tomcat在eclipse中启动不了&#xff0c;有很多中情况。 我把这些可能出现的情况总结了起来&#xff1a; 原因1&#xff1a; 项目的发布目录没有在tomcat下的webapps文件下&#xff0c;导致项目启动不了。 解决&#xff1a;先把tomcat中的服务remove出来 然后双击test1服务…

jsp页面中出现“String cannot be resolved to a type”

右键你的项目&#xff0c;Build Path–>Configure Build Path 按照步骤1–>2 –>3。 然后就大功告成了。

1. 冒泡与选择排序及其比较

冒泡排序 1. 思想 冒泡排序&#xff08;Bubble Sort&#xff09;是一种交换排序&#xff0c;基本思路是&#xff1a;两两比较相邻记录的关键字&#xff0c;如果反序则交换&#xff0c;直到没有反序的记录为止。 2. 实现 2.1 初学常用的一种 public static <T extends Compar…

photoshop切图

1.传统切图 &#xff08;1&#xff09;打开一个psd文件&#xff0c;选择ps左边菜单栏的裁剪工具&#xff0c;选择切片工具。首先我们对这个psd文件进行分析&#xff0c;有意识的将其划分成几个选区&#xff0c;然后通过鼠标的拖拽用切片工具将我们所需要的图案切下来&#xff0…

怎么在cmd中进入D盘下的文件夹

从cmd中进入D盘&#xff0c;在光标处输入“d:”(大小写都可以)&#xff0c;按enter进入。 进入D盘根目录后&#xff0c;如果想找到work文件夹可以在光标处输入“cd work”即可。

linux文件管理 - 系统目录结构

几乎所有的计算机操作系统都是用目录结构组织文件。具体来说就是在一个目录中存放子目录和文件, 而在子目录中又会进一步存放子目录和文件&#xff0c;以此类推形成一个树状的文件结构&#xff0c;由于其结构很像一棵树的分支, 所以该结构又被称为“目录树”。 Linux系统中也沿…

BRVAH(让RecyclerView变得更高效)(1)

本文来自网易云社区作者&#xff1a;吴思博对于RecyclerView&#xff0c; 我们重复编写着那一个又一个的列表界面&#xff0c;有的要分组&#xff0c;有的要添加广告头部、有的要不同类型item排列、等等需求&#xff0c;主要代码有大部分是重复的&#xff0c;如果有一个框架能够…

PyQt5菜单添加+事件+状态栏-7

1 from PyQt5.QtWidgets import QApplication,QMainWindow,QAction2 from PyQt5.QtGui import QIcon3 #demo_7:菜单添加action以及状态栏显示消息4 import sys5 class Example(QMainWindow):6 def __init__(self):7 self.app QApplication(sys.argv)8 sup…

git命令图片

转载于:https://www.cnblogs.com/duanwandao/p/9734074.html

解题: SDOI 2011 染色

题面 强行把序列问题通过树剖套在树上。。。算了算是回顾了一下树剖的思想。 每次树上跳的时候注意跳的同时维护当前拼出来的左右两条链的靠上的端点&#xff0c;然后拼起来的时候讨论一下拼接点&#xff0c;最后一下左右两边的端点都要考虑 1 #include<cstdio>2 #includ…

java.lang.OutOfMemoryError: PermGen space

使用Tomcat报java.lang.OutOfMemoryError: PermGen space错误时&#xff0c;这是tomcat的内存不够的原因&#xff0c;也就是tomcat的内存溢出。 这是我们只要在tomcat的配置下添加服务内存就可以了&#xff0c;添加内存方法&#xff0c;只要加入 -Xms256M -Xmx512M -XX:PermS…