簡介
????????MyBatis-Plus (簡稱 MP)是一個 MyBatis的增強工具,在 MyBatis 的基礎上只做增強不做改變。Mybatis-plus官網地址
? ? ? ? 注意,在引入了mybatis-plus之后,不要再額外引入mybatis和mybatis-spring,避免因為版本差異導致的問題。
快速上手
1.導入依賴
根據自身環境的版本選擇mybatis-plus版本:
springboot3.+和jdk17以上版本選擇mybatis-plus-boot3-starter
<!-- 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
<!-- 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方法,僅測試可以不用額外自己編寫。
常用注解
? ? ? ? 先看一個示范實體類:
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;}@Overridepublic 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會自動匹配查詢結果和實體類的數據:
// DTO 類(無需繼承任何基類)
public class UserOrderDTO {// 用戶表字段private Long userId;private String userName;// 訂單表字段private String orderId;private BigDecimal orderAmount;// 其他字段(如關聯表的統計信息)private Integer totalOrders;// Getters & Setters
}
<!-- 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 totalOrdersFROM user uLEFT JOIN order o ON u.id = o.user_idWHERE u.id = #{userId}GROUP BY u.id
</select>
條件構造器
? ? ? ? 條件構造器的相關功能通過一系列Wrapper類實現。
下面是兩組示范:
sql語句:select name,email from tb_user where address like 值1 and age>=值2;
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);
UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();updateWrapper.setSql("age = age+10").in("uid", Arrays.asList(1,3,5));