Mybatis关联映射

本文介绍了Mybatis的关联映射概念,包括如何关联单个对象和多个对象,并详细阐述了何时使用关联映射。通过案例展示了如何通过userID查询用户信息及关联的笔记本信息,以及查询笔记信息时关联用户信息的实现方式,探讨了一条SQL语句和两条SQL语句的优缺点。
摘要由CSDN通过智能技术生成

Mybatis的关联映射

关联映射:将数据库中的有关联关系的表,以实体对象引用的方式体现出来

关联单个对象

关联多个对象

Class user{

Private List<Book> books

}

Class Book{

Private User user

}

 

什么时候使用

业务需要对数据库进行关联查询的时候

 

可以通过一条SQL语句完成关联映射,也可以通过两条SQL语句进行关联查询

 

案例:

通过userID查询用户信息和关联的笔记本信息

<!-- 关联个信息 -->

1:User实体类添加笔记本对象并实现get/set 方法

2:定义Dao,配置Mapper文件

 

<!--使用两条SQL语句加载数据  -->

<mapper namespace="cn.tedu.cloudnote.dao.RelationDao">

<select id="findUserAndBooks" 

parameterType="string" 

resultMap="userMap1">

select *from cn_user

where cn_user_id=#{id}

</select>

<resultMap type="cn.tedu.cloudnote.entity.User" id="userMap1">

<id property="id" column="cn_user_id"/>

<result property="name" column="cn_user_name"/>

<!-- 指定books属性是一个List集合 ,泛型为Book-->

<!-- javaType返回类型 -->

<collection property="books"

 javaType="java.util.List" 

 ofType="cn.tedu.cloudnote.entity.Book" 

 select="findBooks" 

 column="cn_user_id">

</collection>

</resultMap>

<!-- 查询book -->

<select id="findBooks" 

parameterType="string"

resultType="cn.tedu.cloudnote.entity.Book">

select *from cn_notebook

where cn_user_id=#{userId}

</select>

</mapper>



<!-- 一条SQL加载User -->



<select id="findUserAndBooks1"

parameterType="string"

resultMap="userMap2">

select *from cn_user u join cn_notebook b

on(u.cn_user_id=b.cn_user_id)

where u.cn_user_id=#{userId}

</select>

<resultMap 

type="cn.tedu.cloudnote.entity.User" 

id="userMap2">

<!-- 定义cn_user字段的加载,不能省略 -->

<id property="id" column="cn_user_id"/>

<result property="name" column="cn_user_name"/>

<result property="password" column="cn_user_password"/>

<result property="token" column="cn_user_token"/>

<result property="nick" column="cn_user_nick"/>

<collection 

property="books" 

javaType="java.util.List" 

ofType="cn.tedu.cloudnote.entity.Book">

<id property="id" column="cn_notebook_id"/>

<result property="userId" column="cn_user_id"/>

<result property="typeId" column="cn_notebook_type_id"/>

<result property="name" column="cn_notebook_name"/>

<result property="desc" column="cn_notebook_desc"/>

<result property="createTime" column="cn_notebook_createtime"/>

</collection>

</resultMap>

</mapper>

 

 

一个SQL语句:语句简单,但配置繁琐,与数据库两次交互

两个SQL语句:语句复杂,但配置简单,与数据库一次交互

 

****注意字数据库字段名的书写(不会报错,但是为null)

 

3:通过测试类验证查询结果

 

案例

通过查询笔记信息,关联用户信息

 <!-- 关联单个信息 -->

在Book实体类中添加User对象并实现get/set方法

<!-- 关联单个信息 -->

<!-- 一个SQL语句查询Book -->

<select id="findBookAndUser" resultMap="bookMap1">

select *

from cn_notebook

b

join cn_user u

on(b.cn_user_id=u.cn_user_id)

</select>

<resultMap id="bookMap1" type="cn.tedu.cloudnote.entity.Book">

<!-- 定义cn_notebook映射关系 -->

<id property="id" column="cn_notebook_id" />

<result property="userId" column="cn_user_id" />

<result property="typeId" column="cn_notebook_type_id" />

<result property="name" column="cn_notebook_name" />

<result property="desc" column="cn_notebook_desc" />

<result property="createTime" column="cn_notebook_createtime" />

<!-- 定义cn_user映射关系 -->

<association property="user" javaType="cn.tedu.cloudnote.entity.User">

<id property="id" column="cn_user_id" />

<result property="name" column="cn_user_name" />

<result property="password" column="cn_user_password" />

<result property="token" column="cn_user_token" />

<result property="nick" column="cn_user_nick" />

</association>



</resultMap>

<!-- 两个SQL语句实现单个对象关联 -->

<select id="findBookAndUser1" resultMap="bookMap2">

select

cn_notebook_id as id,

cn_user_id as userId,

cn_notebook_name as name,

cn_notebook_type_id as typeId,

cn_notebook_desc as "desc",

cn_notebook_createtime as createTime

from

cn_notebook

</select>

<resultMap id="bookMap2" type="cn.tedu.cloudnote.entity.Book">

<!-- Book属性映射定义,可省略 -->

<association property="user" javaType="cn.tedu.cloudnote.entity.User"

select="findUser" column="userId">

</association>

</resultMap>

<select id="findUser" parameterType="String"

resultType="cn.tedu.cloudnote.entity.User">

select

cn_user_id as id,

cn_user_name as name,

cn_user_password as password,

cn_user_token as token,

cn_user_nick as nick

from cn_user

where cn_user_id=#{userId}

</select>

</mapper>

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值