开发者

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

开发者 https://www.devze.com 2023-12-23 10:25 出处:网络 作者: 云村小威
目录Service CRUD接口1.1 Save1.2 SaveOrUpdate1.3 Remove1.4 Update1.5 Get1.6 List综合案例Service CRUD接口
目录
  • Service CRUD接口
    • 1.1 Save
    • 1.2 SaveOrUpdate
    • 1.3 Remove
    • 1.4 Update
    • 1.5 Get
    • 1.6 List
  • 综合案例

    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 Seriandroidalizable> 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);
    // 根据 where编程Wrapper 条件,更新记录
    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 1android");
            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<Bphpook> 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内置接口内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)! 

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号