说明:
1.我是看B站狂神的视频学习的,所以笔记与狂神讲的很相似
2.学习MyBatisPlus,看官方文档也很重要
增加(insert)
1.编写测试类
@Test
public void testInsert(){
User user = new User();
user.setName("lxh");
user.setAge(20);
user.setEmail("238468734@qq.com");
int insert = userMapper.insert(user);
System.out.println(insert);
System.out.println(user);
}
结果:
遇见的问题1:
此处如果生成的id是0,并且再次执行插入测试时,提示主键冲突,原因可能是id类型Long的L写成小写了。
在创建用户实例时并未给id赋值,但是打印出来的id有值,这是因为MybatisPlus(后面简称MP)有默认的主键生成策略—雪花算法,这个id之所以这么长一串也是因为这个默认的主键生成策略。
2.关于MP主键的那些事
主键生成策略有很多,雪花算法只是其中之一。
1.雪花算法
snowflake算法是Twitter开源的分布式ID生成算法,结果是一个long类型的ID 。其核心思想:使用41bit作为毫秒数,10bit作为机器的ID(5bit数据中心,5bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在每个毫秒可以产生4096个ID),最后还有一个符号位,永远是0。
2.@TableId设置主键
我们平时常用的是自增id,通过注解@TableId可实现id自增
IdType的所有类型:
public enum IdType {
AUTO(0), //数据库id自增
NONE(1), //未设置主键
INPUT(2), //手动输入
ID_WORKER(3), //默认全局唯一
UUID(4), //全局唯一id uuid
ID_WORKER_STR(5); //ID_WORKER字符串表示
}
1.修改数据库中的id字段
此处可能遇见修改不成功的问题:点击查看解决方法
2.修改User类,给Id加上注解
此时再运行测试类查看结果,可以看到:
删除(Delete)
现有表中数据如图:
1.编写测试类
@Test
//根据Id删除
void testDelete(){
int i = userMapper.deleteById(5L);
if (i>0)
System.out.println("删除成功");
else
System.out.println("删除失败");
}
//用map删除
@Test
void testDelete2(){
HashMap<String, Object> map = new HashMap<>();
map.put("name","小灰111");
int i = userMapper.deleteByMap(map);
if (i>0)
System.out.println("删除成功");
else
System.out.println("删除失败");
}
结果:
2.逻辑删除
删除分为逻辑删除和物理删除。
逻辑删除就是用户删除某条记录时,实际上只是改变了这条记录的某个状态值,并未真正删除,但是用户没法再看到这条信息,对于用户来说,是删除了。但是管理员还是能看到所有信息的。
- 数据库中增加delete字段
2.修改User类,增加字段,添加逻辑删除注解
@TableLogic //逻辑删除注解
private Integer deleted;
3.配置
application.properties:
# 逻辑已删除值(默认为 1)
mybatis-plus.global-config.db-config.logic-delete-value=1
# 逻辑未删除值(默认为 0)
mybatis-plus.global-config.db-config.logic-not-delete-value=0
4.执行测试类
@Test
//根据Id删除
void testDelete(){
int i = userMapper.deleteById(4L);
if (i>0)
System.out.println("删除成功");
else
System.out.println("删除失败");
}
------>
在之前的版本中还要写一个配置类,添加上逻辑删除组件才算完全配置完成,