代码拉取完成,页面将自动刷新
同步操作将从 baomidou/mybatis-plus4 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
Born To Simplify Development
规划计划
1、准备2个po
@Data
@TableName(value="user")
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;
//指定关联关系,和目标类 如果是 onetoone 则不需要指定target
@TableField(relation = Relation.ONE_TO_MANY,target = School.class)
List<School> schools;
}
@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
// 如果在join后想返回主表就需要 end(主表.class)
LambdaJoinQueryWrapper<User> wrapper = new LambdaJoinQueryWrapper<>(User.class);
wrapper.eq(User::getSchoolId,1);
wrapper.innerJoin(School.class).like(School::getSchoolName,"一");
mapper.selectList(wrapper);
// 或者
wrapper.eq(User::getSchoolId,1)
.innerJoin(School.class,School::getId,User::getSchoolId)
.like(School::getSchoolName,"一");
// 或者 这种方式不用end
wrapper.eq(User::getSchoolId,1)
.innerJoin(School.class,School::getId,User::getSchoolId,w -> {
w.like(School::getSchoolName,"一");
})
// 等于 =
eq(boolean condition, SFunction<T, Object> column, SFunction<J, Object> val)
// 不等于 <>
ne(boolean condition, SFunction<T, Object> column, SFunction<J, Object> val)
// 大于 >
gt(boolean condition, SFunction<T, Object> column, SFunction<J, Object> val)
// 大于等于 >=
ge(boolean condition, SFunction<T, Object> column, SFunction<J, Object> val)
// 小于 <
lt(boolean condition, SFunction<T, Object> column, SFunction<J, Object> val)
// 小于等于 <=
le(boolean condition, SFunction<T, Object> column, SFunction<J, Object> val)
// BETWEEN 值1 AND 值2
between(boolean condition, SFunction<T, Object> column, SFunction<J, Object> val1, SFunction<J2, Object> val2)
// NOT BETWEEN 值1 AND 值2
notBetween(boolean condition, SFunction<T, Object> column, SFunction<J, Object> val1, SFunction<J2, Object> val2)
eq(School::getId,User::getSchoolId)
生成的SQL就是 school.id = user.school_id 其他同理
改动:在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);
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。