# mybatis-plus-samples **Repository Path**: xiaomi100/mybatis-plus-samples ## Basic Information - **Project Name**: mybatis-plus-samples - **Description**: MyBatis-Plus Samples 文档 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: http://baomidou.com/ - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1062 - **Created**: 2022-04-18 - **Last Updated**: 2022-04-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MyBatis-Plus Samples [贡献代码](https://github.com/baomidou/mybatis-plus-samples) [企业版 Mybatis-Mate 高级特性](https://gitee.com/baomidou/mybatis-mate-examples) 本工程为 MyBatis-Plus 的官方示例,项目结构如下: - mybatis-plus-sample-quickstart: 快速开始示例 修改了数据源和驱动 配置BaseMap ```java 1、@MapperScan("com.baomidou.mybatisplus.samples.quickstart.mapper") 2、public interface UserMapper extends BaseMapper { } ``` - mybatis-plus-sample-quickstart-springmvc: 快速开始示例(Spring MVC版本) ```java @KeySequence(value="seq_user",clazz=String.class) //value为数据库中生成的序列名,class指主键属性类型 public class User { @TableId(type=IdType.INPUT) //注意主键类型要指定为Input private String id; @TableField(fill=FieldFill.INSERT_UPDATE) //当插入和更新都会进行字段的填充 private String name; @TableLogic //标志是一个逻辑标识符号 private Integer deleteFlag; } ``` **本质:** 其实在Oracle数据库中进行新增数据首先在数据库中先执行 **select seq_user.nextval from dual;**这样获取下一个主键的序列,然后再执行插入操作 **另外:** **实际开发中可能会有很多个实体类,所以在每个实体类上都加上@KeySequence,显得很繁琐** **假如需要多个实体公用同一个序列** **可以将@keySequence 定义在父类中, 可实现多个子类对应的多个表公用一个 Sequence** https://www.cnblogs.com/jayhou/p/9825874.html - mybatis-plus-sample-reduce-springmvc: 简化掉默认mapper类示例(Spring MVC版本) 1、自定义扫描、读取资源---注解 2、实现Spring接口,BeanDefinitionRegistryPostProcessor、InitializingBean、ApplicationContextAware、BeanNameAware - mybatis-plus-sample-generator: 代码生成器示例 - mybatis-plus-sample-crud: 完整 CRUD 示例 2种方式: 1、对象查询 2、lamba方式与对象结合 - mybatis-plus-sample-wrapper: 条件构造器示例 ```sql -- 普通查询、嵌套查询 List lambdaUsers3 = userMapper.selectList(new QueryWrapper().lambda() .nested(i -> i.eq(User::getRoleId, 2L).or().eq(User::getRoleId, 3L)) .and(i -> i.ge(User::getAge, 20))); SELECT id,name,age,email,role_id FROM user WHERE ((role_id = ? OR role_id = ?) AND (age >= ?)) -- LambdaQueryWrapper System.out.println("----- 带子查询(sql注入) ------" + " SELECT id,name,age,email,role_id FROM user WHERE (role_id IN (select id from role where id = 2))"); List plainUsers2 = userMapper.selectList(new LambdaQueryWrapper() .inSql(User::getRoleId, "select id from role where id = 2")); List lambdaUsers2 = userMapper.selectList(new QueryWrapper().lambda() .inSql(User::getRoleId, "select id from role where id = 2")); Assertions.assertEquals(plainUsers2.size(), lambdaUsers2.size()); print(plainUsers2); System.out.println("----- 带嵌套查询 ------" + "SELECT id,name,age,email,role_id FROM user WHERE ((role_id = ? OR role_id = ?) AND (age >= ?))"); List plainUsers3 = userMapper.selectList(new LambdaQueryWrapper() .nested(i -> i.eq(User::getRoleId, 2L).or().eq(User::getRoleId, 3L)) .and(i -> i.ge(User::getAge, 20))); List lambdaUsers3 = userMapper.selectList(new QueryWrapper().lambda() .nested(i -> i.eq(User::getRoleId, 2L).or().eq(User::getRoleId, 3L)) .and(i -> i.ge(User::getAge, 20))); Assertions.assertEquals(plainUsers3.size(), lambdaUsers3.size()); print(plainUsers3); ``` - mybatis-plus-sample-pagination: 分页功能示例 ```sql select u.id,u.name,u.email,u.age,c.id as "c_id",c.name as "c_name",c.user_id as "c_user_id" from user u left join children c on c.user_id = u.id WHERE u.age = ? and c.name = ? LIMIT ? ``` ```sql select u.id,u.name,u.email,u.age,c.id as "c_id",c.name as "c_name",c.user_id as "c_user_id" from user u left join children c on c.user_id = u.id WHERE u.age = ? LIMIT ? ``` - mybatis-plus-sample-active-record: ActiveRecord示例 了解即可 - mybatis-plus-sample-sequence: Sequence示例 - mybatis-plus-sample-execution-analysis: Sql执行分析示例 - mybatis-plus-sample-performance-analysis: 性能分析示例 ```java // 该插件 3.1.2 后版本废弃,推荐使用 // @Bean // public PerformanceInterceptor performanceInterceptor(){ // //启用性能分析插件 // return new PerformanceInterceptor(); // } ``` - mybatis-plus-sample-optimistic-locker: 乐观锁示例 - mybatis-plus-sample-sql-injector: 自定义全局操作示例 - mybatis-plus-sample-auto-fill-metainfo: 公共字段填充示例 - mybatis-plus-sample-logic-delete: 逻辑删除示例 - mybatis-plus-sample-multi-datasource: 多数据源示例 ```sql @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor(); dynamicTableNameInnerInterceptor.setTableNameHandler((sql, tableName) -> { // 获取参数方法 Map paramMap = RequestDataHelper.getRequestData(); paramMap.forEach((k, v) -> System.err.println(k + "----" + v)); String year = "_2018"; int random = new Random().nextInt(10); if (random % 2 == 1) { year = "_2019"; } return tableName + year; }); interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor); // 3.4.3.2 作废该方式 // dynamicTableNameInnerInterceptor.setTableNameHandlerMap(map); return interceptor; } ``` - mybatis-plus-sample-enum: 枚举注入示例 - mybatis-plus-sample-dynamic-tablename: 动态表名示例 - mybatis-plus-sample-tenant: 多租户示例 - mybatis-plus-sample-typehandler: 类型处理器示例,例如 json 字段对象转换 - mybatis-plus-sample-deluxe: 完整示例(包含 分页、逻辑删除、自定义全局操作 等绝大部分常用功能的使用示例,相当于大整合的完整示例) - mybatis-plus-sample-assembly: 分离打包示例 - mybatis-plus-sample-resultmap: 使用 resultMap 示例 - mybatis-plus-sample-id-generator: 自定义ID生成示例 - mybatis-plus-sample-id-string: 字符串ID生成示例 - mybatis-plus-sample-no-spring: 不使用spring下的示例 - mybatis-plus-sample-pagehelper: 使用pagehelper进行分页 - mybatis-plus-sample-association: 联表查询示例 ![微信 wx153666](https://images.gitee.com/uploads/images/2021/0903/235825_2d017339_12260.jpeg) - 可加作者,进入微信群