mybatis中基于注解方式的多表查詢
開發(fā)前的準(zhǔn)備
當(dāng)前文章中所用到的表以及數(shù)據(jù), 用到的mybatis配置文件可以去這篇文章中查看mybatis基于xml方式的多表查詢
唯一要注意的是我們?cè)趍ybatis配置文件中, 不再需要加載核心配置文件, 而是要指明使用注解的包
<mappers>
<package name="com.raylee.mapper"/>
</mappers>
復(fù)制代碼用戶類
public class User {
private int id;
private String username;
private String password;
private List<Order> orderList;
private List<Role> roleList;
}
復(fù)制代碼訂單類
public class Order {
private int id;
private Date ordertime;
private int total;
private User user;
}
復(fù)制代碼角色類
public class Role {
private int id;
private String roleName;
private String roleDesc;
}
復(fù)制代碼注解關(guān)鍵字
@Insert 添加sql語(yǔ)句使用的注解
@Update 更新sql語(yǔ)句使用的注解
@Delete 刪除sql語(yǔ)句使用的注解
@Select 查詢sql語(yǔ)句使用的注解
@Result 當(dāng)使用查詢語(yǔ)句時(shí), 返回單條數(shù)據(jù)時(shí)的注解
@Results 當(dāng)使用查詢語(yǔ)句時(shí), 返回多條數(shù)據(jù)時(shí)的注解, 配合@Result一起使用
@One 在一對(duì)一的查詢結(jié)果時(shí)使用的注解, 例如: 一個(gè)訂單對(duì)應(yīng)一個(gè)用戶
@Many 在一對(duì)多的查詢結(jié)果時(shí)使用的注解, 例如: 一個(gè)用戶可以有多個(gè)訂單
單表查詢
通過(guò)id查詢users表
@Select("select * from users where id = #{id}")
public User findById(int id);
復(fù)制代碼通過(guò)用戶id查詢orders表
@Select("select * from orders where uid = #{uid}")
public Order findByUid(int uid);
復(fù)制代碼一對(duì)一查詢
一個(gè)訂單只屬于一個(gè)用戶, 當(dāng)我們查詢訂單數(shù)據(jù)時(shí)也需要查詢?cè)撚唵嗡鶎?duì)應(yīng)的用戶數(shù)據(jù)
定義的接口
public interface OrderMapper {
@Select("select * from orders")
@Results({
@Result(column = "id", property = "id"),
@Result(column = "ordertime", property = "ordertime"),
@Result(column = "total", property = "total"),
@Result(
property = "user",
// 根據(jù)哪個(gè)字段去查詢users表中的數(shù)據(jù)
column = "uid",
javaType = User.class,
one = @One(select = "com.raylee.mapper.UserMapper.findById")
)
})
public List<Order> findAll();
}
復(fù)制代碼注解分析
首先, 通過(guò)@Select注解查詢出所有的訂單
然后, 通過(guò)@Results進(jìn)行字段和實(shí)體類屬性的映射
最后, 通過(guò)@One再去進(jìn)行每個(gè)訂單中用戶的數(shù)據(jù)查詢
一對(duì)多查詢
定義的接口
@Select("select * from users")
@Results({
@Result(column = "id", property = "id"),
@Result(column = "username", property = "username"),
@Result(column = "password", property = "password"),
@Result(
property = "orderList",
column = "id",
javaType = List.class,
many = @Many(select = "com.raylee.mapper.OrderMapper.findByUid")
)
})
public List<User> findUserOrderAll();
復(fù)制代碼注解分析
首先, 通過(guò)@Select注解查詢出所有的用戶
然后, 通過(guò)@Results進(jìn)行字段和實(shí)體類屬性的映射
最后, 通過(guò)@Many再去orders表中查詢用戶所有的訂單數(shù)據(jù)
多對(duì)多查詢
定義的接口
@Select("select * from users")
@Results({
@Result(column = "id", property = "id"),
@Result(column = "username", property = "username"),
@Result(column = "password", property = "password"),
@Result(
property = "roleList",
javaType = List.class,
column = "id",
many = @Many(select = "com.raylee.mapper.RoleMapper.findByUid")
)
})
public List<User> findUserRoleAll();
@Select("select * from user_role ur, roles r where ur.rid = r.id and ur.uid = #{uid}")
public List<Role> findByUid(int uid);
復(fù)制代碼注解分析
首先, 通過(guò)@Select注解查詢出所有的用戶
然后, 通過(guò)@Results進(jìn)行字段和實(shí)體類屬性的映射
最后, 通過(guò)@Many再去roles表和user_role中間表中查詢用戶所有角色信息
作者:云淡風(fēng)輕的博客
鏈接:https://juejin.cn/post/7013270827290329124
來(lái)源:稀土掘金
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
