本文以下将mybatisPlus简称为mp
首先注意: mybatisPlus不是mybatis 的替代品,而是增强mybatis的技术.
只做增强不做改变, 引入他不会对现有工程产生影响.
以下为mapper例子:
要继承这个BaseMapper类, 并在泛型括号中 标注好要操作的类
- public interface UserMapper extends BaseMapper
{ -
- void saveUser(User user);
-
- void deleteUser(Long id);
-
- void updateUser(User user);
-
- User queryUserById(@Param("id") Long id);
-
- List
queryUserByIds(@Param("ids") List ids) ; - }
注意:mp遵守的约定如下,如不符合则使用右图注解来标记
mp要操作, 表中必须有一个主键, 否则它无法进行自动操作
举例使用如下;
注意:如果不指定主键的设置方法 ,默认为雪花算法自动生成
附带了全局配置,但是配置优先级不如局部配置
基于以下原始sql设计mp语句
- QueryWrapper
wrapper = new QueryWrapper() - .select("id","username","info")
- .like("username","o")
- .ge("balance","1000");
- void testUpdateById() {
- /*要更新的数据*/
- User user = new User();
- user.setBalance(2000);
- /*更新条件*/
- QueryWrapper
wrapper = new QueryWrapper() - .eq("username","jack");
- userMapper.update(user,wrapper);
- }
新增用户操作: 不需要写service代码,只需要在mapper层注入service并调用相应方法即可
删除用户操作: 也不需要写service代码,只需要在mapper层注入service并调用相应方法即可
查询(批量)用户操作同理
复杂的业务逻辑, 我们可以在service层中, 通过条件判断 规避掉复杂的语句, 如下使用if. 再用mapper执行简单的sql语句
首先修改批处理配置 设置为true
一次插入要多少 就准备多大的集合, 然后通过循环把每一条数据装载到list中, 每当达到上限时 就使用service的方法执行sql. 然后清空list 继续装载下一批.
此处可能会有时区错误,尝试输入以下url:
jdbc:mysql://localhost/mp?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
然后点击提交,这个插件便会帮你自动生成对应的代码框架,大大简化了重复代码的劳动
分页查询插件
总结
学完mp以后, 我认为他最大的优势在于写简单crud方面很便捷, 但在写复杂sql语句时不如使用mybatis来的快, xml的可读性甚至比这更高一些,复用也更强.
同时,使用Iservice虽然便捷, 但是对于service层的侵入 是好是坏还有待考究.