mybatis-plus的一些使用案例

这篇具有很好参考价值的文章主要介绍了mybatis-plus的一些使用案例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【1】queryWrapper的eq忽略字段的大小写

(1)需求分析
在创建和修改的时候,需要判断库名是否重复,而库名是全英文,所以要忽略字母大小写,大小写不同被认为是相同的字母

(2)解决思路
把数据库里的字段,还有要查的条件字段,都转成小写或者大写,然后再判断是否相同

(3)代码案例

@Override
public int checkName(String schemaNm, Long id) {
    // 使用QueryWrapper查询,忽略库名大小写
    return (int) super.count(new QueryWrapper<DbXClusterPO>()
            .eq("LOWER(SCHEMA_NM)", schemaNm.toLowerCase())
            .ne(id != null, "id", id));
}

【2】分页查询

(1)案例一

(1)Api接口层
参数为Pagination,返回结果为ApiPageResponse

@GetMapping(value = "/list")
@Operation(summary = "分页查询评审项目", description = "分页查询评审项目")
public ApiPageResponse<ReviewProjQueryPageResponse> query(@Valid Pagination  pagination, @Valid  ReviewProjQueryRequest queryRequest) {
    return reviewProjAppService.query(pagination, queryRequest);
}

(2)应用业务层

ApiPageResponse<ReviewProjQueryPageResponse> query(Pagination pagination, ReviewProjQueryRequest  queryRequest) {
    // 调用评审项目读模型资源库分页查询
    List<ReviewProjQueryPageResponse> list = reviewProjService.query(pagination,  queryRequest);
    return ApiPageResponse.ok(pagination, list);
}

(3)

public List<ReviewProjQueryPageResponse> query(Pagination pagination, ReviewProjQueryRequest queryRequest) {
	List<ReviewProjQueryPageResponse> list = reviewProjReadModelRepo.query(pagination, queryRequest);
	return list;
}

(4)

List<ReviewProjQueryPageResponse> query(Pagination pagination, ReviewProjQueryRequest queryRequest);

(5)

@Override
public List<ReviewProjQueryPageResponse> query(Pagination pagination,  ReviewProjQueryRequest queryRequest) {
    Page<ReviewProjQueryPageResponse> page = getBaseMapper().getByPage(Page.of(pagination.getPageNumber(), pagination.getPageSize()),  queryRequest);
    pagination.setTotal(page.getTotal());
    return page.getRecords();
}

(6)

Page<ReviewProjQueryPageResponse> getByPage(Page page, ReviewProjQueryRequest request);

(7)

<select id="getByPage" parameterType="com.nbcb.bids.workspace.application.api.request.ReviewProjQueryRequest" resultMap="responseResult">
    SELECT
    <include refid="responseColumn"></include>
    FROM
    review_proj T
    <where>
        1=1
        <if test=" request.projId != null and request.projId !=''">
            AND T.PROJ_ID = #{request.projId}
        </if>
        <if test=" request.projId == null or request.projId ==''">
            AND T.PROJ_ID is NULL
        </if>
        <if test=" request.proj != null and request.proj != ''">
            AND T.PROJ like '%${request.proj}%'
        </if>
        <if test=" request.projType != null and request.projType != ''">
            AND T.PROJ_TYPE like '%${request.projType}%'
        </if>
    </where>
</select>

(2)案例二

除了使用xml配置的sql来实现自定义逻辑sql以外,还可以使用mybatis-plus提供的包装类条件查询,这里就不像案例一使用getBaseMapper().getByPage了

@Override
public List<ProjXDbQueryResponse> query(Pagination pagination, ProjXDbQueryRequest queryRequest) {
    // 构造查询条件
    LambdaQueryWrapper<ProjXDbPO> lambdaQueryWrapper = Wrappers.lambdaQuery();


    // 如果 工程id 不为空
    if (ObjectUtils.isNotEmpty(queryRequest.getProjId())) {
        lambdaQueryWrapper.eq(ProjXDbPO::getProjId, queryRequest.getProjId());
    }
    // 如果 数据库名 不为空
    if (ObjectUtils.isNotEmpty(queryRequest.getSchemaNm())) {
        lambdaQueryWrapper.eq(ProjXDbPO::getSchemaNm, queryRequest.getSchemaNm());
    }


    // 默认按照主键倒序排序
    lambdaQueryWrapper.orderByDesc(ProjXDbPO::getId);


    // 分页查询
    Page<ProjXDbPO> page = super.page(Page.of(pagination.getPageNumber(),
            pagination.getPageSize()), lambdaQueryWrapper);
    pagination.setTotal(page.getTotal());
    // 工程数据库关系表持久化对象 转 工程数据库关系表查询响应对象
return projXDbPOAssembler.toQueryResponse(page.getRecords());
}

(3)案例三

(1)

@GetMapping(value = "/myTaskList")
@Operation(summary = "分页查询我的开发任务", description = "分页查询我的开发任务")
public ApiResponse<IPage<DevelopTaskQueryResponse>> query(@Valid Pagination pagination, @Valid DevelopTaskQueryRequest queryRequest) {
    PageSearchRequest<DevelopTaskQueryRequest> request = new PageSearchRequest<>();
    request.setPageSize(pagination.getPageSize());
    request.setPageNum(pagination.getPageNumber());
    request.setSearch(queryRequest);
    return developTaskAppService.query(request);
}

(2)

public ApiResponse<IPage<DevelopTaskQueryResponse>>  query(PageSearchRequest<DevelopTaskQueryRequest> request) {
    // 调用开发任务表读模型资源库分页查询
    return ApiResponse.ok(developTaskService.query(request));
}

(3)

public IPage<DevelopTaskQueryResponse>  query(PageSearchRequest<DevelopTaskQueryRequest> request) {
    //获取当前登陆人
    IPage<DevelopTaskQueryResponse> page = null;
    page = developTaskRepo.selectTaskList(request.getPage(),  request.getSearch());
    List<DevelopTaskQueryResponse> list = page.getRecords();
    return page;
}

(4)

IPage<DevelopTaskQueryResponse> selectTaskList(IPage<Object> page, DevelopTaskQueryRequest param);

(5)

@Override
public IPage<DevelopTaskQueryResponse> selectTaskList(IPage<Object> page,  DevelopTaskQueryRequest param) {
    return super.baseMapper.selectTaskList(page, param);
}

(6)

IPage<DevelopTaskQueryResponse> selectTaskList(IPage<Object> page, @Param("param") DevelopTaskQueryRequest param);

(7)接下来就又是xml配置sql了

【3】mybatis-plus使用updateBatchById()方法无法更新为null的字段

(1)需求分析
当我使用mybatisplus的updateBatchById方法时,我将表的某一个属性值赋null,然后调用updateBatchById方法,返回true,去数据库一查数据,却发现数据还是原来的值,并没有被更新为null。

该问题其实是MyBatis-Plus对字段的验证策略导致的,MyBatis-Plus默认进行了不是全量更新的策略,如果对某字段赋值为null了,那么updateBatchById()更新时自动忽略该字段。

(2)解决思路
解决方法就是通过注解来去掉忽略,但是由于MyBatis-Plus版本更新,因此不同版本使用的注解形式不同。

1-3.1.2版本之前使用: @TableField(strategy = FieldStrategy.IGNORED)
2-3.1.2版本后使用:@TableField(updateStrategy = FieldStrategy.IGNORED)

(3)代码案例

@TableField(value = "DOMAIN_ID", updateStrategy = FieldStrategy.IGNORED, jdbcType = JdbcType.VARCHAR)
private Long domainId;

【4】LambdaQueryWrapper使用or逻辑

(1)使用or

在使用MyBatis-Plus的LambdaQueryWrapper时,可以使用or逻辑来构建多个条件之间的“或”关系。

以下是一个示例代码:

LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(User::getAge, 20)
        .or()
        .eq(User::getGender, "female");

List<User> userList = userMapper.selectList(queryWrapper);

在上述示例中,我们创建了一个LambdaQueryWrapper对象,并使用eq方法设置了一个查询条件,即年龄等于20。接着使用or方法,表示下一个条件与前一个条件之间的关系是“或”。然后使用eq方法设置了第二个查询条件,即性别等于"female"。最后通过selectList方法执行查询,将符合条件的用户列表返回。

这样构建的查询条件将会生成类似于以下SQL语句:

SELECT * FROM user WHERE age = 20 OR gender = 'female';

通过使用or方法,可以在LambdaQueryWrapper中构建多个条件之间的“或”关系,从而实现更灵活的查询。

(2)使用or之后接and和括号

例如,我们有以下的查询需求:查询年龄大于 18 岁并且性别为男性或者职业为工程师的用户。可以使用 lambdaQueryWrapper 进行如下的条件构造:

LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.gt(User::getAge, 18)
        .and(wrapper -> wrapper.eq(User::getGender, "男性")
                .or()
                .eq(User::getOccupation, "工程师"));

在这个例子中,使用了两边加括号的方式将 eq(User::getGender, “男性”).or().eq(User::getOccupation, “工程师”) 部分括起来,表示这部分条件是一个整体,它与年龄大于 18 岁的条件使用 and 连接起来。文章来源地址https://www.toymoban.com/news/detail-645844.html

(3)使用or之后接and和括号,且设置非空前提判断

LambdaQueryWrapper<ProjMemberPO> objectLambdaQueryWrapper =  Wrappers.lambdaQuery();
List<ProjMemberPO> projMemberPOS =  projMemberMapper.selectList(objectLambdaQueryWrapper
        .eq(ProjMemberPO::getProjId, Long.parseLong(projId))
        .eq(domainId != null, ProjMemberPO::getDomainId, domainId)
        .and(userNmOrAcct !=  null,qw->qw.like(ProjMemberPO::getProjMemberNm,userNmOrAcct).or().like(ProjMemberPO::getLoginAcct,userNmOrAcct))
);

到了这里,关于mybatis-plus的一些使用案例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mybatis-plus分页total为0,分页失效,mybatis-plus多租户插件使用

    背景:项目使用mybatis分页插件不生效,以及多租户使用时读取配置异常 多租户插件使用遇到的问题: 最开始在MyTenantLineHandler中使用 @Value(\\\"${tables}\\\"),服务启动时能从配置中心拉取到配置,但在运行时获取到的值为空,试了很多方法都不生效,后面将配置中心的配置在调用My

    2024年02月06日
    浏览(52)
  • Mybatis-plus的使用

    Mybatis-plus的使用 一、简介 Mybatis-plus的基于mybatis的,简化了单表mybatis的操作。 注意:它并没有提升性能,只是简化了开发过程。 二、在springboot中的基本使用 1、导入依赖 2、添加相应的数据库配置(application.properties) 3、在Application类上添加dao接口的路径扫描 4、编写实体类

    2024年02月09日
    浏览(42)
  • Mybatis-plus框架使用配置

    MyBatis-Plus(简称 MP)是一个基于 MyBatis 的增强工具,它对 Mybatis 的基础功能进行了增强,但未做任何改变。使得我们可以可以在 Mybatis 开发的项目上直接进行升级为 Mybatis-plus,正如它对自己的定位,它能够帮助我们进一步简化开发过程,提高开发效率。 Mybatis-Plus 其实可以看

    2024年02月09日
    浏览(39)
  • Mybatis-Plus使用方法

    MyBatis-Plus 提供了丰富的增强版的 CRUD 方法,使得开发者能够更简洁、高效地进行数据库操作。以下是如何使用 MyBatis-Plus 自带的增强版 CRUD 方法的基本步骤: 添加依赖 首先,确保你的 Maven 项目中已经添加了 MyBatis-Plus 的相关依赖,包括核心依赖和数据库驱动依赖。 xml复制代

    2024年04月11日
    浏览(46)
  • mybatis-plus与mybatis同时使用别名问题

    在整合mybatis和mybatis-plus的时候发现一个小坑,单独使用mybatis,配置别名如下: XML映射文件如下: 单元测试发现没有问题 添加mybatis-plus依赖后,单元测试报错: 显示无法解析XML映射文件中的student 解决办法:要把配置文件里的别名配置改成mybatis-plus的配置,如下: 区别

    2024年04月13日
    浏览(40)
  • 使用Mybatis-Plus问题解答

    我们使用一个新的框架难免会遇到各种问题,当然使用这款国产的优秀的Mybatis-Plus框架也不例外,下面我就给大家列举一下使用Mybatis-Plus可能遇到的一些问题,并做一下一一的解答。 1:如何排除非表的字段 (这个问题一定要注意,我们Java中写的Entity类的属性是和表的字段一

    2024年02月08日
    浏览(40)
  • 使用Mybatis-plus清空表数据

    方法一:  方法二: 直接使用自带的remove接口 ,同时使用QueryWrapper参数如: 引申一下 Mybatis-plus这个好用的框架: 我们知道 MyBatis 是一个基于 java 的持久层框架,它内部封装了 jdbc,极大提高了我们的开发效率。 但是使用 Mybatis 开发也有很多痛点: 每个 Dao 接口都需要自己

    2023年04月09日
    浏览(37)
  • Mybatis-Plus 使用隐患,太坑了!

    作者:糊涂码 链接:https://juejin.cn/post/7156428078061895710 MP 从出现就一直有争议 感觉一直 都存在两种声音 很方便啊 通过函数自动拼接Sql 不需要去XML 再去使用标签 之前一分钟写好的Sql 现在一秒钟就能写好 简直不要太方便 侵入Service层 不好维护 可读性差 代码耦合 效率不行

    2024年02月05日
    浏览(83)
  • mybatis-plus使用updateBatchById小记

    过程  staff_info表里,我通过sql把entry_time字段先设置成2,然后再通过代码设置成0,设置成2的时候一共有483条数据,然后通过代码修改的时候,我把number=0132791的数据设置成null,即更新这一条数据肯定会报错,通过debug我知道number=2这条数据在更新的list中处于index=141的位置,所

    2024年02月12日
    浏览(45)
  • SpringBoot(整合MyBatis + MyBatis-Plus + MyBatisX插件使用)

    1.需求分析 2.数据库表设计 3.数据库环境配置 1.新建maven项目 2.pom.xml 引入依赖 3.application.yml 配置数据源 数据库名 用户名 密码 驱动是mysql8的(因为上面使用了版本仲裁) 4.Application.java 编写启动类 5.测试 6.配置类切换druid数据源 7.测试数据源是否成功切换 4.Mybatis基础配置 1

    2024年03月20日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包