看完黑马的视频之后写的,应该不是很完整(后面如果发现不全的话再加?)
依赖
下面是mp、druid、lombok、代码生成器的依赖
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
| <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.2</version> </dependency>
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.16</version> </dependency>
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.4.1</version> </dependency>
<dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.3</version> </dependency>
|
JDBC参数
在application.yml里添加
1 2 3 4 5 6 7
| spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://124.223.44.144:3306/mybatisplus?serverTimezone=UTC&useSSL=false username: root password: dong
|
标准数据层CRUD功能
在UserDao中继承BaseMapper<User>即可使用mp的接口
1 2 3
| @Mapper public interface UserDao extends BaseMapper<User> { }
|
对于一般的crud,mp给了非常多的接口可以使用,这里不多赘述

lombok
引入lombok依赖(在文章开头)
然后实体类添加@Data注解即自动添加get/set等等方法,注意不包含有参无参构造!!!!
有参无参构造可以用@NoArgsConstructor、@AllArgsConstructor
如User实体类:
1 2 3 4 5 6 7 8 9 10 11 12 13
| @Data @NoArgsConstructor @AllArgsConstructor public class User { private Long id; private String name; private String password; private Integer age; private String tel; private Integer deleted; @Version private Integer version; }
|
mp标准日志输出
在yml里加入以下代码
1 2 3
| mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
|
分页功能
添加拦截器
下面的PaginationInnerInterceptor就是分页拦截器
1 2 3 4 5 6 7 8 9 10 11
| package top.zhengru.config;
@Configuration public class MpConfig { @Bean public MybatisPlusInterceptor mpInterceptor(){ MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor(); mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor()); return mpInterceptor; } }
|
执行分页查询
1 2 3 4 5 6 7 8 9 10
| @Test void testGetByPage(){ IPage page = new Page(2,3); userDao.selectPage(page,null); System.out.println("当前页码:"+page.getCurrent()); System.out.println("每页显示数:"+page.getSize()); System.out.println("总页数:"+page.getPages()); System.out.println("总条数:"+page.getTotal()); System.out.println("数据:"+page.getRecords()); }
|
条件查询
常规格式
1 2 3 4
| QueryWrapper qw = new QueryWrapper(); qw.lt("age",23); List<User> userList = userDao.selectList(qw); System.out.println(userList);
|
Lambda格式
1 2 3 4
| QueryWrapper<User> qw = new QueryWrapper<User>(); qw.lambda().lt(User::getAge,23); List<User> userList = userDao.selectList(qw); System.out.println(userList);
|
null值处理
1 2 3 4 5
| LambdaQueryWrapper<User> lqw =new LambdaQueryWrapper<User>(); lqw.lt(null != uq.getAge(),User::getAge,uq.getAge()) .gt(null != uq.getAge2(),User::getAge,uq.getAge2()); List<User> userList = userDao.selectList(lqw); System.out.println(userList);
|
查询投影
1 2 3 4 5 6 7
| LambdaQueryWrapper<User> lqw =new LambdaQueryWrapper<User>(); QueryWrapper<User> lqw =new QueryWrapper<User>(); lqw.select("id","name","age","tel"); lqw.select("count(*) as count,tel"); lqw.groupBy("tel"); List<Map<String, Object>> userList = userDao.selectMaps(lqw); System.out.println(userList);
|
模糊查询
like还有likeLeft
1 2 3 4
| LambdaQueryWrapper<User> lqw =new LambdaQueryWrapper<>(); lqw.like(User::getName,"o"); List<User> users = userDao.selectList(lqw); System.out.println(users);
|
还有很多就不列举了…
字段映射与表名映射
1 2 3 4
| @TableName("t_user") @TableField(exist = false) @TableField(value = "pwd") @TableField(select = false)
|
DML控制
id生成策略控制
如下图

1 2 3 4 5 6
| mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: id-type: assign_id
|
表名前缀
1 2 3 4 5 6
| mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: table-prefix: t_
|
逻辑删除
用deleted标记0未删除,1删除

1 2
| @TableLogic(value = "0",delval = "1") private Integer deleted;
|
或者
1 2 3 4 5 6 7 8
| mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl global-config: db-config: logic-delete-field: deleted logic-not-delete-value: 0 logic-delete-value: 1
|
乐观锁
用version标记

用@Version注解标记实体类属性
1 2
| @Version private Integer version;
|
添加OptimisticLockerInnerInterceptor拦截器拼接SQL
1 2 3 4 5 6 7 8 9 10
| @Configuration public class MpConfig { @Bean public MybatisPlusInterceptor mpInterceptor(){ MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor(); mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor()); mpInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); return mpInterceptor; } }
|
快速开发
同理依赖在文章开头
下面是创建对象的方法和代码生成器的配置文件
1 2
| AutoGenerator autoGenerator = new AutoGenerator(); autoGenerator.execute();
|
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
| public class CodeGenerator { public static void main(String[] args) { AutoGenerator autoGenerator = new AutoGenerator(); DataSourceConfig dataSource = new DataSourceConfig(); dataSource.setDriverName("com.mysql.cj.jdbc.Driver"); dataSource.setUrl("jdbc:mysql://localhost:3306/mybatisplus_db?serverTimezone=UTC"); dataSource.setUsername("root"); dataSource.setPassword("root"); autoGenerator.setDataSource(dataSource); GlobalConfig globalConfig = new GlobalConfig(); globalConfig.setOutputDir(System.getProperty("user.dir")+"/mybatisplus_04_generator/src/main/java"); globalConfig.setOpen(false); globalConfig.setAuthor("黑马程序员"); globalConfig.setFileOverride(true); globalConfig.setMapperName("%sDao"); globalConfig.setIdType(IdType.ASSIGN_ID); autoGenerator.setGlobalConfig(globalConfig); PackageConfig packageInfo = new PackageConfig(); packageInfo.setParent("com.aaa"); packageInfo.setEntity("domain"); packageInfo.setMapper("dao"); autoGenerator.setPackageInfo(packageInfo); StrategyConfig strategyConfig = new StrategyConfig(); strategyConfig.setInclude("tbl_user"); strategyConfig.setTablePrefix("tbl_"); strategyConfig.setRestControllerStyle(true); strategyConfig.setVersionFieldName("version"); strategyConfig.setLogicDeleteFieldName("deleted"); strategyConfig.setEntityLombokModel(true); autoGenerator.setStrategy(strategyConfig); autoGenerator.execute(); } }
|