MyBatis-Plus内置接口方法的具体使用

 更新时间:2023年12月21日 14:53:46   作者:云村小威  
java开发应用程序与数据库交互使用比较多的就是mybatisPlus接口,本文主要介绍了MyBatis-Plus内置接口方法的具体使用,具有一定的参考价值,感兴趣的可以了解一下

Service CRUD接口

Service CRUD 接口说明:

  • 通用 Service CRUD 封装IService接口,进一步封装 CRUD 采用 get 查询单行 remove 删除 list 查询集合 page 分页 前缀命名方式区分 Mapper 层避免混淆,

  • 泛型 T 为任意实体对象

1.1 Save

// 插入一条记录(选择字段,策略插入)
boolean save(T entity);
// 插入(批量)
boolean saveBatch(Collection<T> entityList);
// 插入(批量)
boolean saveBatch(Collection<T> entityList, int batchSize);

参数说明

类型参数名描述
Tentity实体对象
Collection<T>entityList实体对象集合
intbatchSize插入批次数量

1.2 SaveOrUpdate

// TableId 注解存在更新记录,否插入一条记录
boolean saveOrUpdate(T entity);
// 根据updateWrapper尝试更新,否继续执行saveOrUpdate(T)方法
boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper);
// 批量修改插入
boolean saveOrUpdateBatch(Collection<T> entityList);
// 批量修改插入
boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize);

参数说明

类型参数名描述
Tentity实体对象
Wrapper<T>updateWrapper实体对象封装操作类 UpdateWrapper
Collection<T>entityList实体对象集合
intbatchSize插入批次数量

1.3 Remove

// 根据 queryWrapper 设置的条件,删除记录
boolean remove(Wrapper<T> queryWrapper);
// 根据 ID 删除
boolean removeById(Serializable id);
// 根据 columnMap 条件,删除记录
boolean removeByMap(Map<String, Object> columnMap);
// 删除(根据ID 批量删除)
boolean removeByIds(Collection<? extends Serializable> idList);

参数说明

类型参数名描述
Wrapper<T>queryWrapper实体包装类 QueryWrapper
Serializableid主键 ID
Map<String, Object>columnMap表字段 map 对象
Collection<? extends Serializable>idList主键 ID 列表

1.4 Update

// 根据 UpdateWrapper 条件,更新记录 需要设置sqlset
boolean update(Wrapper<T> updateWrapper);
// 根据 whereWrapper 条件,更新记录
boolean update(T updateEntity, Wrapper<T> whereWrapper);
// 根据 ID 选择修改
boolean updateById(T entity);
// 根据ID 批量更新
boolean updateBatchById(Collection<T> entityList);
// 根据ID 批量更新
boolean updateBatchById(Collection<T> entityList, int batchSize);

参数说明

类型参数名描述
Wrapper<T>updateWrapper实体对象封装操作类 UpdateWrapper
Tentity实体对象
Collection<T>entityList实体对象集合
intbatchSize更新批次数量

1.5 Get

// 根据 ID 查询
T getById(Serializable id);
// 根据 Wrapper,查询一条记录。结果集,如果是多个会抛出异常,随机取一条加上限制条件 wrapper.last("LIMIT 1")
T getOne(Wrapper<T> queryWrapper);
// 根据 Wrapper,查询一条记录
T getOne(Wrapper<T> queryWrapper, boolean throwEx);
// 根据 Wrapper,查询一条记录
Map<String, Object> getMap(Wrapper<T> queryWrapper);
// 根据 Wrapper,查询一条记录
<V> V getObj(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);

参数说明

类型参数名描述
Serializableid主键 ID
Wrapper<T>queryWrapper实体对象封装操作类 QueryWrapper
booleanthrowEx有多个 result 是否抛出异常
Tentity实体对象
Function<? super Object, V>mapper转换函数

1.6 List

// 查询所有
List<T> list();
// 查询列表
List<T> list(Wrapper<T> queryWrapper);
// 查询(根据ID 批量查询)
Collection<T> listByIds(Collection<? extends Serializable> idList);
// 查询(根据 columnMap 条件)
Collection<T> listByMap(Map<String, Object> columnMap);
// 查询所有列表
List<Map<String, Object>> listMaps();
// 查询列表
List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper);
// 查询全部记录
List<Object> listObjs();
// 查询全部记录
<V> List<V> listObjs(Function<? super Object, V> mapper);
// 根据 Wrapper 条件,查询全部记录
List<Object> listObjs(Wrapper<T> queryWrapper);
// 根据 Wrapper 条件,查询全部记录
<V> List<V> listObjs(Wrapper<T> queryWrapper, Function<? super Object, V> mapper);

参数说明

类型参数名描述
Wrapper<T>queryWrapper实体对象封装操作类 QueryWrapper
Collection<? extends Serializable>idList主键 ID 列表
Map<String, Object>columnMap表字段 map 对象
Function<? super Object, V>mapper转换函数

有一个Mapper CRUD接口没有写,其实大差不差用法都差不多。除了方法名不同以外,sevice接口有异常抛出和事务注解,一般都用service接口操作数据库。

更多Service接口操作,请见官网

综合案例

package com.ycxw.mybatis_test;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.github.javafaker.Faker;
import com.ycxw.mybatis_test.entity.Book;
import com.ycxw.mybatis_test.mapper.BookMapper;
import com.ycxw.mybatis_test.service.IBookService;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;

@Slf4j
@SpringBootTest
class MybatisTextApplicationTests {
    @Autowired
    private IBookService bookService;
    @Autowired
    private BookMapper bookMapper;

    @Test
    void contextLoads() {
    }

    /**
     * 保存单个
     */
    @Test
    public void test01() {
        /*创建faker实例
        参数:指定使用语言和国家*/
        Faker faker = new Faker(new Locale("zh", "CN"));
        /*
          faker.number().randomDouble(x,x,x)
        * 生成一个介于 100 和 999 之间的随机浮点数,并且保留两位小数。
        * */
        Book book = new Book()
                .setBookname(faker.book().title())
                .setPrice((float) faker.number().randomDouble(2, 100, 999));
        bookService.save(book);
    }

    /**
     * 保存多个
     */
    @Test
    public void test02() {
        /*
         * Stream.generate方法:创建一个无限流,其中每个元素都是使用提供的lambda表达式生成的。
         * 使用lambda表达式创建一个新的Book对象,并用Faker库生成的随机书名和价格对其进行初始化。
         * limit方法:将流限制为只包含前1000个元素。
         * collect方法:将流收集到一个列表中。
         * */
        Faker faker = new Faker(new Locale("zh", "CN"));
        List<Book> list = Stream.generate(
                () -> new Book()
                        .setBookname(faker.book().title())
                        .setPrice((float) faker.number().randomDouble(2, 100, 999))
        ).limit(10).collect(Collectors.toList());
        bookService.saveBatch(list);
    }

    @Test
    public void test03() {
        Faker faker = new Faker(Locale.CHINA);
        List<Book> list = Stream.generate(
                () -> new Book()
                        .setBookname(faker.book().title())
                        .setPrice((float) faker.number().randomDouble(2, 100, 999))
        ).limit(1000).collect(Collectors.toList());
        bookService.saveBatch(list, 500);
    }

    @Test
    public void test04() {
        QueryWrapper<Book> wrapper = new QueryWrapper<>();
        /*条件删除
         * lt小于
         * */
        wrapper.lt("price", 500);
//        wrapper.like("name", "你");
        bookService.remove(wrapper);
    }

    @Test
    public void test05() {
        Map<String, Object> ms = new HashMap<>();
        ms.put("price", 100);
//        ms.put("name", "你");
        bookService.removeByMap(ms);
    }

    @Test
    public void test06() {
        List<Long> ids = bookService
                .list()
                .stream()
                .limit(5)
                .map(Book::getId)
                .collect(Collectors.toList());
        bookService.removeBatchByIds(ids);
    }

    @Test
    public void test07() {
        UpdateWrapper<Book> wrapper = new UpdateWrapper<>();
        wrapper.eq("id", 493587255361727L);
        wrapper.set("name", "jack");
        wrapper.setSql("price=price+1");
        bookService.update(wrapper);
    }

    @Test
    public void test08() {
        Faker faker = new Faker(Locale.CHINA);
        Book Book = new Book()
                .setBookname(faker.book().title())
                .setPrice((float) faker.number().randomDouble(2, 100, 999));
        UpdateWrapper<Book> wrapper = new UpdateWrapper<>();
        wrapper.eq("id", 493587255361723L);
        bookService.update(Book, wrapper);
    }

    @Test
    public void test09() {
        QueryWrapper<Book> wrapper = new QueryWrapper<>();
        wrapper.like("name", "吕");
        wrapper.gt("price", 200);
        bookService.getOne(wrapper);
    }

    @Test
    public void test10() {
        QueryWrapper<Book> wrapper = new QueryWrapper<>();
        /*sql条件加拼接*/
        wrapper.gt("price", 200);
        /*拼接sql到最后*/
        wrapper.last("limit 1");
        bookService.getOne(wrapper);
    }

    @Test
    public void test11() {
        QueryWrapper<Book> wrapper = new QueryWrapper<>();
        wrapper.gt("price", 200);
        bookService.getOne(wrapper, false);
    }

    @Test
    public void test12() {
        QueryWrapper<Book> wrapper = new QueryWrapper<>();
        wrapper.gt("price", 200);
        wrapper.last("limit 1");
        bookService.getMap(wrapper).forEach((k, v) -> {
            log.warn("{},{}", k, v);
        });
    }

    @Test
    public void test13() {
        QueryWrapper<Book> wrapper = new QueryWrapper<>();
        wrapper.gt("price", 200);
        wrapper.last("limit 1");
        bookService.getObj(wrapper, e -> {
            log.warn("{}", e);
            return new Object();
        });
    }

}

到此这篇关于MyBatis-Plus内置接口方法的具体使用的文章就介绍到这了,更多相关MyBatis-Plus内置接口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Spring实现Logback日志模板设置动态参数功能

    Spring实现Logback日志模板设置动态参数功能

    本文介绍如何在Spring应用中实现Logback日志模板的动态参数设置,通过设计traceId链路标识,将其动态添加到日志输出中,从而实现简易的链路追踪功能,感兴趣的朋友跟随小编一起看看吧
    2024-11-11
  • 详解Java从工厂方法模式到 IOC/DI思想

    详解Java从工厂方法模式到 IOC/DI思想

    工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口。本文将详细介绍Java从工厂方法模式到 IOC/DI思想。
    2021-06-06
  • java中orElse和orElseGet方法区别小结

    java中orElse和orElseGet方法区别小结

    这篇文章主要给大家介绍了关于java中orElse和orElseGet方法区别的相关资料,两者之间的区别细微,但是却在某些场景下显的很重要,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • springboot整合webservice使用简单案例总结

    springboot整合webservice使用简单案例总结

    WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,平台等,可以实现不同的语言间的相互调用,下面这篇文章主要给大家介绍了关于springboot整合webservice使用的相关资料,需要的朋友可以参考下
    2024-07-07
  • @Transactional注解不起作用的原因分析及解决

    @Transactional注解不起作用的原因分析及解决

    这篇文章主要介绍了@Transactional注解不起作用的原因分析及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 解析Neatbeans(常见错误) build-impl.xml:305: Compile failed

    解析Neatbeans(常见错误) build-impl.xml:305: Compile failed

    本篇文章是对Neatbeans(常见错误) build-impl.xml:305: Compile failed的解决方法进行了详细的分析介绍,需要的朋友参考下
    2013-07-07
  • java实现数字转换人民币中文大写工具

    java实现数字转换人民币中文大写工具

    这篇文章主要为大家详细介绍了java实现数字转换人民币中文大写工具,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04
  • Struts2学习笔记(3)-DMI动态调用方式

    Struts2学习笔记(3)-DMI动态调用方式

    本文主要介绍Struts2的DMI动态调用的两种方式,简单实用,希望能给大家做一个参考。
    2016-06-06
  • 如何在Spring Boot中使用MQTT

    如何在Spring Boot中使用MQTT

    这篇文章主要介绍了如何在Spring Boot中使用MQTT,帮助大家更好的理解和学习使用Spring Boot,感兴趣的朋友可以了解下
    2021-04-04
  • springboot从application.properties中注入list, map方式

    springboot从application.properties中注入list, map方式

    这篇文章主要介绍了springboot从application.properties中注入list,map方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11

最新评论