https://blog.csdn.net/qq_39778516/article/details/84191429(关联查询)
https://blog.csdn.net/zhw0596/article/details/81482770(多参数传值)
mybatis中的关联查询
(尊重劳动成果,转载请注明出处:https://blog.csdn.net/qq_39778516/article/details/84191429 consistencely的博客)
一对一
一对多
多对一
多对多
Mybatis中将多对一 看成了一对一
1、一对一查询:Account –> User
1)、在Account实体类中引用User类
2)、在IAccount.xml文件中配置关系映射
标签用于配置一对一关系映射
Accociation标签的属性:
Property:对应的是Account实体类中的user属性
Column:对应的是关联的外键
javaType:指的是association标签内容封装的是哪个实体类
2、一对多:User—> Account
1)、在User类中定义一个Account的List集合
标签用于配置一对多关系映射
collection中的属性:
Property:对应的是User实体类中的accounts属性
ofType:定义的是collection内容封装的实体类account
注意:collection中的javaType指的是封装成的实体类是一个list集合,不同于association中的javaType,可写可不写
JavaType和ofType都是用来指定对象类型的,但是JavaType是用来指定pojo中属性的类型,而ofType指定的是映射到list集合属性中pojo的类型。
pojo类:
publicclass User {
privateint id;
privateString username;
privateString mobile;
privateList<Post>posts;
}
user.xml:
<resultMap type="User" id="resultUserMap">
<result property="id" javaType="int" column="user_id" />
<result property="username" javaType="string" column="username" />
<result property="mobile" column="mobile" />
<!--javatype指定的是user对象的属性的类型(例如id,posts),而oftype指定的是映射到list集合属性中pojo的类型(本例指的是post类型)-->
<collection property="posts" ofType="com.spenglu.Post" javaType="java.util.ArrayList" column="userid">
<id property="id" column="post_id" javaType="int" jdbcType="INTEGER"/>
<result property="title" column="title" javaType="string" jdbcType="VARCHAR"/>
<result property="content" column="content" javaType="string" jdbcType="VARCHAR"/>
</collection>
</resultMap>
3,多对多:User <-- > Role 难点:在于SQL语句的编写
分析:在查询User时,将所对应的Role全部查出来
在查询Role时,将所对应的User全部查出来
相当于实现两个一对多的查询
1)、查询所有用户,并且将用户对应的所有角色都查出来
2)、查询所有角色,并且将角色对应的所有用户都查出来