一对一举例:每个人对应的身份证号,身份证号是唯一的,身份证号跟我们就是一对一,每个人的账号信息,每一个账号只能属于一个人,账号和我们也是一对一
多对一举例:账号信息跟我们是一对一,反过来就是多对一,我们可以用多个账号,学生对应老师也是多对一
准备两张表,账户表,用户信息表
一对一查询
- 是在主实体类(Account)中添加需要关联的实体类(userInfo)作为属性,再配合映射文件的ResultMap的association来实现
AccountMapper接口:
public interface AccountMapper {
List<Account> findAll();
}
AccountMapper.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="com.one.to.one.mapper.AccountMapper">
<resultMap id="resultMap" type="account">
<id column="id" property="id"></id>
<result column="uid" property="uid"></result>
<result column="money" property="money"></result>
<!--
association:配置属性一对一
property:对应Account里面的userInfo属性名
javaType:这个属性的类型
-->
<association property="userInfo" javaType="javaType="com.one.to.one.entity.UserInfo"">
<id column="id" property="id"></id>
<result column="name" property="name"></result>
<result column="age" property="age"></result>
<result column="gender" property="gender"></result>
<result column="address" property="address"></result>
</association>
</resultMap>
<select id="findAll" resultMap="resultMap">
SELECT
a.*,
u.id,
u.`NAME`,
u.AGE,
u.GENDER,
u.ADDRESS
FROM
account a,
user_info u
WHERE a.UID = u.ID
</select>
</mapper>
Account实体:
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Account {
private Integer id;
private Integer uid;
private Double money;
private UserInfo userInfo;
}
一对多查询
- 是在主实体类(userInfo)中添加需要关联的实体类(Account)作为属性,再配合映射文件的ResultMap的collection来实现 ,⼀对多查询结果查询映射,⽐如用户有多个账户
UserInfoMapper接口:
public interface UserInfoMapper {
List<UserInfo> findAll();
}
UserMapper.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="com.one.to.one.mapper.UserInfoMapper">
<resultMap id="resultMap" type="UserInfo">
<id column="id" property="id"></id>
<result column="name" property="name"></result>
<result column="age" property="age"></result>
<result column="gender" property="gender"></result>
<result column="birthday" property="birthday"></result>
<result column="address" property="address"></result>
<result column="birthday" property="birthday"></result>
<result column="createTime" property="createTime"></result>
<result column="updateTime" property="updateTime"></result>
<!--
collection:是用于建立一对多中集合属性的对应关系
property:pojo类中集合类属性的名称
ofType:指定集合中对象类型
-->
<collection property="accounts" ofType="com.one.to.one.entity.Account">
<id column="aid" property="id"></id>
<result column="uid" property="uid"></result>
<result column="money" property="money"></result>
</collection>
</resultMap>
<select id="findAll" resultMap="resultMap">
SELECT u.`NAME`,
u.AGE,
u.GENDER,
u.ADDRESS,
a.*
FROM user_info u
LEFT JOIN account a ON u.id = a.UID;
</select>
</mapper>
UserInfo实体:
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class UserInfo {
private Integer id;
private String name;
private Integer age;
private String gender;
private Date birthday;
private String address;
private Date createTime;
private Date updateTime;
private List<Account> accountList;
}