11-表之间关系
目錄
- 一、表之間的關系
- 二、mybatis中的多表查詢
- Ⅰ一對一
- 1.示例:用戶和賬戶
- 2.步驟
- Ⅱ一對多查詢
- 1.實體類
- 2.map.xml 配置
- Ⅲ多對多
- 1.示例:用戶和角色
- 2.步驟
- 3.查詢角色同時獲取用戶信息代碼
- xml 配置
- 結果
- Ⅰ一對一
一、表之間的關系
- 一對多
- 多對一
- 一對一
- 多對多
特例:
? 如果拿出每一個訂單,他都只能屬于一個用戶
? 所以 Mybatis 就把多對一看成了一對一
二、mybatis中的多表查詢
Ⅰ一對一
1.示例:用戶和賬戶
2.步驟
- 讓用戶表和賬戶表之間具備一對多的關系:需要使用外鍵在賬戶表中添加
- 讓用戶和賬戶的實體類能體現出來一對多的關系
- 用戶的配置文件
- 賬戶的配置文件
- 當我們查詢用戶時,可以是同時得到用戶下所包含的賬戶信息
- 當我們查詢賬戶時,可以同時得到賬戶的所屬用戶信息
實體類參數
private Integer id;private Integer uid;private double money;private User user;xml 對應
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="dao.IAccountDao"><!--定義封裝account和user的resultMap--><resultMap id="accountUserMap" type="account"><id property="id" column="aid"/><result property="uid" column="uid"/><result property="money" column="money"/><!--一對一的關系映射,配置封裝user的內容--><!--javaType 告訴下面那個封裝到那個對象,因為有別名,所以直接用 user--><association property="user" column="uid" javaType="user"><id property="id" column="id" /><result property="username" column="username"/><result property="password" column="password"/><result property="birthday" column="birthday"/><result property="address" column="address"/></association></resultMap><select id="findAll" resultMap="accountUserMap">select u.*,a.id as aid,a.uid,a.money from account a,user u where u.id=a.id;</select> </mapper>Ⅱ一對多查詢
一個用戶可擁有多個賬戶
1.實體類
private Integer id;private String username;private String password;private Date birthday;private String address;//一對多關系映射,主表實體應該包括從表實體的集合引用private List<Account> accounts;2.map.xml 配置
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="dao.IUserDao"><!--定義user的resultMap--><resultMap id="userAccountMap" type="user"><id property="id" column="id"/><result property="username" column="username"/><result property="password" column="password"/><result property="birthday" column="birthday"/><result property="address" column="address"/><!--配置 user對象中 accounts 集合的映射--><!--ofType 集合中元素類型 account 是別名--><collection property="accounts" ofType="account"><!--column 起個別名--><id column="aid" property="id"/><result column="uid" property="uid"/><result column="money" property="money"/></collection></resultMap><!--不管有沒有賬戶,用戶的信息都得有,所以不能用內連接,所以用左外連接,會返回左表的所有數據--><select id="findAll" resultMap="userAccountMap">select *from user u left outer join account a on u.id=a.uid;</select> </mapper>Ⅲ多對多
1.示例:用戶和角色
- 一個用戶可以有多個角色,一個角色有多個用戶
2.步驟
- 建立兩張表:用戶表,角色表
- 讓用戶表與角色表具有多對多,需要使用中間表
- 實現配置
- 查詢用戶,得到角色
- 查詢角色,得到用戶
3.查詢角色同時獲取用戶信息代碼
實體類
private Integer roleId;private String roleName;private String roleDesc;/*多對多的關系映射,一個角色可以賦予多個用戶*/private List<User> users;xml 配置
<mapper namespace="dao.IRoleDao"><!--定義 role 表的 ResultMao--><resultMap id="roleMap" type="role"><id property="roleId" column="rid"/><result property="roleName" column="role_name"/><result property="roleDesc" column="role_desc"/><collection property="users" ofType="user"><id property="id" column="id"/><result property="username" column="username"/><result property="password" column="password"/><result property="birthday" column="birthday"/><result property="address" column="address"/></collection></resultMap><select id="findAll" resultMap="roleMap">select u.*,r.id as rid,r.role_name,r.role_desc from role rleft outer join user_role ur on r.id =ur.ridleft outer join user u on u.id =ur.uid</select> </mapper>結果
-----------每個角色信息------------- Role{roleId=1, roleName='院長', roleDesc='學員管理者'} [User{id=1, username='龍族', password='123', birthday=Mon Oct 12 00:00:00 CST 1998, address='瀏陽'}, User{id=3, username='罪人', password='123', birthday=Tue Jul 23 00:00:00 CST 2019, address='墮落之地'}] -----------每個角色信息------------- Role{roleId=2, roleName='CEO', roleDesc='首席執行官'} [User{id=1, username='龍族', password='123', birthday=Mon Oct 12 00:00:00 CST 1998, address='瀏陽'}, User{id=2, username='信守斬龍', password='123', birthday=Mon Oct 12 00:00:00 CST 1998, address='瀏陽'}] -----------每個角色信息------------- Role{roleId=3, roleName='暗部', roleDesc='光明下的黑暗組織'} [User{id=2, username='信守斬龍', password='123', birthday=Mon Oct 12 00:00:00 CST 1998, address='瀏陽'}]轉載于:https://www.cnblogs.com/zuiren/p/11406128.html
總結
- 上一篇: 10-动态SQL语句
- 下一篇: 12-JNDI