当前位置: 首页 > article >正文

MyBatis-Plus速成指南:基本CURD

  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. 插入:
        @Test
        public 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.kler.cn/a/532332.html

相关文章:

  • 刷题记录 动态规划-7: 63. 不同路径 II
  • git进阶--6---git stash
  • redis底层数据结构
  • LabVIEW如何有效地进行数据采集?
  • 每日一题——小根堆实现堆排序算法
  • 【LeetCode 刷题】回溯算法-棋盘问题
  • [LeetCode]day13 19.删除链表的倒数第n个结点
  • springboot项目Redis统计在线用户
  • IFeatureWorkspace.CreateFeatureClass(),报错对COM组件的调用返回了错误 HRESULT E_FAIL
  • intra-mart框架学习笔记:如何找到框架自带页面
  • ComfyUI工作流 参考图像生成人像手办(SDXL版)
  • Nginx的路径匹配规则 笔记250203
  • python渗透开发 高阶段位之 waf绕过sql注入 sqlmap --temper模块开发以及框架逻辑修改 以及解释Temper是什么?
  • Elasticsearch Kibana的下载与安装
  • 关于kamailio重启后无法启动,chatgpt给出的解决方案
  • 排序算法--堆排序
  • C++多线程编程——基于策略模式、单例模式和简单工厂模式的可扩展智能析构线程
  • http请求中的headers和body内容设置
  • 毕业设计:基于深度学习的高压线周边障碍物自动识别与监测系统
  • 如可安装部署haproxy+keeyalived高可用集群
  • 【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.23 稀疏矩阵:CSR格式的存储与运算
  • fiddler笔记
  • 基于Flask的抖音用户浏览行为分析系统的设计与实现
  • RocketMQ实战—3.基于RocketMQ升级订单系统架构
  • Rust 中的模块系统:控制作用域与私有性
  • ThreadLocal使用和原理