一个账户对应一个用户 设置结果映射 (未开启懒加载)
Mybatis.xml配置 : https://blog.csdn.net/weixin_43309893/article/details/119330742
需要用到的实体类
上方为需要映射的类(需求为查询账户及其账户所对应的用户)
** 例子类似于银行账户 与身份证之间的关系(一个银行账户,只能对应一张身份证)**
** 数据库中为一对一的表关系 **
<!-- id对应下方select标签中的resultMap中的值 type则表示需要映射的是实体类中的哪个属性 -->
<!-- account为已经配置好的别名 -->
<resultMap id="accountUser_map" type="account">
<!-- prooerty:此属性为实体类中的属性 column:此属性对应数据查询出来的字段值 -->
<!-- 注意:如果select查询语句为某个字段设置了别名,请写为别名 -->
<id property="id" column="aid"/><!-- 本字段在表中的属性为id,设置别名之后为aid -->
<result property="uid" column="uid"/>
<result property="money" column="money"/>
<!-- 映射user 当存在一对一关系时 请首先判断主从关系,主要是查询谁 -->
<!-- 本映射主要映射为account表,因此account表为主表 user表为从表 -->
<!-- 从表映射也为user 因为一个账户只能对应一个用户,因此不需要用到Collection标签 -->
<!-- 当映射的属性为一对一的关系时间 / 当映射的关系为一对一时 : 关键字为javaType -->
<!-- 当映射的属性为一对多的关系时间 / 当映射的关系为一对多时 :
关键字为ofType 同时映射从表的标签也设置为Collections -->
<association property="user" javaType="user">
<id property="id" column="id"/>
<result property="username" column="username"/>
<result property="birthday" column="birthday"/>
<result property="gender" column="gender"/>
<result property="address" column="address"/>
</association>
</resultMap>
<!-- findAccountAll_plus : 为接口中的方法名称-->
<!-- accountUser_map : 和上方id为accountUser_map的结果映射对应 -->
<select id="findAccountAll_plus" resultMap="accountUser_map">
select
a.id as aid,
a.uid,
a.money,
u.id,
u.username,
u.birthday,
u.gender,
u.address
from
account as a,user as u
where
a.uid = u.id
</select>
以上为一对一设置已完成==========================================================================
一个用户对应多个账户 设置结果映射 (未开启懒加载)
<!-- 设置结果映射 设置一对多的结果映射 一个用户存在多个账户 -->
<resultMap id="accountUser_map" type="user">
<id property="id" column="id"/>
<result property="username" column="username"/>
<result property="birthday" column="birthday"/>
<result property="gender" column="gender"/>
<result property="address" column="address"/>
<!-- 映射user中的集合 这里为全类名的写法 -->
<!-- 当配置别名完成之后,另一种写法为 : ofType="Account"-->
<collection property="accounts" ofType="com.study.domain.Account">
<id property="id" column="aid"/>
<result property="uid" column="uid"/>
<result property="money" column="money"/>
</collection>
</resultMap>
<!-- sql语言根据自己的mysql表中的数据进行定制 -->
<select id="findUserAccount" resultMap="accountUser_map">
select
u.* , a.id as aid , a.uid , a.money
from
user u left outer join account a
on a.uid = u.id
</select>
以上为一对多设置已完成==========================================================================
一个账户对应一个用户 (当开启懒加载和按需加载之后)
resultMap需要设置相应的select值
<resultMap id="account_map" type="account">
<id property="id" column="id"/>
<result property="uid" column="uid"/>
<result property="money" column="money"/>
<!-- 一对一关系映射 uid为需要传递的值 javaType:为需要映射的类 select:需要延迟加载什么,需要用到的方法是什么? -->
<association property="user" column="uid" javaType="User" select="com.xxxx.dao.IUserDao.findByIdUser">
<id property="id" column="id"/>
<result property="username" column="username"/>
<result property="birthday" column="birthday"/>
<result property="gender" column="gender"/>
<result property="address" column="address"/>
</association>
</resultMap>
<select id="findAll_01" resultMap="account_map">
select * from account
</select>
select语句所用到的方法 >>findAll_01() 《select标签那块》
懒加载需要用的方法,需要传递进去一个参数,这个参数与 column=“uid” 对应
只有传进去相应的值,才能查询到对应的用户,然后将对应的数据封装为User对象
.
findByIdUser (resultMap映射对应方法select属性那块)
select=“com.xxxx.dao.IUserDao.findByIdUser”
分割线==================================================================================================
一个用户对应多个账户 (当开启懒加载和按需加载之后)
<!-- 配置一对多 一个用户对应多个账户 -->
<resultMap id="userAccount_map" type="user">
<id property="id" column="id"/>
<result property="username" column="username"/>
<result property="birthday" column="birthday"/>
<result property="gender" column="gender"/>
<result property="address" column="address"/>
<!-- 映射AccountDao中所返回的数据 因为一个用户对应多个账户,因此封装为账户集合 -->
<collection property="accounts" column="id" ofType="account" select="com.xxxx.dao.IAccountDao.findAllByUID">
<id property="id" column="id"/>
<result property="uid" column="uid"/>
<result property="money" column="money"/>
</collection>
</resultMap>
<select id="findAll_UserAccount" resultMap="userAccount_map">
select * from user
</select>
findAllByUID方法(用户id对应)
扫描二维码关注公众号,回复:
13163699 查看本文章

END================