
MyBatis-Plus篇-(二)通用CRUD(HelloWorld)
发布日期:2021-05-14 16:24:32
浏览次数:23
分类:精选文章
本文共 3979 字,大约阅读时间需要 13 分钟。
Mybatis Plus(MP)通用CRUD操作指南
1. 基于Mybatis_PLUS(MP)的CRUD实现
我的目标是帮助开发者熟悉基于Mybatis Plus快速构建通用CRUD操作的实现方法。以下将从插入、更新、查询和删除四个方面详细说明。
2. 插入操作
2.1 单插入操作
@Testpublic void testCommonInsert() { Employee employee = new Employee("ursula", "ursula@qq.com", 1, 22); Integer result = employeeMapper.insert(employee); System.out.println("插入结果:" + result);}
注意事项:
-
使用
@TableId
注解指定主键字段和主键策略。如果属性名与数据库列名一致,可以省略注解。@TableId(value = "id", type = IdType.AUTO)private Integer id;
-
使用
@TableName
注解进行表名映射。如果类名和表名不一致,可以手动指定。@TableName(value = "tbl_employee")public class Employee { // ...其他字段}
-
全局策略配置:
- 全局主键策略配置可避免每个类都需要添加注解。
- 表前缀策略设置可以统一管理表名。
-
验证字段是否为空。对于自动生成的主键,不会插入空值字段,而其他字段需手动处理。
2.2 插入所有字段
使用insertAllColumn
方法确保所有字段都被插入,无论是否为空。
@Testpublic void testCommonInsert() { Employee employee = new Employee("ursula", "ursula@qq.com", 1, 22, 99.5); Integer result = employeeMapper.insertAllColumn(employee); System.out.println("插入结果:" + result);}
注意事项:
insertAllColumn
方法会强制将所有字段插入,包括空值字段。
3. 更新操作
3.1 更新单条记录
@Testpublic void testCommonUpdate() { Employee employee = new Employee(6, "cvzhanshi", "cvzhanshi@163.com", 1, 22); Integer result = employeeMapper.updateById(employee); System.out.println("更新结果:" + result);}
注意事项:
-
updateById
方法会根据实体类中非空属性插入更新语句。UPDATE tbl_employee SET age = 22, last_name = 'cvzhanshi' WHERE id = 6;
-
如果需要更新所有字段,可以使用
updateAllColumnById
方法。
3.2 更新所有字段
@Testpublic void testCommonUpdate() { Employee employee = new Employee(6, "cvzhanshi", "cvzhanshi@163.com", 1, 22); Integer result = employeeMapper.updateAllColumnById(employee); System.out.println("更新结果:" + result);}
注意事项:
updateAllColumnById
方法会强制将所有字段更新,不管是否为空。
4. 查询操作
4.1 根据主键查询单条记录
@Testpublic void testCommonSelect() { Employee employee = employeeMapper.selectById(6); System.out.println("查询结果:" + employee);}
4.2 根据实体封装条件查询
使用selectOne
方法,通过实体中的非空属性构造查询条件。
@Testpublic void testCommonSelect() { Employee employee = new Employee(); employee.setId(6); employee.setLastName("cvzhanshi"); employee.setGender(1); Employee employee2 = employeeMapper.selectOne(employee); System.out.println("查询结果:" + employee2);}
注意事项:
selectOne
方法返回的结果只能是0或1条记录。如果存在多个匹配结果,会抛出异常。
4.3 批量查询多个记录
@Testpublic void testCommonSelect() { ListidList = Arrays.asList(4, 5, 6); List employees = employeeMapper.selectBatchIds(idList); System.out.println("查询结果:" + employees);}
4.4 根据条件映射查询
使用selectByMap
方法,通过传入的列名和值构造查询条件。
@Testpublic void testCommonSelect() { MapcolumnMap = new HashMap<>(); columnMap.put("last_name", "ursula"); List employees = employeeMapper.selectByMap(columnMap); System.out.println("查询结果:" + employees);}
注意事项:
columnMap
的键必须是数据库表中的列名,而不是JavaBean的属性名。
4.5 分页查询
@Testpublic void testCommonSelect() { Listemployees = employeeMapper.selectPage(new Page<>(3, 2), null); System.out.println("查询结果 BracePage:" + employees);}
注意事项:
Page
对象的第一个参数为页码,第二参数为每页行数。
5. 删除操作
5.1 根据主键删除单条记录
@Testpublic void testCommonDelete() { Integer result = employeeMapper.deleteById(4); System.out.println("删除结果:" + result);}
5.2 根据条件映射进行删除
@Testpublic void testCommonDelete() { MapcolumnMap = new HashMap<>(); columnMap.put("last_name", "ursula"); columnMap.put("email", "ursula@qq.com"); Integer result = employeeMapper.deleteByMap(columnMap); System.out.println("删除结果:" + result);}
5.3 批量删除多个记录
@Testpublic void testCommonDelete() { ListidList = Arrays.asList(3, 6); Integer result = employeeMapper.deleteBatchIds(idList); System.out.println("删除结果:" + result);}
6. Mybatis Plus启动机制原理解析
在MP启动时,会自动分析Mapper接口中的方法并分析对应的SQL语句。
BaseMapper提供通用的CRUD方法,selectById
、updateById
等。
MapperProxy通过SqlSession执行CRUD操作。
MappedStatement保存每个方法对应的SQL定义,配置在Configuration
中。
7. 小结
通过以上方法,可以像普通的ORM框架一样快速完成CRUD操作。MP内置的BaseMapper提供了17种通用方法,覆盖了单表CRUD需求,减少了手动编写繁琐的SQL语句和处理业务逻辑的开销。
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年04月19日 18时09分36秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Hadoop(十六)之使用Combiner优化MapReduce
2019-03-06
《机器学习Python实现_10_06_集成学习_boosting_gbdt分类实现》
2019-03-06
CoreCLR源码探索(八) JIT的工作原理(详解篇)
2019-03-06
IOS开发Swift笔记16-错误处理
2019-03-07
flume使用中的一些常见错误解决办法 (地址已经使用)
2019-03-07
andriod 开发错误记录
2019-03-07
C语言编译错误列表
2019-03-07
看明白这两种情况,才敢说自己懂跨链! | 喵懂区块链24期
2019-03-07
张一鸣:创业7年,我经历的5件事
2019-03-07
《web安全入门》(四)前端开发基础Javascript
2019-03-07
python中列表 元组 字典 集合的区别
2019-03-07
python struct 官方文档
2019-03-07
Android DEX加固方案与原理
2019-03-07
Android Retrofit2.0 上传单张图片和多张图片
2019-03-07
iOS_Runtime3_动态添加方法
2019-03-07
Leetcode第557题---翻转字符串中的单词
2019-03-07
Problem G. The Stones Game【取石子博弈 & 思维】
2019-03-07
Unable to execute dex: Multiple dex files
2019-03-07