一、MyBatisPlus介紹
MyBatisPlus是一個基於MyBatis的增強工具,提供了許多實用的功能,如分頁、自定義SQL、代碼生成等。MyBatisPlus還提供了一些自動化的功能,如自動填充、邏輯刪除等,方便開發人員使用。
二、表之間的關聯查詢
在資料庫開發中,表之間經常存在關聯關係,例如一個用戶有多個訂單,這時就需要進行關聯查詢。MyBatisPlus提供了多種方式實現表之間的關聯查詢。
1、使用@TableName註解
在實體類中使用@TableName註解指定表名和主鍵欄位,MyBatisPlus可以自動進行關聯查詢。例如有兩個實體類User和Order,Order表中有一個userId欄位與User表中的id欄位對應。
User實體類:
“`
@TableName(“user”)
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
//getter和setter省略
}
“`
Order實體類:
“`
@TableName(“order”)
public class Order {
@TableId(type = IdType.AUTO)
private Long id;
private Long userId;
private String orderNo;
//getter和setter省略
}
“`
使用MyBatisPlus的BaseMapper進行關聯查詢:
“`
public interface UserMapper extends BaseMapper {
@Select(“select * from user where id = #{id}”)
User findById(Long id);
@Select(“select * from user where name = #{name}”)
List findByName(String name);
}
“`
“`
public interface OrderMapper extends BaseMapper {
@Select(“select * from `order` where user_id = #{userId}”)
List findByUserId(Long userId);
}
“`
以上代碼中的@Select註解可以使用MyBatisPlus提供的Wrapper類進行構建,實現更加靈活的查詢方式。
2、使用@TableName和@TableField註解
在實體類中使用@TableName註解指定表名和主鍵欄位,使用@TableField註解指定關聯欄位與對應的實體類欄位名。例如有兩個實體類User和Order,Order表中有一個userId欄位與User表中的id欄位對應。
User實體類:
“`
@TableName(“user”)
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
@TableField(exist = false)
private List orders;
//getter和setter省略
}
“`
Order實體類:
“`
@TableName(“order”)
public class Order {
@TableId(type = IdType.AUTO)
private Long id;
private Long userId;
private String orderNo;
//getter和setter省略
}
“`
使用MyBatisPlus的BaseMapper進行關聯查詢:
“`
public interface UserMapper extends BaseMapper {
@Select(“select * from user where id = #{id}”)
User findById(Long id);
@Select(“select * from user where name = #{name}”)
List findByName(String name);
@Select(“select * from user where id = #{id}”)
@Results(id = “userOrderMap”, value = {
@Result(column = “id”, property = “id”),
@Result(column = “name”, property = “name”),
@Result(column = “age”, property = “age”),
@Result(column = “id”, property = “orders”,
many = @Many(
select = “com.example.mapper.OrderMapper.findByUserId”
))
})
User findWithOrdersById(Long id);
}
“`
“`
public interface OrderMapper extends BaseMapper {
@Select(“select * from `order` where user_id = #{userId}”)
List findByUserId(Long userId);
}
“`
以上代碼中的@Results、@Result、@Many註解可以使用MyBatisPlus提供的Wrapper類進行構建,實現更加靈活的查詢方式。
三、總結
MyBatisPlus提供了多種實現表之間關聯查詢的方式,使用起來都非常方便。在實際開發中,開發人員可以根據業務需求靈活選擇不同的方式來進行關聯查詢。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/303171.html