官方快速开始文档: https://mp.baomidou.com/guide/quick-start.html
官方配置文档: https://mp.baomidou.com/config/
网友总结的使用文档那个: https://blog.csdn.net/helloPurple/article/details/78715508
Mybatis源码解析-DynamicSqlSource和RawSqlSource的区别 https://www.cnblogs.com/question-sky/p/7569405.html
首先加入:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
<!-- mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <!--<version>3.4.4</version>--> <version>3.4.6</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <!--<version>1.3.1</version>--> <version>1.3.2</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-ehcache</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.0.3</version> </dependency> <!-- mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <version>3.0.7.1</version> </dependency> <!-- sharding-jdbc-core --> <dependency> <groupId>com.dangdang</groupId> <artifactId>sharding-jdbc-core</artifactId> <version>1.5.4.1</version> </dependency> <dependency> <groupId>com.dangdang</groupId> <artifactId>sharding-jdbc-config-spring</artifactId> <version>1.5.4.1</version> </dependency>自动注入SQL: 就是注入公用的方法 |
1问题: 关于注入SQL, 官方的文档 https://mp.baomidou.com/guide/sql-injector.html 实在太抽象,我这一般人无法看懂,所以找到 3.x版本别人的例子 https://www.cnblogs.com/liuyangfirst/p/9744011.html 跟着跑一圈,发现自己定义的注入了,可以插件原本的方法却没有了。后来才发现一个地方有问题:必须要重新加入插件原本的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
package org.pyzheng.common.custom; import com.baomidou.mybatisplus.core.injector.AbstractMethod; import com.baomidou.mybatisplus.core.injector.AbstractSqlInjector; import com.baomidou.mybatisplus.core.injector.ISqlInjector; import com.baomidou.mybatisplus.core.injector.methods.*; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; /** * 项目名称: wp_idea_linux * @author Pandy [panyongzheng@163.com, 1453261799@qq.com] * 功能说明: * 创建者: Pandy, * 邮箱: panyongzheng@163.com, 1453261799@qq.com * 版权: * 官网: * 代码自动产生日期: 2017-09-19 11:11:55 * 创建日期: 2017-09-19 11:11:55 * 修改历史: * Pandy自动代码产生工具V1.0 产生源码 */ public class MyInjector extends AbstractSqlInjector implements ISqlInjector { @Override public List<AbstractMethod> getMethodList() { List<AbstractMethod> list= Stream.of( new DeleteAll() //必须要加入以下插件默认的方法,否则无法使用 ,new Delete() ,new DeleteBatchByIds() ,new DeleteById() ,new DeleteByMap() ,new Insert() ,new SelectBatchByIds() ,new SelectById() ,new SelectByMap() ,new SelectCount() ,new SelectList() ,new SelectMaps() ,new SelectMapsPage() ,new SelectObjs() ,new SelectOne() ,new SelectPage() ,new Update() ,new UpdateById() ).collect(Collectors.toList()); return list; } } |
更多注入资料,得研究里面的源码才了解,AbstractMethod抽象类提供了很多方法,不满足的话,就继承这个抽象,自己做一个新的抽象出来就好。
sqlWhereByMap(): 遍历@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap参数,来构造SQL条件,Key就是字段名字,不是属性。
sqlWhereEntityWrapper(): 遍历封装的对象类做SQL。
其他:可以继承一个新的抽象,增加自己的方法。
2问题. 上面弄好了,问题又来了,执行
1 |
TestMapperTb obj2 = testMapperTbMapper.selectById(19); |
后台居然打印: SELECT mapper_id,code,name FROM TEST_MAPPER_TB WHERE null=? 难道主键标记要配置? 一看文档 https://mp.baomidou.com/guide/faq.html 才发现: 检查是否指定了主键?如未指定,则会导致 selectById
相关 ID 无法操作,请用注解 @TableId
注解表 ID 主键。当然 @TableId
注解可以没有!但是你的主键必须叫 id(忽略大小写) 晕死了….
3问题:既然上面有问题,那去哪里找到注解的说明呢?原谅我没找到,只能靠google了。 终于在好到: https://blog.csdn.net/helloPurple/article/details/78715508 里面有几个说明的
4问题:查询接口使用 @Param(Constants.COLUMN_MAP) Map<String, Object> columnMap ,Key必须是数据库字段的名字,不是mod里面的java属性。