MyBatis - 一对一 - 一对多 关联查询

MySql创建外键:

ALTER TABLE 表名 ADD FOREIGN KEY [外键名字] (外键字段) REFERENCES 父表 (主键字段);

关联查询:

一对一:

a,业务拓展类(两个表用外键连接,查询时返回两个表的内容)

一个类对应一张表,查询时要接收两个表的数据,即新建一个类继承父类,父类对应一张表,子类补充另一张表的变量

查询sql:

    <!--利用业务拓展类实现一对一-->
    <select id="mutilSql" resultType="idcardAndInfo" parameterType="int">
        SELECT c.*,i.* FROM idcard c INNER JOIN cardinfo i
        ON c.cardid=i.cardid
        WHERE c.id = #{id}
    </select>

entity

public class idcardAndInfo extends idcard {
    private String detail;//父类对应一张表,子类拓展一张表

b,resultMap

通过属性成员 将两个类建立起联系

通过resultMap建立映射关系
<resultMap id="cardMap" type="idcard">
<id property="id" column="id"></id>
<result property="name" column="name"></result>
<result property="cardid" column="cardid"></result>

<!--一对一时,对象成员使用association;javaType 指定对象类型-->
<association property="cardinfo" javaType="CardInfo">
<result property="detail" column="detail"></result>
</association>
</resultMap>

entity

public class idcard {
    private int id;
    private String name;
    private int cardid;
    private CardInfo cardinfo;//级联属性
}

一对多:

一对多:
(Mybatis:多对一,多对多的本质就是 一对多的变化)

表:student class(通过外键建立联系)
类:students studentClass(通过联级属性联系(List))

<!--建立一对多-->
    <select id="multisql3" resultMap="classMap" parameterType="int">
        SELECT c.*,s.* FROM students s INNER JOIN class c
        ON c.classid = s.classid
        WHERE c.classid = #{id}
    </select>
    <!--类与表的映射关系-->
    <resultMap id="classMap" type="StudentClass">
        <id property="classid" column="classid"></id>
        <result property="classname" column="classname"></result>

        <!--配置成员属性,一对多时,对象成员用collection;属性类型javaType;属性的元素类型:ofType-->
        <collection property="students" ofType="Students">
                <id property="id" column="id"></id>
                <result property="name" column="name"></result>
                <result property="classid" column="classid"></result>
        </collection>

    </resultMap>

entity:

public class StudentClass {
    private List<Students> students;
    private int classid;
    private String classname;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值