Mybatis-plus的service通用接口解读

2023-08-06 0 4,288

目录

service接口

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

1.Save 插入

参数说明

类型参数名描述Tentity实体对象CollectionentityList实体对象集合intbatchSize插入批次数量

// 插入一条记录(选择字段,策略插入)
boolean save(T entity);
// 插入(批量)
boolean saveBatch(Collection<T> entityList);
// 插入(批量)
boolean saveBatch(Collection<T> entityList, int batchSize);
/不存在则插入 否在更新
boolean saveOrUpdate(T entity);
// 批量修改插入
boolean saveOrUpdateBatch(Collection<T> entityList);

测试:

1.1单个添加测试

/**
     * 单个添加测试
     */
    @Test
    public void save(){
        Department department=new Department();
        department.setName(\"牛逼\");
        department.setRemark(\"xxx\");
        boolean save = departmentService.save(department);
    }

1.2 批量添加测试

/**
     * 批量添加测试
     */
    @Test
    public void saveBatch(){
        Department department1=new Department();
        department1.setName(\"牛逼1\");
        department1.setRemark(\"xxx1\");
        Department department2=new Department();
        department2.setName(\"牛逼2\");
        department2.setRemark(\"xxx2\");
        Department department3=new Department();
        department3.setName(\"牛逼3\");
        department3.setRemark(\"xxx3\");
  boolean b = departmentService.saveBatch(Arrays.asList(department1, department2, department3));
    }

1.3批量添加或者更新

判断ID是否存在,如果ID不存在执行新增,如果ID存在先执行查询语句,查询结果为空新增,否则修改

    /**
     * 批量添加或者更新
     */
@Test
public 
void 
saveOrUpdateBatch() {
    User user1 = new User(); 
    user1.setName(\"兔子\"); 
    user1.setAge(18);
    User user2 = new User(); 
    user2.setId(1088250446457389060L); 
    user2.setName(\"乌龟\");
    user2.setAge(18);  
    List<User> users = Arrays.asList(user1, user2);  
    boolean b = userService.saveOrUpdateBatch(users); 
    System.out.println(b);}

2.Remove 删除

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

2.1.通过id删除

 /**
     * 通过id删除
     */
    @Test
    public void removeById(){
        boolean b = departmentService.removeById(9);
    }

2.2根据 entity 条件,删除记录

@Test
    public void test1() {
        User user=new User();
        user.setAge(5);
        user.setName(\"猫\");
        QueryWrapper<User> queryWrapper=new QueryWrapper();
        queryWrapper.setEntity(user);
        boolean count=testService.remove(queryWrapper);
        System.out.println(count);  //true
    }

2.3根据 columnMap 条件,删除记录

@Test
public void test2() {
    HashMap<String, Object> map = new HashMap<>();
    //自定义查询条件,下面的值全部满足才能成功
    map.put(\"name\", \"狗\");
    map.put(\"age\", 5);
    boolean b = testService.removeByMap(map);
    System.out.println(b);  // true
}

2.4批量删除

@Test
public void test3() {
  List<String> list=new ArrayList();
  list.add(\"1495949722160246786\");
  list.add(\"1495950143763296258\");
    boolean b = testService.removeByIds(list);
    System.out.println(b);
}

3.Update修改

// 根据 whereWrapper 条件,更新记录
boolean update(T updateEntity, Wrapper<T> whereWrapper);
// 根据 ID 选择修改
boolean updateById(T entity);
// 根据ID 批量更新
boolean updateBatchById(Collection<T> entityList);

3.1 根据 ID 选择修改

 @Test
    public void updateById(){
        Department department=new Department();
        department.setId(9);
        department.setName(\"牛逼2\");
        department.setRemark(\"xxx2\");
        boolean save = departmentService.updateById(department);
        System.out.println(save);
    }

3.2通过实体+UpdateWrapper做修改

@Test
public void test4() {
        UpdateWrapper<User> userUpdateWrapper=new UpdateWrapper<>();
        userUpdateWrapper.eq(\"email\",\"1314@qq.com\");
         User user=new User();
         user.setAge(25);
          user.setName(\"李白\");
        testService.update(user,userUpdateWrapper);
}

4.Get 查询一条记录

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

4.1根据id查询记录

根据 主键 ID 返回数据

@Test
public void test5() {
    System.out.println(testService.getById(\"1495950143763296266\"));
    //User(id=1495950143763296266, age=25, name=张飞, email=1314@qq.com, deleted=0, createTime=Tue Feb 22 14:38:22 CST 2022, updateTime=Sun Apr 24 17:06:12 CST 2022)
}

4.2根据 Wrapper,查询一条记录

返回一条记录(实体类保存)

@Test
public void test6() {
     QueryWrapper queryWrapper=new QueryWrapper();
     queryWrapper.eq(\"name\",\"张飞\");
     // queryWrapper.last(\"LIMIT 1\") //如果是多个会抛出异 常加上限制条件
     System.out.println(testService.getOne(queryWrapper));
      }

4.3返回一条记录(map 保存)

@Test
public void test7() {
    QueryWrapper<User> queryWrapper=new QueryWrapper();
    queryWrapper.ne(\"age\",5)
               .eq(\"email\",\"1314@qq.com\");
   Map map=testService.getMap(queryWrapper);
    System.out.println(map);
}

5.获取条数

5.1获取所有数据条数 也就是条件为null

@Test
public void test8() {
    System.out.println(testService.count(null));  // 21
}

5.2 根据条件返回记录数

@Test
public void test9() {
    QueryWrapper<User> queryWrapper=new QueryWrapper<>();
    queryWrapper.eq(\"name\",\"张飞\");
    System.out.println(testService.count(queryWrapper)); //  7
}

6.返回多条记录

// 查询所有
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);

6.1无条件查询所有数据

@Test
public void test10() {
    System.out.println(testService.list(null));  
}

结果:

[User(id=1495690228859723778, age=5, name=猫, email=2424496907@qq.com, deleted=0, createTime=null, updateTime=null), User(id=1495933979356090370, age=25, name=猫, email=2424496907@qq.com, deleted=0, createTime=null, updateTime=null), User(id=1495934171253850114, age=25, name=猫飞, email=1314@qq.com, deleted=0, createTime=null, updateTime=Sun Apr 24 17:06:12 CST 2022), User(id=1495950143763296262, age=38, name=王k松, email=2423435907@qq.com, deleted=0, createTime=Tue Feb 22 13:44:24 CST 2022, updateTime=Tue Feb 22 13:44:24 CST 2022), User(id=1495950143763296263, age=25, name=刘备, email=1314@qq.com, deleted=0, createTime=Tue createTime=Thu Feb 24 14:58:07 CST 2022, updateTime=Thu Feb 24 14:58:07 CST 2022)]

6.2按条件查询数据

@Test
public void test11() {
    QueryWrapper<User> queryWrapper=new QueryWrapper<User>();
    queryWrapper.eq(\"name\",\"张飞\")
               .ge(\"age\",25);
    System.out.println(testService.list(queryWrapper));
}

结果:

[User(id=1495935752888176642, age=32, name=张飞, email=1314@qq.com, deleted=0, createTime=null, updateTime=Sun Apr 24 17:06:12 CST 2022), User(id=1495937693445828610, age=39, name=张飞, email=1314@qq.com, deleted=0, createTime=null, updateTime=Sun Apr 24 17:06:12 CST 2022), User(id=1495950143763296265, age=45, name=张飞, email=1314@qq.com, deleted=0, createTime=Tue Feb 22 14:33:53 CST 2022, updateTime=Sun Apr 24 17:06:12 CST 2022), User(id=1495950143763296266, age=25, name=张飞, email=1314@qq.com, deleted=0, createTime=Tue Feb 22 14:38:22 CST 2022, updateTime=Sun Apr 24 17:06:12 CST 2022), User(id=1495950143763296268, age=50, name=张飞, email=1314@qq.com, deleted=0, createTime=Tue Feb 22 14:57:17 CST 2022, updateTime=Sun Apr 24 17:06:12 CST 2022), User(id=1495950143763296269, age=25, name=张飞, email=1314@qq.com, deleted=0, createTime=Tue Feb 22 14:59:50 CST 2022, updateTime=Sun Apr 24 17:06:12 CST 2022)]

6.3 返回为map集合

调用 BaseMapper 的 selectMaps 方法,查询所有记录(返回 map 集合)。

@Test
public void test12() {
    QueryWrapper<User> queryWrapper=new QueryWrapper<User>();
    queryWrapper.eq(\"name\",\"张飞\")
            .ge(\"age\",25);
    System.out.println(testService.listMaps(queryWrapper));
}

结果:

[{update_time=2022-04-24T17:06:12, deleted=0, name=张飞, id=1495935752888176642, age=32, email=1314@qq.com}, {update_time=2022-04-24T17:06:12, deleted=0, name=张飞, id=1495937693445828610, age=39, email=1314@qq.com}, {update_time=2022-04-24T17:06:12, deleted=0, create_time=2022-02-22T14:33:53, name=张飞, id=1495950143763296265, age=45, email=1314@qq.com}, {update_time=2022-04-24T17:06:12, deleted=0, create_time=2022-02-22T14:38:22, name=张飞, id=1495950143763296266, age=25, email=1314@qq.com}, {update_time=2022-04-24T17:06:12, deleted=0, create_time=2022-02-22T14:57:17, name=张飞, id=1495950143763296268, age=50, email=1314@qq.com}, {update_time=2022-04-24T17:06:12, deleted=0, create_time=2022-02-22T14:59:50, name=张飞, id=1495950143763296269, age=25, email=1314@qq.com}]

  • get 用于返回一条记录。
  • list 用于返回多条记录。   
  • count 用于返回记录总数。
  • page 用于分页查询。

【添加数据】

default boolean save(T entity); // 调用 BaseMapper 的 insert 方法,用于添加一条数据。
boolean saveBatch(Collection<T> entityList, int batchSize); // 批量插入数据

注:

  • entityList 表示实体对象集合
  • batchSize 表示一次批量插入的数据量,默认为 1000

【添加或修改数据:(增或改)】

boolean saveOrUpdate(T entity); // id 若存在,则修改, id 不存在则新增数据
default boolean saveOrUpdate(T entity, Wrapper<T> updateWrapper); // 先根据条件尝试更新,然后再执行 saveOrUpdate 操作
boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize); // 批量插入并修改数据

【删除数据:(删)】

default boolean removeById(Serializable id); // 调用 BaseMapper 的 deleteById 方法,根据 id 删除数据。
default boolean removeByMap(Map<String, Object> columnMap); // 调用 BaseMapper 的 deleteByMap 方法,根据 map 定义字段的条件删除
default boolean remove(Wrapper<T> queryWrapper); // 调用 BaseMapper 的 delete 方法,根据实体类定义的 条件删除对象。
default boolean removeByIds(Collection<? extends Serializable> idList); // 用 BaseMapper 的 deleteBatchIds 方法, 进行批量删除。

【修改数据:(改)】

default boolean updateById(T entity); // 调用 BaseMapper 的 updateById 方法,根据 ID 选择修改。
default boolean update(T entity, Wrapper<T> updateWrapper); // 调用 BaseMapper 的 update 方法,根据 updateWrapper 条件修改实体对象。
boolean updateBatchById(Collection<T> entityList, int batchSize); // 批量更新数据

【查找数据:(查)】

default T getById(Serializable id); // 调用 BaseMapper 的 selectById 方法,根据 主键 ID 返回数据。
default List<T> listByIds(Collection<? extends Serializable> idList); // 调用 BaseMapper 的 selectBatchIds 方法,批量查询数据。
default List<T> listByMap(Map<String, Object> columnMap); // 调用 BaseMapper 的 selectByMap 方法,根据表字段条件查询
default T getOne(Wrapper<T> queryWrapper); // 返回一条记录(实体类保存)。
Map<String, Object> getMap(Wrapper<T> queryWrapper); // 返回一条记录(map 保存)。
default int count(Wrapper<T> queryWrapper); // 根据条件返回 记录数。
default List<T> list(); // 返回所有数据。
default List<T> list(Wrapper<T> queryWrapper); // 调用 BaseMapper 的 selectList 方法,查询所有记录(返回 entity 集合)。
default List<Map<String, Object>> listMaps(Wrapper<T> queryWrapper); // 调用 BaseMapper 的 selectMaps 方法,查询所有记录(返回 map 集合)。
default List<Object> listObjs(); // 返回全部记录,但只返回第一个字段的值。
default <E extends IPage<T>> E page(E page, Wrapper<T> queryWrapper); // 调用 BaseMapper 的 selectPage 方法,分页查询
default <E extends IPage<Map<String, Object>>> E pageMaps(E page, Wrapper<T> queryWrapper); // 调用 BaseMapper 的 selectMapsPage 方法,分页查询

【链式调用:】

default QueryChainWrapper<T> query(); // 普通链式查询
default LambdaQueryChainWrapper<T> lambdaQuery(); // 支持 Lambda 表达式的修改
default UpdateChainWrapper<T> update(); // 普通链式修改
default LambdaUpdateChainWrapper<T> lambdaUpdate(); // 支持 Lambda 表达式的修改

注:

  • query表示查询
  • update表示修改
  • Lambda表示内部支持 Lambda 写法。

形如:

query().eq(\"column\", value).one();
lambdaQuery().eq(Entity::getId, value).list();
update().eq(\"column\", value).remove();
lambdaUpdate().eq(Entity::getId, value).update(entity);

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

资源下载此资源下载价格为1小猪币,终身VIP免费,请先
由于本站资源来源于互联网,以研究交流为目的,所有仅供大家参考、学习,不存在任何商业目的与商业用途,如资源存在BUG以及其他任何问题,请自行解决,本站不提供技术服务! 由于资源为虚拟可复制性,下载后不予退积分和退款,谢谢您的支持!如遇到失效或错误的下载链接请联系客服QQ:442469558

:本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可, 转载请附上原文出处链接。
1、本站提供的源码不保证资源的完整性以及安全性,不附带任何技术服务!
2、本站提供的模板、软件工具等其他资源,均不包含技术服务,请大家谅解!
3、本站提供的资源仅供下载者参考学习,请勿用于任何商业用途,请24小时内删除!
4、如需商用,请购买正版,由于未及时购买正版发生的侵权行为,与本站无关。
5、本站部分资源存放于百度网盘或其他网盘中,请提前注册好百度网盘账号,下载安装百度网盘客户端或其他网盘客户端进行下载;
6、本站部分资源文件是经压缩后的,请下载后安装解压软件,推荐使用WinRAR和7-Zip解压软件。
7、如果本站提供的资源侵犯到了您的权益,请邮件联系: 442469558@qq.com 进行处理!

猪小侠源码-最新源码下载平台 Java教程 Mybatis-plus的service通用接口解读 http://www.20zxx.cn/806326/xuexijiaocheng/javajc.html

猪小侠源码,优质资源分享网

常见问题
  • 本站所有资源版权均属于原作者所有,均只能用于参考学习,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担
查看详情
  • 最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,建议提前注册好百度网盘账号,使用百度网盘客户端下载
查看详情

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务