MyBatisPlus实现连表操作、批量处理

编程入门 行业动态 更新时间:2024-10-22 13:51:29

MyBatisPlus实现连表操作、<a href=https://www.elefans.com/category/jswz/34/1770428.html style=批量处理"/>

MyBatisPlus实现连表操作、批量处理

1、实现连表查询 

正常来说单靠mybatisplus无法实现连表查询,只能靠单表sql然后进行拼接形成连表查询,或者使用xml文件去编写sql语句来实现连表查询。但他又给我们提供了一个插件MyBatis-Plus-Join,用来弥补mybatisplus再连表上的不足,写法和之前的用法没有太多差别。

我们要使用这个工具首先要引入他的依赖;

        <dependency><groupId>com.github.yulichang</groupId><artifactId>mybatis-plus-join-boot-starter</artifactId><version>1.4.4.1</version></dependency>

 

和普通的mybatisplus不同,他的mapper层继承的不是BaseMapper接口,而是MPJBaseMapper接口。

 

在server层的编写就是:

这个方法中一共涉及到两个表,user表和user_role表,然后就是查询出roleId为1的用户信息。

user表:         user_role表 :

@Overridepublic Page<UserPo> selectByRoleName(Integer pageNum, Integer pageSize) {Page<UserPo> userPoPage = userMapper.selectJoinPage(new Page<>(pageNum, pageSize, true), UserPo.class, new MPJLambdaWrapper<UserPo>().selectAll(UserPo.class).innerJoin(UserRolePo.class, UserRolePo::getUserId, UserPo::getUserId).eq(UserRolePo::getRoleId, role.getRoleId()));return userPoPage;}

再这个里面我使用了分页查询,可以看出和以前用mybatisplus的分页查询没有什么区别。 

执行的SQL语句:

具体关于MyBatis-Plus-Join这个插件的使用,大家可以去官网看看,里面的使用方法介绍一目了然,还有样例使用: MyBatis-Plus-Join

2、实现批量操作

        实现批量操作的话使用的是IService 类提供的 saveBatch 方法,来实现批量数据的插入功能,想要使用这个方法,和平常我们继承的东西不同。当然用这个接口里的方法不是真正的批量操作,实际上还是进行的一条一条sql的操作,比起真正的批量操作还是效率低一些。

Mapper层:    

我们先创建一个Mapper窗口继承BaseMapper接口。

 

Server层: 

接口要实现IService接口,然后实现类要继承ServiceImpl类和实现所对应的接口

这两三个地方都弄好之后我们就可以再Service实现类SignInServerImpl 中进行业务的编写了。

 
@Service
public class SignInServerImpl extends ServiceImpl<SignInMapper, SignInPo>implements ISignInServer {/*** 往签到表里插入这个班里所有的学生* @param listSignPo* @return {@link Boolean}*/@Overridepublic Boolean insertAllClassmate(List<SignPo> listSignPo) {return this.saveBatch(listSignPo);}/*** 批量修改签到表里这个课的学生的签到状态和结束这个课* @param listSignPo* @return {@link Boolean}*/@Overridepublic Boolean signInOne(List<SignInDto> signInDtos) {List<SignInPo> list = new LinkedList<>();for (int i = 0; i < signInDtos.size(); i++) {SignInPo signInPo = new SignInPo();signInPo.setId(signInDtos.get(i).getSignId());signInPo.setIsSignIn(signInDtos.get(i).getIsSigIn());signInPo.setIsClassing(0);list.add(signInPo);}return this.updateBatchById(list);}
}

 这是执行所打印的sql,可以看出执行的并不是批量插入的sql语句。而是一条一条的往外差人

 

更多推荐

MyBatisPlus实现连表操作、批量处理

本文发布于:2023-12-06 19:25:58,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1668567.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:批量   操作   MyBatisPlus

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!