当前位置: 首页 > news >正文

Mybatis-Plus -03 Mybatis-Plus实现CRUD

Mybatis-Plus实现CRUD

    • 1 Insert增加
    • 2 ID生成策略
    • 3 Delete删除
    • 4 逻辑删除
    • 5 Update修改
    • 6 Select查询

Mybatis-Plus实现CRUD

  • 通用 CRUD 封装**BaseMapper (opens new window)**接口,为 Mybatis-Plus 启动时自动解析实体表关系映射转换为 Mybatis 内部对象注入容器
  • 参数 Serializable为任意类型主键 Mybatis-Plus不推荐使用复合主键约定每一张表都有自己的唯一id 主键
  • 对象 Wrapper为 条件构造器

1 Insert增加

插入一条记录

  • int insert(T entity);
//测试增加
@Test
public void testInsert(){User user = new User(null,"jack",30,"jack@qq.com");userMapper.insert(user);
}

此时,代码会出现异常。因为User类并没有设置ID,那么MP会使用ID生成策略自动生成一个ID。

这个ID是由雪花算法得到的,类型为Long类型,而实体类在中ID为Integer类型

2 ID生成策略

通过**@TableId(type = IdType.AUTO)** 注解进行指定

主键类型参数说明
AUTO(0)数据库ID自增(数据库使用自增)
NONE(1)该类型为未设置主键类型(将跟随全局)
INPUT(2)用户手动输入ID
ID_WORKER(3)全局唯一ID (idWorker )
UUID(4)全局唯一ID (UUID)
ID_WORKER_STR(5)符串全局唯一ID (idWorker 的字符串表示)

3 Delete删除

根据 ID 删除

  • int deleteById(Serializable id)

删除(根据ID 批量删除)

  • int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList)
//测试删除
@Test
public void testdeleteById(){userMapper.deleteById(6);
}
//测试批量删除
@Test
public void testdeleteBatchIds(){Integer[] ids = {1,2,3,4};userMapper.deleteBatchIds(Arrays.asList(ids));
}

4 逻辑删除

在开发中有些数据不能直接从数据库中进行删除。用户删除数据有时候管理员还需要查看!!!

那么在实际的开发中可以实现逻辑删除

实现:

  1. 在数据库中添加deleted字段(0表示未删除、1表示删除)
  2. 在实体上添加@TableLogic注解
@TableLogic
private Integer deleted;
//测试逻辑删除
@Test
public void testLogicDeleteById(){userMapper.deleteById(1);
}
# 执行sql语句为:
UPDATE user SET deleted=1 WHERE id=? AND deleted=0

添加逻辑删除属性后,查询中都会自动带上条件where deleted = 0

5 Update修改

根据 ID 修改(参数为实体类对象)

  • int updateById(@Param(Constants.ENTITY) T entity);
//测试修改
@Test
public void testUpdateById(){User user = new User(5,"rose",30,"rose@qq.com");userMapper.updateById(user);
}

6 Select查询

根据 ID 查询

  • T selectById(Serializable id);

查询(根据ID 批量查询)

  • List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);

根据 entity 条件,查询全部记录

  • List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

根据 Wrapper 条件,查询总记录数

  • Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
//测试根据id查询
@Test
public void testselectById(){User user = userMapper.selectById(1);System.out.println(user);
}
//查询(根据ID 批量查询)
@Test
public void testselectBatchIds(){List<User> userList = userMapper.selectBatchIds(Arrays.asList(1, 2, 3, 4));userList.forEach(System.out::println);
}
//根据 entity 条件,查询全部记录
@Test
public void testselectList(){List<User> userList = userMapper.selectList(null);userList.forEach(System.out::println);
}
//根据 Wrapper 条件,查询总记录数
@Test
public void testselectCount(){Integer count = userMapper.selectCount(null);System.out.println(count);
}
http://www.lryc.cn/news/61704.html

相关文章:

  • 综合能源系统中基于电转气和碳捕集系统的热电联产建模与优化研究(Matlab代码实现)
  • “智慧赋能 强链塑链”|工程物资供应链管理中的数字化应用
  • 通过docker发布项目
  • 为什么Spring和IDEA不推荐使用@Autowired注解?
  • windows下运行dpdk下的helloworld
  • 【AI理论学习】深入理解Prompt Learning和Prompt Tuning
  • 从Authy中导出账户和secret
  • 图像锐度评分算法,方差,点锐度法,差分法,梯度法
  • 查询练习:连接查询
  • 【mmdeploy】【TODO】使用mmdeploy将mmdetection模型转tensorrt
  • 德赛西威上海车展重磅发布Smart Solution 2.0,有哪些革新点?
  • 戴尔服务器是否需要开启cpupower.service
  • day02_第一个Java程序
  • 【华为OD机试真题 】1011 - 第K个排列 (JAVA C++ Python JS) | 机试题+算法思路+考点+代码解析
  • 基于php的校园校园兼职网站的设计与实现
  • django部署
  • OpenCV 图像处理学习手册:1~5
  • 深度学习 - 43.SeNET、Bilinear Interaction 实现特征交叉 By Keras
  • Ceph入门到精通-Cephadm安装Ceph(v17.2.5 Quincy)全网最全版本
  • BIOS与POST自检
  • 交友项目【查询好友动态,查询推荐动态】实现
  • 24个强大的HTML属性,建议每位前端工程师都应该掌握!
  • 前端--移动端布局--2移动开发之flex布局
  • 【移动端网页布局】移动端网页布局基础概念 ① ( 移动端浏览器 | 移动端屏幕分辨率 | 移动端网页调试方法 )
  • 无线洗地机哪款性价比高?高性价比的洗地机分享
  • 精通 Python OpenCV4:第三、四部分
  • 在现成的3D打印机上进行实验理论:一种数据孪生的攻击探测框架
  • 网络通信之传输层协议
  • 短视频app开发:如何提高视频播放稳定性
  • 软件测试,想找一份20k以上的工作需要掌握哪些知识?