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

Mybatisplus教学

Mybatisplus官网:简介 | MyBatis-Plus (baomidou.com)

MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生

特性

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
  • 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
  • 内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

使用步骤

1. 导入依赖

 <!--  mybatisplus依赖    --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.1.1</version></dependency><!--     数据库驱动   --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency>

2. 必备配置

2.1 扫描Mapper包

// 替换为您的 Mapper 接口包路径
// 通常加在启动类
@MapperScan("com.itheima.mp.mapper")  

2.2 配置数据源

spring:datasource:url: jdbc:mysql://127.0.0.1:3306/mp?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghaidriver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: root

2.3 常见配置


mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  # 打印 SQL 日志global-config:db-config:id-type: auto  # 主键类型

2.4 分页拦截器

package com.itheima.mp.config;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** MyBatis Plus 配置类* * 该配置类用于配置 MyBatis Plus 的各种插件,包括分页拦截器。*/
@Configuration
public class MyBatisPlusConfig {/*** 创建 MyBatis Plus 拦截器 Bean* * @return MybatisPlusInterceptor 实例*/@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {// 创建 MyBatis Plus 拦截器实例MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();// 添加分页拦截器// 分页拦截器用于处理 MyBatis Plus 的分页查询逻辑interceptor.addInnerInterceptor(new PaginationInnerInterceptor());// 返回配置好的拦截器实例return interceptor;}
}

3. 自定义Mapper接口需要继承BaseMapper

public interface UserMapper extends BaseMapper<User> 

BaseMapper提供的方法:

  • 新增
    1. int insert(T entity):插入一条记录。        
  • 删除
    1. int deleteById(Serializable id):根据 ID 删除记录。
    2. int deleteByMap(@Param("cm") Map<String, Object> columnMap):根据列名和值进行删除。
    3. int delete(@Param("ew") Wrapper<T> wrapper):根据条件构造器进行删除。
    4. int deleteByIds(@Param("coll") Collection<? extends Serializable> idList):根据 ID 列表批量删除。
  • 更新
    1. int updateById(@Param("et") T entity):根据 ID 更新记录。
    2. int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper):根据条件构造器进行更新。
  • 查找
    1. T selectById(Serializable id):根据 ID 查询单条记录。
    2. List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList):根据 ID 列表批量查询。
    3. List<T> selectByMap(@Param("cm") Map<String, Object> columnMap):根据列名和值进行查询。
    4. T selectOne(@Param("ew") Wrapper<T> queryWrapper):根据条件构造器查询单条记录。
    5. Integer selectCount(@Param("ew") Wrapper<T> queryWrapper):根据条件构造器查询记录数。
    6. List<T> selectList(@Param("ew") Wrapper<T> queryWrapper):根据条件构造器查询列表。
    7. List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper):根据条件构造器查询列表,返回 Map 集合。
    8. List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper):根据条件构造器查询列表,返回单列数据集合。
  • 分页查询
    1. IPage<T> selectPage(IPage<T> page, @Param("ew") Wrapper<T> queryWrapper):分页查询。
    2. IPage<Map<String, Object>> selectMapsPage(IPage<T> page, @Param("ew") Wrapper<T> queryWrapper):分页查询,返回 Map 集合。

4. 定义Service接口和实现类

public interface UserService extends IService<User> public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService
  • ServiceImpl 是 MyBatis-Plus 提供的一个基础服务实现类,它继承了 IService 接口并实现了其中的大部分方法。
  • ServiceImpl 提供了许多常用的 CRUD 操作方法,这些方法可以直接在你的服务实现类中使用。

ServiceImpl提供的方法:

  • 新增
    1. boolean save(T entity):保存一个实体,自动填充创建时间和更新时间。
    2. boolean saveOrUpdate(T entity):保存或更新一个实体,自动填充创建时间和更新时间。
    3. boolean saveBatch(Collection<T> entityList):批量保存实体。
    4. boolean saveOrUpdateBatch(Collection<T> entityList):批量保存或更新实体
  • 删除
    1. boolean removeById(Serializable id):根据 ID 删除记录。
    2. boolean removeByMap(Map<String, Object> columnMap):根据列名和值进行删除。
    3. boolean remove(Wrapper<T> queryWrapper):根据条件构造器进行删除。
    4. boolean removeByIds(Collection<? extends Serializable> idList):根据 ID 列表批量删除。
  • 修改
    1. boolean updateById(T entity):根据 ID 更新记录。
    2. boolean update(T entity, Wrapper<T> updateWrapper):根据条件构造器进行更新。
    3. boolean updateBatchById(Collection<T> entityList):批量更新记录。
    4. boolean updateBatchById(Collection<T> entityList, int batchSize):批量更新记录,指定每次更新的记录数。
  • 查找
    1. T getById(Serializable id):根据 ID 查询实体对象。
    2. List<T> listByIds(Collection<? extends Serializable> idList):根据多个 ID 查询实体对象。
    3. List<T> listByMap(Map<String, Object> columnMap):根据 Map 条件查询实体对象。
    4. T getOne(Wrapper<T> queryWrapper, boolean throwEx):根据条件查询单个实体对象。
    5. List<T> list(Wrapper<T> queryWrapper):根据条件查询实体对象列表。
    6. long count(Wrapper<T> queryWrapper):根据条件查询记录总数。
  • 分页
    1. IPage<T> page(IPage<T> page, Wrapper<T> queryWrapper):分页查询实体对象列表。
     

5. 常用注解

  • Mapper接口
    @Mapper: 标识这是一个 MyBatis 的 Mapper 接口。
    extends BaseMapper<User>: 继承 BaseMapper,提供了基本的 CRUD 操作方法。
    @Select: 定义查询方法。
    @Insert: 定义插入方法。
    @Update: 定义更新方法。
    @Delete: 定义删除方法。
    @Options: 指定插入操作的选项,如主键生成策略
  • 实体类
    @TableName("user"): 指定实体类对应的数据库表名为 user。
    @TableId(type = IdType.AUTO): 指定 id 字段为主键,并且使用自增策略。
    @TableField("user_name"): 指定 name 字段对应数据库中的 user_name 列。
    @TableField("user_email"): 指定 email 字段对应数据库中的 user_email 列。

6. 总结


http://www.mrgr.cn/news/80266.html

相关文章:

  • 2024.12.15 TCP/IP 网络模型有哪几层?(二)
  • 【Flink-scala】DataStream编程模型之延迟数据处理
  • Docker的镜像
  • excel的单元格内如何换行
  • HDR视频技术之七:逆色调映射
  • 如何快速排查 Wi-Fi 的 TPUT 问题?
  • 基线检查:Windows安全基线.【手动 || 自动】
  • SQL server学习05-查询数据表中的数据(上)
  • gorm源码解析(二):核心设计与初始化
  • 计算机网络知识点全梳理(二.HTTP知识点总结)
  • PostgreSQL JSON/JSONB 查询与操作指南
  • git使用教程(超详细)-透彻理解git
  • 计算机网络知识点全梳理(一.TCP/IP网络模型)
  • Python自动化操作文档系列
  • 【Flink-scala】DataStream编程模型之延迟数据处理
  • vscode+msys2+clang+xmake c++开发环境搭建
  • 2024CAT开发测试 Web应用赛道
  • Nginx配置示例教程
  • ARM64平台实时linux操作系统xenomai4(EVL)构建安装简述
  • 使用rust语言创建python模块(pyo3+maturin)
  • 高等动力学中的正则变换
  • 在 macOS 下安装和使用 Clang Static Analyzer
  • 哈希【C++实现】
  • 2024年底-Sre面试回顾
  • 使用create-react-app创建工程时报错处理
  • 事件代理详解