浅谈mybatis多对一单向映射

刚刚在学mybatis,谈下我队多对一单向映射的看法,新手,有错误请指出,

mybatis的实体映射是通过在外键表中引入主键表的实体类的,

比如主键表为tb_clazz,外键表为tb_student,学生表的clazz_id作为外键引用到tb_clazz,

那么实体映射表为:

public class Clazz {
    private Integer id;
    private String code;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getCode() {
        return code;
    }
    public void setCode(String code) {
        this.code = code;
    }
    @Override
    public String toString(){
        return "["+id+","+code+"]";
    }
}

public class Student {
    private Integer id;
    private String name;
    private String sex;
    private Integer age;
    private Clazz clazz;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public Clazz getClazz() {
        return clazz;
    }
    public void setClazz(Clazz clazz) {
        this.clazz = clazz;
    }
    @Override
    public String toString(){
        return "["+id+","+name+","+sex+","+age+","+clazz.toString()+"]";
    }
}

然后再xml中配置关系,通过resultMap实现

<resultMap type="org.fkit.domain.Student" id="studentResultMap">
        <id property="id" column="id"/>
        <result property="name" column="name"/>
        <result property="sex" column="sex"/>
        <result property="age" column="age"/>
        <association property="clazz" column="clazz_id"
        javaType="org.fkit.domain.Clazz" select="selectClazzWithId"
        ></association>
    </resultMap>
    <select id="selectClazzWithId" resultType="org.fkit.domain.Clazz">
        select * from tb_clazz where id=#{id}
    </select>
    <select id="selectStudent" resultMap="studentResultMap">
        select * from tb_student
    </select>

因为表中存储的是id,但是实体映射类中存储的是实体,所有先需要根据表的id查询到实例,

DEBUG [main] -==>  Preparing: select * from tb_student
DEBUG [main] -==> Parameters:
DEBUG [main] -====>  Preparing: select * from tb_clazz where id=?
DEBUG [main] -====> Parameters: 1(Integer)
DEBUG [main] -<====      Total: 1
DEBUG [main] -====>  Preparing: select * from tb_clazz where id=?
DEBUG [main] -====> Parameters: 2(Integer)
DEBUG [main] -<====      Total: 1
DEBUG [main] -<==      Total: 4

由日志信息可以知道,先是查询tb_student表,然后对于外键在进行查询,但是并不重复查询

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值