ToB企服应用市场:ToB评测及商务社交产业平台

标题: mybatisPlus [打印本页]

作者: 王海鱼    时间: 2023-7-21 22:25
标题: mybatisPlus
mybatisPlus

mybatisplus
基础: mybatis  spring  springmvc
为什么要学习mybatisplus  ?

可以解决大量时间 所有的CRUD 代码它都可以自动化完成
简介
简化 jdbc 操作
简化 mybatis
快速入门

网站:快速开始 | MyBatis-Plus (baomidou.com)
使用第三方依赖
步骤
​                其对应的数据库 Schema 脚本如下:
  1. DROP TABLE IF EXISTS user;
  2. CREATE TABLE user
  3. (
  4.     id BIGINT(20) NOT NULL COMMENT '主键ID',
  5.     name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
  6.     age INT(11) NULL DEFAULT NULL COMMENT '年龄',
  7.     email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
  8.     PRIMARY KEY (id)
  9. );
复制代码
​                其对应的数据库 Data 脚本如下:
  1. DELETE FROM user;
  2. INSERT INTO user (id, name, age, email) VALUES
  3. (1, 'Jone', 18, 'test1@baomidou.com'),
  4. (2, 'Jack', 20, 'test2@baomidou.com'),
  5. (3, 'Tom', 28, 'test3@baomidou.com'),
  6. (4, 'Sandy', 21, 'test4@baomidou.com'),
  7. (5, 'Billie', 24, 'test5@baomidou.com');
复制代码
配置日志

我们所以的sql现在是不可见的,我们希望知道是怎么执行的
  1. #配置日志
  2. mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
复制代码

CRUD扩展

insert
  1.         @Test
  2.         public void testInsert(){
  3.                 User user = new User();
  4.                 user.setName("lmq");
  5.                 user.setAge(21);
  6.                 user.setEmail("1435456124@qq.com");
  7.                 int result = userMapper.insert(user); // 帮我们自动生成id
  8.                 System.out.println(result); //受影响的行数
  9.                 System.out.println(user); // 发现id会自动回填
  10.         }
复制代码

数据库插入的id的默认值为:全局的唯一id
主键生成策略

默认ID_WORKER  全局唯一ID
雪花算法:

snowflake 是 Twitter 开源的分布式id生成算法,结果是个long型的id.核心思想是:使6用41bit作为毫秒数,10bit作为机器的ID(5个bit是数据中心,5bit的机器ID),12bit作为毫秒内的流水号(意味着每个节点在毫秒可以产生4096个ID),最后hiatus有一个符号位,永远是0,可以保证全球唯一
主键自增
我们需要配置主键自增
其他源码解释
  1. public enum IdType {
  2.     AUTO(0),  // 数据库自增
  3.     NONE(1),  // 未设置主键
  4.     INPUT(2),  // 手动输入
  5.     ID_WORKER(3),  // 默认 雪花算法 id
  6.     UUID(4),         //
  7.     ID_WORKER_STR(5);  //字符串截取
  8.     private int key;
  9.     private IdType(int key) {
  10.         this.key = key;
  11.     }
  12.     public int getKey() {
  13.         return this.key;
  14.     }
  15. }
复制代码
更新操作

自动填充

方式一 :数据库级别   (工作中不允许你修改数据库)

方式二:代码级别


乐观锁 : 顾名思义 十分乐观 它认为不会出问题,无论干什么都不去上锁
悲观锁: 顾名思义十分悲观 他认为都会出问题 无论什么都去上锁
  1. `version` `new version`
复制代码
乐观锁实现方式
  1.      乐观锁 1 先查询
  2.      
  3.      -- A
  4.      update User set name = "lmq",version = version+1
  5.      where id = 2 and version = 1
  6.      -- B  线程抢线完成 这个时候 version = 2 会导致 A修改失败!
  7.      update User set name = "lmq",version = version+1
  8.      where id = 2 and version = 1
复制代码
测试一下MP中的乐观锁插件
查询操作
  1.     // 查询测试
  2.     @Test
  3.     public void testSelectById() {   //单个
  4.         User user = userMapper.selectById(1L);
  5.         System.out.println(user);
  6.     }
  7.     @Test
  8.     public void testSelectByBatchId() {  // 批量查询
  9.         List<User> users = userMapper.selectBatchIds(Arrays.asList(1, 2, 3));
  10.         users.forEach(System.out::println);
  11.     }
  12.     @Test
  13.     public void testSelectByBatchIds() {  //条件查询
  14.         HashMap<String, Object> map = new HashMap<>();
  15.         map.put("name", "lmq");
  16.         List<User> users = userMapper.selectByMap(map);
  17.         users.forEach(System.out::println);
  18.     }
复制代码
分页查询

网站使用十分多
如何使用
删除操作
  1.     //测试删除
  2.     @Test
  3.     public void testDeleteById() {  // 单个id
  4.         userMapper.deleteById(1682330740093681666L);
  5.     }
  6.     @Test
  7.     public void testDeleteBatchIds() {  // 多个id
  8.         userMapper.deleteBatchIds(Arrays.asList(1L, 2L));
  9.     }
  10.     @Test
  11.     public void testDeleteByMap() {  // 通过map删除
  12.         HashMap<String, Object> map = new HashMap<>();
  13.         map.put("name", "lmq");
  14.         userMapper.deleteByMap(map);
  15.     }
  16. }
复制代码
逻辑删除

物理删除 : 从数据库中直接移除
逻辑删除: 在数据库中没有删除,而是通过一个变量来让他失效! deleted =0=>deleted =1
管理员可以看见删除记录! 防止数据丢失,类似回收站
性能分析插件

开发中经常遇到慢sql    测试! druid..
MP也提供性能分析插件 超过时间就停止运行
  1. Time:78 ms - ID:com.lmq.mapper.UserMapper.insert
  2. Execute SQL:
  3.     INSERT
  4.     INTO
  5.         user
  6.         ( id, name, age, email, create_time, update_time )
  7.     VALUES
  8.         ( 1682397170604474369, 'lmq', 21, '1435456124@qq.com', '2023-07-21 22:28:37.558', '2023-07-21 22:28:37.559' )
复制代码
条件构造器

十分重要Wrapper

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4