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

学习MyBatis-Plus

	MyBatis-Plus是一个MyBatis的增强工具,它在MyBatis的基础上扩展了功能,同
时保留了MyBatis的基本特性,旨在简化开发并提高效率。以下是一个详细的MyBatis-
Plus使用教程,涵盖了从项目搭建到基础操作的过程。

一、MyBatis-Plus简介

MyBatis-Plus是MyBatis的增强版,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。它内置了通用Mapper、通用Service,仅通过少量配置即可实现单表大部分CRUD操作,并且提供了强大的条件构造器,支持Lambda形式调用,方便编写各类查询条件。

二、项目搭建

  1. 创建Spring Boot项目
    可以通过Spring Initializr(https://start.spring.io/)快速生成Spring Boot项目骨架。
    选择需要的项目元数据(如Group、Artifact、Name等),并添加依赖(如Spring Web、MyBatis-Plus Starter、MySQL Driver等)。
    2**. 引入依赖**
    在项目的pom.xml文件中引入MyBatis-Plus相关的依赖。以下是一个示例:
<dependencies>  <!-- MyBatis-Plus Spring Boot Starter -->  <dependency>  <groupId>com.baomidou</groupId>  <artifactId>mybatis-plus-boot-starter</artifactId>  <version>最新版本号</version> <!-- 请替换为实际可用的最新版本号 -->  </dependency>  <!-- MySQL 驱动 -->  <dependency>  <groupId>mysql</groupId>  <artifactId>mysql-connector-java</artifactId>  <version>8.0.xx</version> <!-- 请替换为实际可用的版本号 -->  </dependency>  <!-- Lombok(可选,用于简化实体类代码) -->  <dependency>  <groupId>org.projectlombok</groupId>  <artifactId>lombok</artifactId>  <optional>true</optional>  </dependency>  <!-- 其他需要的依赖 -->  
3. 配置数据源 在application.yml或application.properties文件中配置MySQL数据源信息。以下是一个application.yml的示例:
spring:  datasource:  driver-class-name: com.mysql.cj.jdbc.Driver  url: jdbc:mysql://localhost:3306/数据库名?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC  username: root  password: 密码
  1. 编写实体类
    根据数据库表结构编写对应的实体类,并使用Lombok简化代码(如果已引入Lombok依赖)。
import lombok.Data;  @Data  
public class User {  private Long id;  private String name;  private Integer age;  // 其他字段...  
}
  1. 编写Mapper接口
    Mapper接口继承自MyBatis-Plus提供的BaseMapper接口,MyBatis-Plus会自动实现该接口中的方法,无需编写实现类。
import com.baomidou.mybatisplus.core.mapper.BaseMapper;  public interface UserMapper extends BaseMapper<User> {  // 如果需要自定义方法,可以在这里添加  
}
  1. 扫描Mapper接口
    在Spring Boot启动类上添加@MapperScan注解,指定Mapper接口所在的包路径。
import org.mybatis.spring.annotation.MapperScan;  
import org.springframework.boot.SpringApplication;  
import org.springframework.boot.autoconfigure.SpringBootApplication;  @SpringBootApplication  
@MapperScan("com.example.mapper") // 替换为你的Mapper接口所在的包路径  
public class MybatisPlusApplication {  public static void main(String[] args) {  SpringApplication.run(MybatisPlusApplication.class, args);  }  
}

三、基础操作

MyBatis-Plus提供了丰富的CRUD操作方法,通过Mapper接口中的方法即可实现。以下是一些常用的操作示例:

  1. 插入数据
@Autowired  
private UserMapper userMapper;  public void insertUser(User user) {  userMapper.insert(user);  
}
2. 更新数据
public void updateUser(User user) {  userMapper.updateById(user); // 根据ID更新数据  
}
  1. 删除数据
public void deleteUserById(Long id) {  userMapper.deleteById(id); 
}

四、进阶功能

	MyBatis-Plus的高级操作涵盖了多个方面,包括但不限于条件查询、自定义SQL
、性能优化、逻辑删除、分页查询、自动填充等。以下将详细描述这些高级操作:

1. 条件查询
MyBatis-Plus提供了强大的条件构造器,如QueryWrapper和LambdaQueryWrapper,用于构建复杂的查询条件。

QueryWrapper:使用字符串模板方式构建查询条件,可能会因为字段名写错而导致运行时错误。
示例:

QueryWrapper<User> queryWrapper = new QueryWrapper<>();  
queryWrapper.eq("name", "John").lt("age", 30);  

List users = userMapper.selectList(queryWrapper);
LambdaQueryWrapper:使用Lambda表达式构建查询条件,类型安全,可以避免硬编码字段名。
示例:

LambdaQueryWrapper<User> lambdaQuery = Wrappers.lambdaQuery();  
lambdaQuery.eq(User::getName, "John").lt(User::getAge, 30);  
List<User> users = userMapper.selectList(lambdaQuery);

2. 自定义SQL
当MyBatis-Plus的自动CRUD无法满足需求时,可以在Mapper接口中自定义SQL。

在Mapper接口中添加自定义方法,并使用@Select、@Insert、@Update、@Delete等注解指定SQL语句。
示例:

@Mapper  
public interface UserMapper extends BaseMapper<User> {  @Select("SELECT * FROM user WHERE age > #{age}")  List<User> selectUsersOlderThanAge(@Param("age") int age);  
}

3. 性能优化
MyBatis-Plus提供了性能分析插件,可以帮助监控和优化SQL执行性能。

在配置类中配置性能分析插件。
示例:

@Bean  
@Profile({"dev", "test"}) // 只在开发和测试环境开启  
public PerformanceInterceptor performanceInterceptor() {  PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();  performanceInterceptor.setMaxTime(1000); // 设置SQL执行的最大时间  performanceInterceptor.setFormat(true); // 是否格式化SQL  return performanceInterceptor;  
}

4. 逻辑删除
逻辑删除是指在数据库中用一个字段标识数据是否被删除,而不是真的将数据行删除。

在实体类中使用@TableLogic注解标记逻辑删除属性。
示例:

@TableLogic  
private Integer deleted;
在配置文件中配置逻辑删除字段的策略。
示例(application.properties):properties
mybatis-plus.global-config.db-config.logic-delete-field=deleted  
mybatis-plus.global-config.db-config.logic-delete-value=1  
mybatis-plus.global-config.db-config.logic-not-delete-value=0

5. 分页查询
MyBatis-Plus内置了分页插件,可以很方便地实现分页查询。

使用Page对象或IPage接口进行分页查询。
示例:

int pageNum = 1;  
int pageSize = 10;  
Page<User> page = new Page<>(pageNum, pageSize);  
QueryWrapper<User> queryWrapper = new QueryWrapper<>();  
queryWrapper.eq("age", 18);  
page = userMapper.selectPage(page, queryWrapper);  
List<User> users = page.getRecords();  
long total = page.getTotal();
  1. 自动填充
    MyBatis-Plus提供了自动填充功能,可以自动为实体类的字段赋值。

使用@TableField注解的fill属性指定填充策略(INSERT、UPDATE、INSERT_UPDATE)。
示例:

@TableField(fill = FieldFill.INSERT)  
private LocalDateTime createTime;  @TableField(fill = FieldFill.UPDATE)  
private LocalDateTime updateTime;

实现MetaObjectHandler接口来自定义填充逻辑。
示例:

@Component  
public class MyMetaObjectHandler implements MetaObjectHandler {  @Override  public void insertFill(MetaObject metaObject)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • (一) 初入MySQL 【认识和部署】
  • 【C语言从不挂科到高绩点】02-变量、数据类型、标识符、关键字
  • C的温故而知新:位操作(C Primer Plus第十五章)
  • 亲测解决electron的Unhandled Rejection
  • 华为OD 山峰个数 C语言实现
  • React antd Table表格动态合并单元格
  • 使用python请求接口方式(可进行并发测试)例子解析
  • C语言:编程世界的基石
  • JVM 方法区存放那些内容
  • vue将两个项目整合成一个
  • nginx-rewrite、if、浏览器分离、防盗链
  • PHP 全攻略:从环境搭建到实战项目的深度探索
  • 国产游戏技术能否引领全球?
  • 《算法竞赛进阶指南》0x26广搜变形
  • ROS实现简单避障
  • 2017 前端面试准备 - 收藏集 - 掘金
  • 2017-08-04 前端日报
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • Intervention/image 图片处理扩展包的安装和使用
  • java8 Stream Pipelines 浅析
  • Javascript 原型链
  • java概述
  • js递归,无限分级树形折叠菜单
  • miaov-React 最佳入门
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • PHP CLI应用的调试原理
  • python_bomb----数据类型总结
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • vue2.0开发聊天程序(四) 完整体验一次Vue开发(下)
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 高程读书笔记 第六章 面向对象程序设计
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 跳前端坑前,先看看这个!!
  • 线上 python http server profile 实践
  • 异步
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • # C++之functional库用法整理
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #include到底该写在哪
  • (2)STM32单片机上位机
  • (23)Linux的软硬连接
  • (a /b)*c的值
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (五)MySQL的备份及恢复
  • (原)本想说脏话,奈何已放下
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .Net CoreRabbitMQ消息存储可靠机制
  • .Net Memory Profiler的使用举例