美文网首页
MybatisPlus学习笔记(八)------通用servic

MybatisPlus学习笔记(八)------通用servic

作者: 夜一先生 | 来源:发表于2020-01-20 16:52 被阅读0次

本章目录

  • 基本方法
  • 批量操作方法
  • 链式调用方法

1. 基本方法

(1).新建MemberService接口文件继承MP提供的IService<T>接口。

public interface MemberService extends IService<Member> {

}

(2).新建MemberServiceImpl文件继承MP提供的ServiceImpl类并实现第一步创建的MemberService接口。

@Service
public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> implements MemberService {

}

(3).新建controller类进行测试。

@RestController
public class ServiceTestController {

    @Autowired
    private MemberService memberService;

    @RequestMapping("/getOne")
    public Result getOne() {
        Member member = memberService.getOne(new QueryWrapper<Member>().like("state", 1), false);
        return ResultUtil.success(member);
    }

}

:controller中使用@Autowired注入定义的MemberService接口,MP的通用service接口IService中也提供了许多方法,这里以getOne方法来演示,该方法就是获取查询数据中的第一条数据,第二个参数默认为true,为true时如果查询出的结果大于1一条程序会报错,这里的getOne方法与mapper中的getOne方法有些不同,当第二个参数为false时与mapper中的一样,当获取的数据大于等于一条时,只取第一条数据,控制台会有警告。

2. 批量操作方法

(1).saveBatch批量添加方法

@RequestMapping("/batch")
    public Result batch() {
        Member member = new Member();
        member.setName("李莉");
        member.setPassword("123131");

        Member member1 = new Member();
        member1.setName("李力");
        member1.setPassword("123131");

        List<Member> members = Arrays.asList(member, member1);

        boolean saveBatch = memberService.saveBatch(members);

        return ResultUtil.success(saveBatch);
    }
image
:上图中可以看到批量添加两条数据成功,批量操作方法返回的是布尔类型。

(2).saveOrUpdateBatch批量添加更新操作

@RequestMapping("/saveOrUpdateBatch")
    public Result saveOrUpdateBatch() {
        Member member = new Member();
        member.setName("李莉1");
        member.setPassword("123131");

        Member member1 = new Member();
        member1.setId(1216942918258937860L);
        member1.setName("李莉2");
        member1.setPassword("123167");

        List<Member> members = Arrays.asList(member, member1);

        boolean saveBatch = memberService.saveOrUpdateBatch(members);

        return ResultUtil.success(saveBatch);
    }
image
:该方法是进行批量添加,如果查询到已存在的id则对该条数据进行更新操作。member为新对象会进行添加操作,member1设置的id是上个方法中添加成功的一条数据id,并设置了name与之前数据不同,这条数据则会进行更新操作,批量操作方法返回的是布尔类型。该方法默认是一次插入1000条,还有个两个参数的方法,可设置每次插入的条数。

3. 链式调用方法

MP提供的service链式调用方法很简单,代码如下:

@RequestMapping("/lambdaChain")
    public Result lambdaChain() {
        List<Member> memberList = memberService.lambdaQuery()
                .eq(Member::getState, 1)
                .like(Member::getSuperId, 1)
                .list();

        return ResultUtil.success(memberList);
    }

:查询方法使用lambdaQuery,通过链式调用设置注入的sql进行查询,通过调用list()方法返回查询集合。

@RequestMapping("/lambdaChain1")
    public Result lambdaChain1() {
        boolean update = memberService.lambdaUpdate()
                .eq(Member::getName, "李莉1")
                .set(Member::getState, 1).set(Member::getSuperId, 1)
                .set(Member::getCreateTime, LocalDateTime.now())
                .update();

        return ResultUtil.success(update);
    }

:更新方法使用lambdaUpdate,通过链式调用设置注入的sql,再使用update()方法进行更新操作,返回的是布尔类型,当更新操作的影响行大于0时为true更新成功。

@RequestMapping("/lambdaChain2")
    public Result lambdaChain2() {
        boolean remove = memberService.lambdaUpdate()
                .eq(Member::getName, "李莉2")
                .remove();

        return ResultUtil.success(remove);
    }

:lambdaUpdate方法中还有个remove删除方法,通过lambdaUpdate链式调用设置注入的sql后,再调用remove方法可实现删除操作,返回布尔类型true为删除成功。

==这里衍生一个问题:==

mybatisPlus为什么将批量操作写在service层?

官方回答是:因为sql长度有限制,海量数据量单条sql无法执行,就算可执行也容易引起内存泄漏、jdbc连接超时等,不同数据库对单条sql批量语法不一样,出于通用,现在的解决方案就是循环预处理,批量提交。虽然性能比单条sql慢,但可以解决以上问题。

本篇文章由一文多发平台ArtiPub自动发布

相关文章

  • MybatisPlus学习笔记(八)------通用servic

    本章目录 基本方法批量操作方法链式调用方法 1. 基本方法 (1).新建MemberService接口文件继承MP...

  • MyBatisPlus学习整理

    本文是通过慕课网相关课程学习MyBatisPlus整理的笔记。MyBatisPlus入门 : - ) 老师讲的...

  • MybatisPlus使用

    小技巧 01 在mapper.xml中写sql并且需要使用mybatisplus中得分页插件时,可以在servic...

  • MybatisPlus学习笔记

    一、MybatisPlus简介 1.1.简介 Mybatis-Plus(简称MP)是一个 Mybatis 的增强工...

  • MybatisPlus学习笔记(九)------MybatisP

    代码生成器 MybatisPlus与Mybatis的代码生成器对比 Mybatis是基于xml生成代码; Myba...

  • MyBatisPlus(一)

    MyBatisPlus概述 为什么要学习它呢?MyBatisPlus可以节省我们大量工作时间,所有的CRUD代码它...

  • mybatisplus笔记

    https://www.bilibili.com/video/av69233006?p=23 注解 @TableN...

  • MyBatisPlus笔记

    MyBatisPlus概述 需要的基础:把我的MyBatis,Spring, SpringMVC就可以学习这个了!...

  • MybatisPlus笔记

    一、MyBatis-Plus 简介 MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 M...

  • MyBatisPlus的使用和扩展

    1. MyBatisPlus概述 为什么要学习它呢?MyBatisPlus可以节省我们大量工作时间,所有的CRUD...

网友评论

      本文标题:MybatisPlus学习笔记(八)------通用servic

      本文链接:https://www.haomeiwen.com/subject/gjgjzctx.html