MyBatis-Plus速成指南:基本CURD

ops/2025/2/5 7:29:25/
  1. BaseMapper:
    1. MyBatis-Plus 中的基本 CURD 在内置的 BaseMapper 中都已得到了实现,我们可以直接使用接口,接口如下:
      //
      // Source code recreated from a .class file by IntelliJ IDEA
      // (powered by FernFlower decompiler)
      //package com.baomidou.mybatisplus.core.mapper;import com.baomidou.mybatisplus.core.conditions.Wrapper;
      import com.baomidou.mybatisplus.core.metadata.IPage;
      import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
      import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
      import java.io.Serializable;
      import java.util.Collection;
      import java.util.List;
      import java.util.Map;
      import org.apache.ibatis.annotations.Param;public interface BaseMapper<T> extends Mapper<T> {int insert(T entity);int deleteById(Serializable id);int deleteById(T entity);int deleteByMap(@Param("cm") Map<String, Object> columnMap);int delete(@Param("ew") Wrapper<T> queryWrapper);int deleteBatchIds(@Param("coll") Collection<?> idList);int updateById(@Param("et") T entity);int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);T selectById(Serializable id);List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);default T selectOne(@Param("ew") Wrapper<T> queryWrapper) {List<T> ts = this.selectList(queryWrapper);if (CollectionUtils.isNotEmpty(ts)) {if (ts.size() != 1) {throw ExceptionUtils.mpe("One record is expected, but the query result is multiple records", new Object[0]);} else {return ts.get(0);}} else {return null;}}default boolean exists(Wrapper<T> queryWrapper) {Long count = this.selectCount(queryWrapper);return null != count && count > 0L;}Long selectCount(@Param("ew") Wrapper<T> queryWrapper);List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper);List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper);<P extends IPage<T>> P selectPage(P page, @Param("ew") Wrapper<T> queryWrapper);<P extends IPage<Map<String, Object>>> P selectMapsPage(P page, @Param("ew") Wrapper<T> queryWrapper);
      }
  2. 插入:
        @Testpublic void contextLoads() {User user = new User(null,"张三",22,"zhangsan@163.com");int result = userMapper.insert(user);System.out.println("自动生成 id 为:" + user.getId());}
    }
    1. 最终获取的 id 为:1829897454010204162
    2. 这是因为 MyBatis-Plus 在实现插入数据时,会默认基于雪花算法的策略生成 id 值
  3. 删除:
    1. 通过 id 删除:
      @Test
      public void delete(){//通过 id 删除用户信息int result = userMapper.deleteById(1829897454010204162L);System.out.println(result);
      }
    2. 通过 id 批量删除:
      @Test
      public void delete(){//根据 id 批量删除List<Long> list = Arrays.asList(1L,2L);int result = userMapper.deleteBatchIds(list);System.out.println(result);
      }
    3. 通过 map 条件删除记录:
      @Test
      public void delete(){Map<String,Object> map = new HashMap<>();map.put("age",23);map.put("name","张三");int result = userMapper.deleteByMap(map);System.out.println(result);
      }
  4. 修改:
    @Test
    public void Update(){User user = new User(6L,"张思思",20,null);int result = userMapper.updateById(user);System.out.println(result);
    }
  5. 查询:
    1. 根据 id 查询用户信息
      @Test
      public void select(){//通过 id 进行查询User user = userMapper.selectById(3L);System.out.println(user);
      }
    2. 根据多个 id 查询多个用户信息
      @Test
      public void select(){//通过多个 id 进行查询List<Long> list = Arrays.asList(3L,4L);List<User> listUser = userMapper.selectBatchIds(list);listUser.forEach(System.out::println);
      }
    3. 通过 map 条件查询用户信息
      @Test
      public void select(){//通过 map 条件查询所有数据Map<String,Object> map = new HashMap<>();map.put("age",28);map.put("name","Tom");List<User> list = userMapper.selectByMap(map);list.forEach(System.out::println);}
    4. 查询所有数据:
      @Test
      public void select(){//查询所有数据List<User> list = userMapper.selectList(null);
      }

通用 Service:

  1. 说明:
    1. 通用 Service CURD 封装 IService 接口,进一步封装 CURD 采用:
      1. get:查询单行
      2. remove:删除
      3. list:查询集合
      4. page:分页
      5. 前缀名方式区分 Mapper 层避免混淆
    2. 泛型 T 为任意实体对象
    3. 建议:如果存在自定义通用 Service 方法的可能,创建自己的 IBaseService 集成 MyBatis-Plus 提供的基类
    4. 官网地址:https://baomidou.com/pages/49cc81/#service-crud-%E6%8E%A5%E5%8F% A3
  2. IService:
    1. MyBatis-Plus 有一个接口 IService 和其实现类 ServiceImpl,封装了常见的业务层逻辑
    2. 详情查看源码:IService 和 ServiceImpl
  3. 创建 Service 接口和实现类:
    1. 接口:
      //UserService 继承 IService 模板提供的基础功能
      public interface UerService extends IService<User> {}
    2. 实现类:
      /***  ServiceImpl 实现了 IService,提供了IService 中基础功能的实现*  若 ServiceImpl 无法满足业务需求,则可以使用自定义的 UserService 定义方法,并在实现类中实现*/
      @Service
      public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UerService {}
  4. 测试查询记录数:
    @Autowired
    private UserService userService;@Test
    public void TestService(){Long count = userService.count();System.out.println("总数为:" + count);
    }
  5. 测试批量插入:
    ArrayList<User> list = new ArrayList<>();
    for (int i = 0;i < 5;i++){User user = new User();user.setName("章"+i);user.setAge(20 + i);user.setEmail(i + "@163.com");list.add(user);
    }
    //批量加入
    userService.saveBatch(list);

http://www.ppmy.cn/ops/155808.html

相关文章

使用Pytorch训练一个图像分类器

一、准备数据集 一般来说&#xff0c;当你不得不与图像、文本或者视频资料打交道时&#xff0c;会选择使用python的标准库将原始数据加载转化成numpy数组&#xff0c;甚至可以继续转换成torch.*Tensor。 对图片而言&#xff0c;可以使用Pillow库和OpenCV库对视频而言&#xf…

python学习笔记5-函数的定义

1.函数的定义&#xff1a; # def 是英⽂ define 的缩写def 函数名&#xff08;[参数1],[参数2]....[参数n]&#xff09;:函数体 关于函数名的定义&#xff0c;有几项需要注意的地方&#xff1a; • 函数名命名规则同变量名&#xff0c;要满⾜标识符命名规则 • 不能和系统…

3 Flink 运行架构

3 Flink 运行架构 1. Flink 程序结构2. Flink 并行数据流3. Task 和 Operator chain4. 任务调度与执行5. 任务槽和槽共享 1. Flink 程序结构 Flink 程序的基本构建块是流和转换&#xff08;请注意&#xff0c;Flink 的 DataSet API 中使用的 DataSet 也是内部流 &#xff09;。…

开发板上Qt运行的环境变量的三条设置语句的详解

在终端中运行下面三句命令用于配置开发板上Qt运行的环境变量&#xff1a; export QT_QPA_GENERIC_PLUGINStslib:/dev/input/event1 export QT_QPA_PLATFORMlinuxfb:fb/dev/fb0 export QT_QPA_FONTDIR/usr/lib/fonts/设置成功后可以用下面的语句检查设置成功没有 echo $QT_QPA…

Block Blaster Online:免费解谜游戏的乐趣

Block Blaster Online 是一款免费的在线解谜游戏&#xff0c;它将挑战你的思维和反应能力&#xff01;在这里&#xff0c;你可以匹配五彩缤纷的方块&#xff0c;创造出令人惊叹的组合&#xff0c;享受无尽的解谜乐趣。无需安装&#xff0c;点击即可开始&#xff0c;加入全球数百…

【JavaEE】Spring(5):Mybatis(上)

一、什么是Mybatis Mybatis是一个持久层的框架&#xff0c;它用来更简单的完成程序和数据库之间的交互&#xff0c;也就是更简单的操作和读取数据库中的数据 在讲解Mybatis之前&#xff0c;先要进行一些准备工作&#xff1a; 1. 为项目添加 Mybatis 相关依赖 2. 创建用户表以…

[MySQL]事务的理论、属性与常见操作

目录 一、事物的理论 1.什么是事务 2.事务的属性&#xff08;ACID&#xff09; 3.再谈事务的本质 4.为什么要有事务 二、事务的操作 1.事务的支持版本 2.事务的提交模式 介绍 自动提交模式 手动提交模式 3.事务的操作 4.事务的操作演示 验证事务的回滚 事务异常…

小程序设计和开发:如何研究同类型小程序的优点和不足。

一、确定研究目标和范围 明确研究目的 在开始研究同类型小程序之前&#xff0c;首先需要明确研究的目的。是为了改进自己的小程序设计和开发&#xff0c;还是为了了解市场趋势和用户需求&#xff1f;不同的研究目的会影响研究的方法和重点。例如&#xff0c;如果研究目的是为了…