11-表之间关系
目錄
- 一、表之間的關(guān)系
- 二、mybatis中的多表查詢
- Ⅰ一對(duì)一
- 1.示例:用戶和賬戶
- 2.步驟
- Ⅱ一對(duì)多查詢
- 1.實(shí)體類
- 2.map.xml 配置
- Ⅲ多對(duì)多
- 1.示例:用戶和角色
- 2.步驟
- 3.查詢角色同時(shí)獲取用戶信息代碼
- xml 配置
- 結(jié)果
- Ⅰ一對(duì)一
一、表之間的關(guān)系
- 一對(duì)多
- 多對(duì)一
- 一對(duì)一
- 多對(duì)多
特例:
? 如果拿出每一個(gè)訂單,他都只能屬于一個(gè)用戶
? 所以 Mybatis 就把多對(duì)一看成了一對(duì)一
二、mybatis中的多表查詢
Ⅰ一對(duì)一
1.示例:用戶和賬戶
2.步驟
- 讓用戶表和賬戶表之間具備一對(duì)多的關(guān)系:需要使用外鍵在賬戶表中添加
- 讓用戶和賬戶的實(shí)體類能體現(xiàn)出來(lái)一對(duì)多的關(guān)系
- 用戶的配置文件
- 賬戶的配置文件
- 當(dāng)我們查詢用戶時(shí),可以是同時(shí)得到用戶下所包含的賬戶信息
- 當(dāng)我們查詢賬戶時(shí),可以同時(shí)得到賬戶的所屬用戶信息
實(shí)體類參數(shù)
private Integer id;private Integer uid;private double money;private User user;xml 對(duì)應(yīng)
<?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"/><!--一對(duì)一的關(guān)系映射,配置封裝user的內(nèi)容--><!--javaType 告訴下面那個(gè)封裝到那個(gè)對(duì)象,因?yàn)橛袆e名,所以直接用 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>Ⅱ一對(duì)多查詢
一個(gè)用戶可擁有多個(gè)賬戶
1.實(shí)體類
private Integer id;private String username;private String password;private Date birthday;private String address;//一對(duì)多關(guān)系映射,主表實(shí)體應(yīng)該包括從表實(shí)體的集合引用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對(duì)象中 accounts 集合的映射--><!--ofType 集合中元素類型 account 是別名--><collection property="accounts" ofType="account"><!--column 起個(gè)別名--><id column="aid" property="id"/><result column="uid" property="uid"/><result column="money" property="money"/></collection></resultMap><!--不管有沒有賬戶,用戶的信息都得有,所以不能用內(nèi)連接,所以用左外連接,會(huì)返回左表的所有數(shù)據(jù)--><select id="findAll" resultMap="userAccountMap">select *from user u left outer join account a on u.id=a.uid;</select> </mapper>Ⅲ多對(duì)多
1.示例:用戶和角色
- 一個(gè)用戶可以有多個(gè)角色,一個(gè)角色有多個(gè)用戶
2.步驟
- 建立兩張表:用戶表,角色表
- 讓用戶表與角色表具有多對(duì)多,需要使用中間表
- 實(shí)現(xiàn)配置
- 查詢用戶,得到角色
- 查詢角色,得到用戶
3.查詢角色同時(shí)獲取用戶信息代碼
實(shí)體類
private Integer roleId;private String roleName;private String roleDesc;/*多對(duì)多的關(guān)系映射,一個(gè)角色可以賦予多個(gè)用戶*/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>結(jié)果
-----------每個(gè)角色信息------------- Role{roleId=1, roleName='院長(zhǎng)', roleDesc='學(xué)員管理者'} [User{id=1, username='龍族', password='123', birthday=Mon Oct 12 00:00:00 CST 1998, address='瀏陽(yáng)'}, User{id=3, username='罪人', password='123', birthday=Tue Jul 23 00:00:00 CST 2019, address='墮落之地'}] -----------每個(gè)角色信息------------- Role{roleId=2, roleName='CEO', roleDesc='首席執(zhí)行官'} [User{id=1, username='龍族', password='123', birthday=Mon Oct 12 00:00:00 CST 1998, address='瀏陽(yáng)'}, User{id=2, username='信守?cái)佚?#39;, password='123', birthday=Mon Oct 12 00:00:00 CST 1998, address='瀏陽(yáng)'}] -----------每個(gè)角色信息------------- Role{roleId=3, roleName='暗部', roleDesc='光明下的黑暗組織'} [User{id=2, username='信守?cái)佚?#39;, password='123', birthday=Mon Oct 12 00:00:00 CST 1998, address='瀏陽(yáng)'}]轉(zhuǎn)載于:https://www.cnblogs.com/zuiren/p/11406128.html
總結(jié)
- 上一篇: 10-动态SQL语句
- 下一篇: 12-JNDI