Mybatis-plus及QueryWrapper使用

本文主要整理了在使用过程中解决遇到的问题的参考文章

一、mybatis-plus源码

源码

二、注解

详解

注解说明
1.@TableName表名注解,标识实体类对应的表
2.@TableId主键注解
3.IdTypeid赋值的形式,自增或输入或算法
4.@TableField字段注解,非主键
5.FieldStrategy字段策略,非null,非空,不加入sql,忽略判断等
6.FieldFill字段填充策略,插入时填充,更新时填充,都填充
7.@Version乐观锁注解
8.@EnumValue当实体类的属性是普通枚举,且是其中一个字段,使用该注解来标注枚举类里的那个属性对应字段
9.@TableLogic表字段逻辑处理注解(逻辑删除)
10.@SqlParser (opens new window)
11.@KeySequence序列主键策略
12.@InterceptorIgnore内置插件的一些过滤规则
13.@OrderBy自动排序,用法与SpringDtaJpa的OrderBy类似,在执行MybatisPlus的方法selectList(),Page()等非手写查询时自动带上.

注意,如果一个对象的各个属性先有值,然后再修改,去除值,保存。再次打开,值不变。
因为,默认机制会过滤掉null值的字段,所以不会保存新的空值。此时可以通过在实体类需要插入null值的字段上加上@TableField(updateStrategy = FieldStrategy.IGNORED)解决

三、BaseMapper

源码
详解
特别地,apply可以用于函数的使用
apply
踩坑如下:

SELECT COUNT(1) FROM order WHERE to_days(create_time) = ?
Parameters: to_days(NOW())(String)
此时获取不到数据,是因为传入的参数当做String类型传入的,并不是一个函数,类似添加了""拼接成字串
这是因为querywrapper使用的是eq函数,可以改为使用apply函数,修改后解决!
原:queryWrapper.eq("to_days(create_time)","to_days(NOW())");
现:queryWrapper.apply("to_days(create_time)=to_days(NOW())");

四、QueryWrapper构造器

4.1参考

详解
实例

4.2完整使用过程

//controller层
QueryWrapper<User> queryWrapper = QueryGenerator.initQueryWrapper(user, req.getParameterMap());
queryWrapper.between("age",begin,end);

如果req中传来的参数需要做一些修改,比如查询时用到了表的别名,或者传来的参数不是表中的字段,或者不希望带入该条件查询,可以做如下修改

Map<String, String[]> parameterMap=new HashMap(req.getParameterMap());
parameterMap.remove(QueryGenerator.ORDER_COLUMN);
parameterMap.remove(QueryGenerator.ORDER_TYPE);
QueryWrapper<Video> queryWrapper = QueryGenerator.initQueryWrapperCode(user, parameterMap);

'IService’层

List<User>  getUserList(QueryWrapper<User> queryWrapper);

Service层

@Override
public List<User> getUserList(QueryWrapper<User> queryWrapper) {
    return userMapper.getUserList(queryWrapper);
}

Mapper层

import com.baomidou.mybatisplus.core.toolkit.Constants;//导类

@Select("SELECT * from sys_user ${ew.customSqlSegment}")
List<User> getUserList(@Param(Constants.WRAPPER) Wrapper ew);    //参数接收固定写法

注意,ew.customSqlSegment获取的值自带where,ew.sqlSegment值不包括WHERE字符串
ew其实就是mapper方法里的@Param(Constants.WRAPPER) Wrapper query对象,Constants.WRAPPER的值就是ew。

如果出现service层调用mapper层报错,且方法名参数都正确,请确认service的QueryWrapper导入的包是“com.baomidou.mybatisplus.core.conditions.query.QueryWrapper”,mapper层导入的包是“com.baomidou.mybatisplus.core.conditions.Wrapper”。

带分页:

//mapper
List<Vedio> queryCountList(Page<Vedio> page,
							@Param(Constants.WRAPPER) Wrapper ew,
							@Param("buyUser")String buyUser);

//Service
@Override
public Page<Vedio> queryCountList(Page<Vedio> page, QueryWrapper<Vedio> queryWrapper,String buyUser) {
    return page.setRecords(mapper.queryCountList(page,queryWrapper,buyUser));
}

//IService
Page<Vedio> queryCountList(Page<Vedio> page, QueryWrapper<Vedio> 
							queryWrapper,String buyUser);


//controller
@GetMapping(value = "/countList")
     public Result<IPage<Vedio>> queryCountList(Vedio vedio,
                             @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
                             @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
                             HttpServletRequest req) {
	Result<Page<Vedio>> result = new Result<Page<Vedio>>();
	Page<Vedio> pageList = new Page<Vedio>(pageNo,pageSize);
	QueryWrapper<Vedio> queryWrapper= QueryGenerator.initQueryWrapperCode();
	if(StringUtils.isNotEmpty(vedio.getCode())){
	    queryWrapper.like("f.code",vedio.getCode());
	}
	queryWrapper.orderByDesc("f.apply_time");
	pageList=service.queryCountList(pageList,queryWrapper,buyUser);
	List<Vedio> list=pageList.getRecords();
	result.setResult(pageList);
	return Result.OK(pageList);
}

4.3数据类型

在使用querywrapper进行查询时会动态的构建查询条件,对于字符类型的空值,会将其直接过滤,查询有给定值得字段,而对于常用的几个数值类型如int,double,float类型,会默认为0,查询的时候会查询该字段为0的数据。对于这种数值类型应该使用Integer,Double,Float等包装类型,这样才会正常进行查找

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Mybatis-Plus是一个优秀的ORM框架,它在MyBatis的基础上进行了功能扩展和优化,并且针对常见的业务场景提供了常用的解决方案。其中,QueryWrapperMybatis-Plus提供的查询构造器,支持多条件查询、排序、分页等功能。QueryWrapper多条件排序功能可以在查询时根据多个条件对结果进行排序。例如,我们可以通过QueryWrapper的order()方法来设置排序规则: QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper .eq("sex", 1) .ge("age", 18) .orderByAsc("age") //按照年龄升序排序 .orderByDesc("create_time"); //按照创建时间降序排序 在上述代码中,我们通过eq()方法设置性别为男性,通过ge()方法设置年龄大于等于18岁,然后通过orderByAsc()方法设置按照年龄升序排序,最后通过orderByDesc()方法设置按照创建时间降序排序。这样,最终查询结果会按照这两个条件的要求进行排序。 总之,Mybatis-PlusQueryWrapper多条件排序功能可以方便地实现排序需求,提高查询效率,为开发者提供了更加便捷的操作方式。 ### 回答2: mybatis-plus是一款基于mybatis的增强工具,可以简化mybatis的开发过程。mybatis-plus中提供了querywrapper多条件排序的功能,可以方便地对数据库进行多条件排序,实现数据的有序展示。 使用mybatis-plusquerywrapper进行多条件排序很简单,只需按照以下步骤进行操作: 1.创建querywrapper对象 在使用mybatis-plus查询时,需要通过querywrapper对象来添加查询条件。创建querywrapper对象非常简单,只需要调用QueryWrapper的静态方法就可以了: QueryWrapper<Entity> wrapper = new QueryWrapper<>(); 2.添加查询条件 除了添加查询条件之外,querywrapper还可以添加排序方式。多条件排序可以在wrapper对象中添加多个排序规则,每个排序规则可以指定一个字段和一个排序方向。例如,以下代码添加了两个排序规则,分别按照age和name字段进行升序排序: wrapper.orderByAsc("age", "name"); 3.执行查询操作 最后使用mybatis-plus提供的基本查询方法执行查询操作,例如selectList(),selectOne(),selectPage()等方法。 总之,mybatis-plus自带querywrapper多条件排序的功能可以大大简化复杂的多条件查询操作,提高了开发效率,也方便了数据的有序展示。在实际应用中,开发人员可以根据自己的需要灵活地使用这个功能。 ### 回答3: MyBatis-PlusMyBatis的一个增强工具包,它提供了许多实用的功能,使得MyBatis编写SQL语句更加简单方便。其中,QueryWrapperMyBatis-Plus提供的一个查询条件构建器,它可以方便地构建各种复杂的查询条件。 QueryWrapper提供了多种方法来构建查询条件,其中包括eq、ne、gt、lt、ge、le等基本的比较操作,也包括like、in、between等高级操作。同时,QueryWrapper还支持链式调用,可以方便地组合多个查询条件。 在多条件排序方面,QueryWrapper也提供了多种方法。其中,orderByAsc和orderByDesc方法可以分别按照升序和降序进行排序,而orderBy方法则可以按照自定义的排序规则进行排序。同时,orderBy方法还支持链式调用,可以方便地组合多个排序规则。 除了QueryWrapperMyBatis-Plus还提供了LambdaQueryWrapper,它可以使用Lambda表达式来构建查询条件,使得代码更加简洁易懂。LambdaQueryWrapper也支持多条件排序,使用方式与QueryWrapper类似。 总之,MyBatis-Plus提供了方便、实用的QueryWrapper查询条件构建器,提供了多种方法来构建查询条件和排序规则,使得MyBatis编写SQL语句更加简单高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值