【MyBatisPlus】MyBatisPlus介绍与使用

news/2024/7/16 16:45:20

【MyBatisPlus】MyBatisPlus介绍与使用


文章目录

      • 【MyBatisPlus】MyBatisPlus介绍与使用
        • 1、什么MyBatisPlus
        • 2、MyBatisPlus的CRUD操作
        • 3、MyBatisPlus分页使用

1、什么MyBatisPlus

MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提高效率

  • 官网:https://baomidou.com/

MyBatisPlus特性:

  • 无侵入:只做增强不做改变,不会对现有工程产生影响
  • 强大的 CRUD 操作:内置通用 Mapper,少量配置即可实现单表CRUD 操作(如果只做单表增删查改不需要你写任何的sql)
  • 支持 Lambda:编写查询条件无需担心字段写错
  • 支持主键自动生成
  • 内置分页插件
  • ……

常见的开发方式:

  • 基于MyBatis使用MyBatisPlus
  • 基于Spring使用MyBatisPlus
  • 基于SpringBoot使用MyBatisPlus
2、MyBatisPlus的CRUD操作

使用mybatisplus的步骤

1. 导入mp的启动器
2. 编写application.yml文件,配置数据源,打印日志
3. 编写mapper接口,Mapper接口需要基础BaseMapper接口,BaseMapper接口需要指定操作的是哪个实体类。
4. 在启动类中扫描的Mapper包
5. 测试使用

正如官网所言:mybatis-plus在mybatis的基础上只做增强不做改变,因此只需把mybatis的依赖换成mybatis-plus的依赖

      <!-- mybatis-plus的驱动包 -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.2</version>
</dependency>

**注意:**这是mybatis-plus依赖,真正使用起来肯定是根据项目添加,如:mysql驱动、lombok等。

编写application.yml文件,配置数据源

mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplmap-underscore-to-camel-case: true

编写mapper接口,Mapper接口需要基础BaseMapper接口,BaseMapper接口需要指定操作的是哪个实体类。

public interface UserMapper extends BaseMapper<User> { //这里操作的是User这个实体类}

mybatis-plus为我们提供了一些标准数据层的CRUD功能,这些功能省去了我们自定义接口,也与我们自定义接口有部分差异,如下表:

功能自定义接口MP接口
新增boolean save(T t)int insert(T t)
删除boolean delete(int id)int deleteById(Serializable id)
修改boolean update(T t)int updateById(T t)
根据id查询T getById(int id)T selectById(Serializable id)
查询全部List getAll()List selectList()
分页查询PageInfo getAll(int page, int size)IPage selectPage(IPage page)
按条件查询List getAll(Condition condition)IPage selectPage(Wrapper queryWrapper)

新增

    /*** 增加*/@Testpublic void testInsert(){User user = new User();user.setName("小林");user.setGender("男");user.setPassword("root");user.setAge(19);user.setTel("18000110011");userMapper.insert(user);}

删除

    /*** 删除*/@Testpublic void testRemove(){userMapper.deleteById(1480751909521403906L);}

更新

    /*** 更新*/@Testpublic void testUpdate(){User user =new User();user.setId(7L);user.setName("张小炮");  //注意: 生成update语句设置的字段为非空字段。userMapper.updateById(user); //update user set xx=xx ,xxx=xx ,xx=xx where id =xx}

查询全部

    @Testpublic void testUserList(){List<User> users = userMapper.selectList(null);for (User user : users) {System.out.println(user);}}

条件查询

    /*** 条件查询*/@Testpublic void testFindByCondition(){//QueryWrapper代表就是条件QueryWrapper<User> queryWrapper  = new QueryWrapper<>();//添加条件//queryWrapper.lt()  greater than 小于//queryWrapper.le()  greater equal 小于等于//queryWrapper.ge()  greater equal 大于等于//queryWrapper.eq()  equal 等于//queryWrapper.gt()  greater than 大于queryWrapper.gt("age",18);List<User> userList = userMapper.selectList(queryWrapper);System.out.println("用户列表:"+ userList);}
3、MyBatisPlus分页使用
功能MP接口
分页查询IPage selectPage(IPage page)

如果需要使用到mybatis-plus的分页功能,必须存在一个配置类该配置类创建Mybatis的拦截器,这个拦截器的作用就是在你执行selectPage的方法的时候对sql进行拦截,然后拼接limit语句实现分页。

设置分页拦截器作为Spring管理的bean

  1. 在config包下创建一个配置类:MybatisPlusConfig
  2. 在类上添加@Configuration
  3. 编写方法
    1. 方法上使用@Bean注解:添加MybatisPlusInterceptor对象到容器中
    2. 创建MybatisPlusInterceptor拦截器对象
    3. 添加内部分页拦截器:创建PaginationInnerInterceptor
@Configuration
public class MybatisPlusInterceptorConfig {/*** 创建MybatisPlusInterceptor拦截器封装里面分页拦截器PaginationInnerInterceptor* 作用:实现对mp内置分页方法拦截增强,实现分页2条sql语句原理* @return*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor(){MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());return mybatisPlusInterceptor;}
}

在测试类中执行分页查询

  1. 创建分页对象,前面是接口IPage,后面是实现类Page(第几页,每页大小)
  2. 调用selectPage方法,传入page对象,无需接收返回值
  3. 获取分页结果
    @Testpublic void testPage(){//查询第一页,每页3条数据//1、创建Page对象,构造函数传入当前页码和每页显示多少条数据Page<User> page = new Page<>(1, 3); //当前页1  页面大小是3//2、执行selectPage方法page = userMapper.selectPage(page,null);//3、获取分页数据System.out.println("总条数:" + page.getTotal());List<User> records = page.getRecords();for (User record : records) {System.out.println(record);}//4、获取当前页System.out.println("当前页:" + page.getCurrent());System.out.println("每页大小:" + page.getSize());}

https://www.xjx100.cn/news/3417929.html

相关文章

Unity DOTS技术(五)Archetype,Chunk,NativeArray

文章目录 一.Chunk和Archetype什么是Chunk?什么是ArchType 二.Archetype创建1.创建实体2.创建并添加组件3.批量创建 三.多线程数组NativeArray 本次介绍的内容如下: 一.Chunk和Archetype 什么是Chunk? Chunk是一个空间,ECS系统会将相同类型的实体放在Chunk中.当一个Chunk…

RK3568笔记二十八:CRNN车牌识别部署

若该文为原创文章&#xff0c;转载请注明原文出处。 想在RK3568上实现车牌识别&#xff0c;想到的方法是使用LPRNet网络识别或CRNN识别&#xff0c;本篇记录使用CRNN识别车牌&#xff0c;也可以换成LPRNet模型&#xff0c;原理一样。 一、平台介绍 1、训练平台&#xff1a;A…

CV每日论文---2024.6.3

1、Video-MME: The First-Ever Comprehensive Evaluation Benchmark of Multi-modal LLMs in Video Analysis 中文标题&#xff1a;Video-MME&#xff1a;视频分析领域首个多模态法学硕士综合评估基准 简介&#xff1a;Video-MME 是一个全面评估多模态大语言模型&#xff08;M…

PostgreSQL 修改表结构卡住不动

目录 1 问题2 实现 1 问题 今天遇到的一个问题记录一下&#xff0c;因为系统上的一个改动需要同步脚本至测试库上&#xff0c;具体的脚本内容也很简单,就是修改了某张表的一个字段。但是无论怎么操作都是一直卡住&#xff0c;表的数据量很小就十几条数据所以初步怀疑是表被锁了…

第二讲笔记:隐私计算助力数据要素流通

1、数据要素流转与数据 2、数据外循环中的信任 焦虑 信任焦虑背后的代表性案例 内鬼门 &#xff1a; 2023 年 &#xff0c; 美国科技公司 Ubiquiti在2021年1月曝出数据泄露事 件&#xff0c; “攻击者”在随后的“谈判”中试 图向该企业勒索近200万美元&#xff08;50比特 币&…

Taro(React)使用富文本编辑器Editor

在写项目的过程中很容易涉及到让使用者&#xff0c;输入一些介绍或者文本等相关功能&#xff0c; 前端在拿到这些文本时是需要直接渲染的&#xff0c;如果不使用富文本编辑器&#xff0c;这个时候得到的文章是没有格式的&#xff0c;这对于使用者来说体验非常的不好&#xff0c…

一分钟了解香港的场外期权报价

香港的场外期权报价 在香港这个国际金融中心&#xff0c;场外期权交易是金融市场不可或缺的一部分。场外期权&#xff0c;作为一种非标准化的金融衍生品&#xff0c;为投资者提供了在特定时间以约定价格买入或卖出某种资产的机会。对于希望参与这一市场的投资者来说&#xff0…

HMM地图匹配算法库Barefoot环境搭建

1.引入gps路径匹配开源项目barefoot 克隆仓库 git clone https://github.com/bmwcarit/barefoot.git打开项目执行mvn命令将项目打包到maven仓库 mvn install -DskipTests在自己的maven项目中引入barefoot依赖 <dependency><groupId>com.bmw-carit</groupId&g…