29 Star 97 Fork 16

baomidou / mybatis-plus4

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

Mybatis-Plus-Logo

Born To Simplify Development

maven code style Join the chat at https://gitter.im/baomidou/mybatis-plus

规划计划

输入图片说明

官方文档

企业版 Mybatis-Mate 高级特性

https://toscode.gitee.com/fhs-opensource/mybatis-plus-4.0-demo 可以通过此demo学习MP4的新特性。

maven坐标

因为MP4版本没有正式发布,故没有发布到包米豆的groupid下。
目前最新版本为4.0.5.

             <dependency>
                <groupId>com.fhs-opensource</groupId>
                <artifactId>mybatis-plus-annotation</artifactId>
                <version>${fhs.mp.version}</version>
            </dependency>
            <dependency>
                <groupId>com.fhs-opensource</groupId>
                <artifactId>mybatis-plus-advance</artifactId>
                <version>${fhs.mp.version}</version>
            </dependency>
            <dependency>
                <groupId>com.fhs-opensource</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>${fhs.mp.version}</version>
                <scope>compile</scope>
            </dependency>

            <dependency>
                <groupId>com.fhs-opensource</groupId>
                <artifactId>mybatis-plus-core</artifactId>
                <version>${fhs.mp.version}</version>
                <scope>compile</scope>
            </dependency>
            <dependency>
                <groupId>com.fhs-opensource</groupId>
                <artifactId>mybatis-plus-extension</artifactId>
                <version>${fhs.mp.version}</version>
            </dependency>

多表Join支持使用说明

mybatis的多表查询分为2个步骤,1是自定义多表的resultMap,2是写多表查询sql。MP的多表实现也是通过自动生成多表resultMap和自动生成多表查询SQL实现的。
1、准备2个po

@Data
@TableName(value="user",autoResultMap = true)
public class User {

   @TableId("user_id")
   private Integer userId;

   @TableField("name")
   private String name;

   @TableField("age")
   private Integer age;

   @TableField("sex")
   private String sex;

   //指定这个字段和School 的id字段关联,如果不是和id字段关联可以使用targetFields属性进行关联
   @TableField(value="school_id",target = School.class)
   private Integer schoolId;

   //如果是一对多的话使用ONE_TO_MANY并且指定targetClass
   @TableField(relation = Relation.ONE_TO_ONE)
   private School school;
}
@Data
@TableName(value="school",autoResultMap = true) //这里设置自动生成resultMap 不需要别的操作
public class School {
    @TableId
    private Integer id;

    @TableField("school_name")
    private String schoolName;

    @TableField("remark")
    private String remark;
}

2、启动join插件(不然返回结果映射会有问题,此插件动态修改resultMap)

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new JoinInterceptor());
        return interceptor;
    }

3、使用BasicJoinQueryWrapper (为po advance query预留的,不推荐开发者直接使用)

        BasicJoinQueryWrapper<User> wrapper = new BasicJoinQueryWrapper<>(User.class);
        wrapper.innerJoin(School.class);
        wrapper.eq(new BasicJoinQueryWrapper.ModelProperty(User.class,"schoolId"),1);
        wrapper.select(new BasicJoinQueryWrapper.ModelProperty(User.class,"schoolId"));
        wrapper.select(new BasicJoinQueryWrapper.ModelProperty(User.class,"userId"));
        wrapper.select(new BasicJoinQueryWrapper.ModelProperty(User.class,"name"));
        wrapper.select(new BasicJoinQueryWrapper.ModelProperty(School.class,"schoolName"));
        wrapper.select(new BasicJoinQueryWrapper.ModelProperty(School.class,"id"));
        wrapper.select(new BasicJoinQueryWrapper.ModelProperty(School.class,"remark"));
        mapper.selectList(wrapper);

po advance query写法 :

new User().select(User.SCHOOLID,User.USERID,User.NAME).userId().eq(1).innerJoin(School.class).orgName().like("一").select(School.ID,School.REMARK,School.SCHOOLNAME).list();

需要mybatis-plus-advance 依赖:https://gitee.com/baomidou/mybatis-plus-advance

3、使用LambdaJoinQueryWrapper

        LambdaJoinQueryWrapper<User> wrapper = new LambdaJoinQueryWrapper<>(User.class);
        wrapper.eq(User::getSchoolId,1);
        wrapper.innerJoin(School.class).like(School::getSchoolName,"一");
        mapper.selectList(wrapper);

函数支持

改动:在query接口中添加了selectFun方法,支持用户使用函数来查询字段,目前各类wrapper实现均已支持此查询

 Children selectFun(BaseFuncEnum fun,R alias,R column)

1、po上添加接收函数返回的字段

@TableField(exist = false,funField = true) //标记数据库不存在,并且是个函数字段
private Long schoolCount;

2、各类wrapper使用

// QueryWrapper
new QueryWrapper<User>().eq("school_id",2).select("school_id").selectFun(DefaultFuncEnum.COUNT,
                "schoolCount").groupBy("school_id")

// LambdaQueryWrapper
new LambdaQueryWrapper<User>().eq(User::getSchoolId,2)
                .select(User::getSchoolId).selectFun(DefaultFuncEnum.COUNT,User::getSchoolCount).groupBy(User::getSchoolId)

// QueryChainWrapper
QueryChainWrapper<User> wrapper = new QueryChainWrapper<User>(mapper);
wrapper.eq("school_id",2).select("school_id").selectFun(DefaultFuncEnum.COUNT,
                "schoolCount").groupBy("school_id").one()
// LambdaQueryChainWrapper
LambdaQueryChainWrapper<User> wrapper = new LambdaQueryChainWrapper<User>(mapper);
wrapper.eq(User::getSchoolId,2)              .select(User::getSchoolId).selectFun(DefaultFuncEnum.COUNT,User::getSchoolCount).groupBy(User::getSchoolId).one()

// BasicJoinQueryWrapper
 BasicJoinQueryWrapper<User> wrapper = new BasicJoinQueryWrapper<>(User.class);
wrapper.eq(new BasicJoinQueryWrapper.ModelProperty(User.class,"schoolId"),2);
wrapper.select(new BasicJoinQueryWrapper.ModelProperty(User.class,"schoolId"));
wrapper.selectFun(DefaultFuncEnum.COUNT,new BasicJoinQueryWrapper.ModelProperty(User.class,"schoolCount"));
wrapper.groupBy(new BasicJoinQueryWrapper.ModelProperty(User.class,"schoolId"));

// LambdaJoinQueryWrapper
LambdaJoinQueryWrapper<User> wrapper = new LambdaJoinQueryWrapper<>(User.class);
wrapper.eq(User::getSchoolId,2);
wrapper.select(User::getSchoolId);
wrapper.selectFun(DefaultFuncEnum.COUNT,User::getSchoolCount);
wrapper.groupBy(User::getSchoolId);

批量插入支持说明

1.目前已经支持的数据库有:mysql,oracle,postgresql,sqlserver 2.序列自增配置:

    /**
     * Postgre 主键生成器
     * @return
     */
    @Bean
    public IKeyGenerator keyGenerator() {
        return new PostgreKeyGenerator(); // oracle和Postgre 序列生成主键都已经支持
    }
    /**
     * 序列自增插件
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
		//需要依赖此拦截器
        interceptor.addInnerInterceptor(new KeyGeneratorInterceptor());
        return interceptor;
    }

3.数据库类型配置(也可以配置到@tablename注解里,注解优先于全局配置)

mybatis-plus:
  global-config:
    db-config:
      # 数据库类型
      db-type: mysql

批量修改支持说明

1.目前已经支持的数据库有:mysql,oracle,postgresql 2.已知问题-oracle返回的受影响行数不对

前端高级查询API

后端在参数中配置一个QueryFilter,QueryFilter 提供一个asWrapper方法可以把前端的过滤条件包装为一个QueryWrapper

    @PostMapping("list")
    public List<User> filter(@RequestBody QueryFilter<User> filter){
		//注意sex和age是安全字段,就算前端传了也不会拼接这2个字段的过滤条件。
        return mapper.selectList(filter.asWrapper(User.class,"sex","age"));
    }

前端按照指定格式传参,即可实现后端不做多余编程前端自由控制过滤条件的效果。

{
   "sorter":[{//排序支持ASC和DESC
       "property":"userId",
       "direction":"DESC"
   }],
   "querys":[{//过滤条件 where sex=男 and (name=张三 or name=李四 )
         "property":"name", // po字段名
         "operator":"=",//操作符 
         "value":"张三",//操作值
         "relation":"OR",//关联关系AND OR
         "group":"nameGroup"//相同的group 外层会加括号
   },
   {
         "property":"name",
         "operator":"=",
         "value":"李四",
         "relation":"OR",
         "group":"nameGroup"
   },{
         "property":"sex", //使用了默认的关联关系AND 以及默认操作符 =
         "value":"男"
   }]
}

操作符支持:支持 = > >= < <= like like_l like_r not_like is_null not_null in not_in between not_between 等常见操作 如果是in 等操作 value支持数组传参 本功能暂定在https://gitee.com/baomidou/mybatis-plus-advance 包中

空文件

简介

mybatis-plus 4.0 临时仓库 展开 收起
Java 等 2 种语言
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/baomidou/mybatis-plus4.git
git@gitee.com:baomidou/mybatis-plus4.git
baomidou
mybatis-plus4
mybatis-plus4
master

搜索帮助