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类

mybatis关联查询及多参数传值

2)、在IAccount.xml文件中配置关系映射

mybatis关联查询及多参数传值

标签用于配置一对一关系映射
Accociation标签的属性:
Property:对应的是Account实体类中的user属性
Column:对应的是关联的外键
javaType:指的是association标签内容封装的是哪个实体类

2、一对多:User—> Account
1)、在User类中定义一个Account的List集合

mybatis关联查询及多参数传值

mybatis关联查询及多参数传值
标签用于配置一对多关系映射
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)、查询所有用户,并且将用户对应的所有角色都查出来

mybatis关联查询及多参数传值

2)、查询所有角色,并且将角色对应的所有用户都查出来

mybatis关联查询及多参数传值

相关文章: