简介
MyBatis-Plus (简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变。Mybatis-plus官网地址
注意,在引入了mybatis-plus之后,不要再额外引入mybatis和mybatis-spring,避免因为版本差异导致的问题。
快速上手
1.导入依赖
根据自身环境的版本选择mybatis-plus版本:
springboot3.+和jdk17以上版本选择mybatis-plus-boot3-starter
XML
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot3-starter</artifactId>
<version>yourversion</version>
</dependency>
其他老版本选择mybatis-plus-boot-starter
XML
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-spring-boot3-starter -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot-starter</artifactId>
<version>yourversion</version>
</dependency>
2.编写配置:
jdbc连接配置(username、password、驱动)
Mybatis配置(连接池对象、映射文件所在包等)
编写配置的具体形式看自己使用的是spring还是springboot
3.编写实体类和mapper接口
plus提供了一系列默认的sql方法,仅测试可以不用额外自己编写。
常用注解
先看一个示范实体类:
java
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@TableName("user")
public class MyUser {
@TableId(value = "id", type = IdType.AUTO)
private int id;
@TableField("name")
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "MyUser{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
@TableName
用于指定当前实体类对应数据库中哪张表
@TableId
给属性绑定表中的主键,其中type属性是声明主键策略:
IdType.AUTO 数据库自增主键(需数据库支持,如 MySQL 的 AUTO_INCREMENT)
IdType.ASSIGN_ID 雪花算法生成 Long 类型主键(默认策略)
IdType.ASSIGN_UUID UUID 生成字符串类型主键(需字段类型为 String)
IdType.INPUT 手动输入主键(需在代码中赋值)
IdType.NONE 无策略,依赖数据库默认行为
@TableField
给属性绑定表中的列
当然,上述是对应单表的时候。如果你的查询结果对应多张表中的数据,就不再能够用这三个注解了。
我们在多表查询的语句中使用别名,mybatis会自动匹配查询结果和实体类的数据:
java
// DTO 类(无需继承任何基类)
public class UserOrderDTO {
// 用户表字段
private Long userId;
private String userName;
// 订单表字段
private String orderId;
private BigDecimal orderAmount;
// 其他字段(如关联表的统计信息)
private Integer totalOrders;
// Getters & Setters
}
XML
<!-- XML 中编写 SQL -->
<select id="selectUserOrders" resultType="com.example.dto.UserOrderDTO">
SELECT
u.id AS userId,
u.name AS userName,
o.order_id AS orderId,
o.amount AS orderAmount,
COUNT(o.id) AS totalOrders
FROM user u
LEFT JOIN order o ON u.id = o.user_id
WHERE u.id = #{userId}
GROUP BY u.id
</select>
条件构造器
条件构造器的相关功能通过一系列Wrapper类实现。
下面是两组示范:
sql语句:select name,email from tb_user where address like 值1 and age>=值2;
java
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.select("name","email")
.like("address","a")
.gt("age","30");
sql语句:update tb_user set age = age+10 where uid in(1,3,5);
java
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
updateWrapper.setSql("age = age+10")
.in("uid", Arrays.asList(1,3,5));