⭕一对一查询
一个账户只能被一个用户所拥有
表结构
user表
account表
准备实体类
⏹用户实体类
public class User {
private Integer id;
private String username;
private String password;
private String sex;
private String address;
private Date birthday;
}
⏹账户实体类
public class Account {
private Integer id;
private String name;
private Float money;
private Integer u_id;
// 一个账户只能对应一个用户
private User user;
Mybatis查询
<!--通过association标签分隔的方式来进行映射,这种方式需要把account和account中包含的user的所以的信息都进行映射-->
<!--一般用这种方式比较多,因为可以通过association标签来直观的看出到底包含了几个对象,以及对象和对象之间的界限-->
<resultMap id="accounts" type="Account">
<id column="id" property="id"></id>
<result column="name" property="name"></result>
<result column="money" property="money"></result>
<result column="u_id" property="u_id"></result>
<!--映射user中的属性-->
<!--映射单个对象-->
<association property="user" javaType="user">
<id column="uid" property="id"></id>
<result column="uname" property="username"></result>
<result column="address" property="address"></result>
<result column="birthday" property="birthday"></result>
<result column="password" property="password"></result>
<result column="sex" property="sex"></result>
</association>
</resultMap>
<select id="findAllAccountAssociateUser" resultMap="accounts">
select * from account a, user u where a.u_id = u.uid
</select>
⭕一对多查询
一个账户只能被一个用户所拥有,但是一个用户却可以拥有多个账户
数据库数据
准备实体类
⏹账户实体类
public class Account {
private Integer id;
private String name;
private Float money;
private Integer u_id;
}
⏹用户实体类
public class User {
private Integer id;
private String username;
private String password;
private String sex;
private String address;
private Date birthday;
// 一个用户可以拥有多个账户,因此类型为List
public List<Account> account;
}
⏹SQL查询
用户用户id为
2
,用户名为lisi
的用户由两个账户,一个是百度,另一个是微博
Mybatis查询
<resultMap id="users" type="User">
<id column="uid" property="id"></id>
<result column="uname" property="username"></result>
<result column="password" property="password"></result>
<result column="address" property="address"></result>
<result column="birthday" property="birthday"></result>
<result column="sex" property="sex"></result>
<!--Collection : 映射account的 属性
property: 对应的属性名 User中包含的Account的属性名
ofType: 集合中的元素类型: 和association 中javaType效果一致
-->
<collection property="account" ofType="account">
<id column="id" property="id" />
<result column="name" property="name" />
<result column="money" property="money" />
<result column="u_id" property="u_id" />
</collection>
</resultMap>
<select id="findUserAndAccount" resultMap="users">
select * from user u left join account a on u.uid = a.u_id
</select>
查询效果