mybatis 一对一关系取值association

mybatis 一对一关系取值association

mybatis支持一对一取值和一对多取值。简单的来讲就是mybatis实现的如下的功能。
我有一个user表,还有一个duty表,其中每一个人只能属于一个部门,这样每个人和部门就是一对一的关系。这个时候表是这样设计的:

user表中的字段DUTYID对应的是duty表中的id字段。那么如果正常是用关联进行查询的话是这样的。
select a.* ,b.* from user a inner join duty b on a.DUTYID=b.ID

现在,问题来了。我取出来的这个是个什么类型的?map吗,如果是map的话,那么就不用面向对象(换句话说,只是返回map的话对于业务上会有些不清晰,不过也可以)。

这样的话我们需要返回duty的bean和user的bean。明显的是user中有一个duty属性。
下面是对应的类:
Duty.java
package com.xueyou.ssm.model;

/**
 * Created by wuxueyou on 2016/11/12.
 */
public class Duty {
    private String id;
    private String dutyname;
    private String memo;
    private String depid;
    private String ordernumber;

    public Duty(String id, String dutyname, String memo, String depid, String ordernumber) {
        this.id = id;
        this.dutyname = dutyname;
        this.memo = memo;
        this.depid = depid;
        this.ordernumber = ordernumber;
    }

    @Override
    public String toString() {
        return "Duty{" +
                "id='" + id + '\'' +
                ", dutyname='" + dutyname + '\'' +
                ", memo='" + memo + '\'' +
                ", depid='" + depid + '\'' +
                ", ordernumber='" + ordernumber + '\'' +
                '}';
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getDutyname() {
        return dutyname;
    }

    public void setDutyname(String dutyname) {
        this.dutyname = dutyname;
    }

    public String getMemo() {
        return memo;
    }

    public void setMemo(String memo) {
        this.memo = memo;
    }

    public String getDepid() {
        return depid;
    }

    public void setDepid(String depid) {
        this.depid = depid;
    }

    public String getOrdernumber() {
        return ordernumber;
    }

    public void setOrdernumber(String ordernumber) {
        this.ordernumber = ordernumber;
    }
}

User2.java
package com.xueyou.ssm.model;

import com.fasterxml.jackson.annotation.JsonFormat;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Created by wuxueyou on 16/10/31.
 */
public class User2 {
    private String id;
    private String loginId;
    private String password;
    private String name;
    private String sex;
    private Date createTime;
    private Date birthday;
    private String status;
    private String dutyid;
    private String phone;
    private String email;
    private String photo;
    private Duty duty;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
//        if (sex == null || sex.equals("")) {
//            return "";
//        }
//        if (sex.equals("1")) {
//            return "男";
//        } else {
//            return "女";
//        }
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getLoginId() {
        return loginId;
    }

    public void setLoginId(String loginId) {
        this.loginId = loginId;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(String createTime) {
        try {
            this.createTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(createTime);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        try {
            this.birthday = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(birthday);
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }

    public String getStatus() {
        return status;
        /*if (status == null || status.equals("")) {
            return "";
        }
        if (status.equals("1")) {
            return "启用";
        } else {
            return "禁用";
        }*/
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getDutyid() {
        return dutyid;
    }

    public void setDutyid(String dutyid) {
        this.dutyid = dutyid;
    }

    public String getPhoto() {
        return photo;
    }

    public void setPhoto(String photo) {
        this.photo = photo;
    }

    public Duty getDuty() {
        return duty;
    }

    public void setDuty(Duty duty) {
        this.duty = duty;
    }

    @Override
    public String toString() {
        return "User2{" +
                "id='" + id + '\'' +
                ", loginId='" + loginId + '\'' +
                ", password='" + password + '\'' +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", createTime=" + createTime +
                ", birthday=" + birthday +
                ", status='" + status + '\'' +
                ", dutyid='" + dutyid + '\'' +
                ", phone='" + phone + '\'' +
                ", email='" + email + '\'' +
                ", photo='" + photo + '\'' +
                ", duty=" + duty +
                '}';
    }
}

好了,现在需要对两个Bean进行持久化了。
首先是duty
public Duty getDutyById(String dutyid);

对应的dutymapper.xml中
<select id="getDutyById" parameterType="String" resultType="com.xueyou.ssm.model.Duty">
        SELECT ID as id,DUTYNAME as dutyname, MEMO as memo,DEPID as depid,ORDERNUMBER as ordernumber from duty WHERE ID = #{dutyid}
    </select>

然后是user,在user持久化的时候需要考虑到对应的duty是如何被关联的。
public List<User2> user2List(Map<String,Object> params);

对应的usermaper.xml中
<resultMap id="user2mapper" type="com.xueyou.ssm.model.User2">
        <id property="id" column="ID"/>
        <result property="loginId" column="LOGINID"/>
        <result property="password" column="PASSWORD"/>
        <result property="name" column="NAME"/>
        <result property="createTime" column="CREATETIME"/>
        <result property="birthday" column="BIRTHDAY"/>
        <result property="sex" column="SEX"/>
        <result property="status" column="STATUS"/>
        <result property="dutyid" column="DUTYID"/>
        <result property="phone" column="PHONE"/>
        <result property="email" column="EMAIL"/>
        <result property="photo" column="PHOTO"/>
        <association property="duty" column="DUTYID" select="com.xueyou.ssm.dao.DutyDao.getDutyById"/>
    </resultMap>

    <select id="user2List" statementType="STATEMENT" parameterType="Map" resultMap="user2mapper">
    SELECT id, loginId,password,name,createTime,birthday,
    sex,status,dutyid,phone,email,photo FROM user
    ORDER BY createTime DESC limit ${page},${rows}
    </select>

这样就实现了一对一的持久化。
需要注意的地方是这里,在association 中的column是两张表在数据库中关联的字段。在本例中是DUTYID这个字段。


下面是一个单元测试:
@Test
    public void getUser(){
        Map<String,Object> params = new HashMap<>();
        params.put("page","1");
        params.put("rows","10");
        List<User2> userlist = userDao.user2List(params);
        for (User2 user : userlist) {
            System.out.println(user);
            System.out.println(user.getDuty());
        }
        Assert.assertEquals(7,userlist.size());
    }

测试结果:
Duty{id='b68560a6-96c5-11e6-b79e-83fe6f33afd5', dutyname='项目助理', memo='负责辅助项目执行', depid='869069b6-937f-11e6-979c-bd06e7738959', ordernumber='1'}
User2{id='c6a5f6b4-c668-4a4a-a2f0-e6c3320fcfba', loginId='yyuu', password='cc', name='aba', sex='1', createTime=Sun Nov 06 21:07:01 CST 2016, birthday=Sun Nov 06 21:07:07 CST 2016, status='1', dutyid='12', phone='1', email='1', photo='', duty=null}
null
User2{id='6bf4dc62-c80b-44c9-ae38-a61740c3a363', loginId='cc', password='1', name='1', sex='2', createTime=Sun Nov 06 20:56:20 CST 2016, birthday=Tue Nov 15 20:56:23 CST 2016, status='1', dutyid='1', phone='1', email='1', photo='', duty=null}
null
User2{id='30e95aa7-1984-4a1d-bdf4-fa16c3dfd7f5', loginId='43', password='12', name='1', sex='1', createTime=Sat Nov 05 23:29:00 CST 2016, birthday=Sat Nov 05 23:29:12 CST 2016, status='1', dutyid='1', phone='1', email='1', photo='/ssmUpload/files/file20161106191126337.jpg', duty=null}
null
User2{id='9999', loginId='132啊啊吧啊', password='faree', name='1', sex='2', createTime=Fri Nov 04 00:50:05 CST 2016, birthday=Sun Nov 06 00:09:57 CST 2016, status='1', dutyid='b68560a6-96c5-11e6-b79e-83fe6f33afd5', phone='123', email='123', photo='/ssmUpload/files/file20161106191506568.jpg', duty=Duty{id='b68560a6-96c5-11e6-b79e-83fe6f33afd5', dutyname='项目助理', memo='负责辅助项目执行', depid='869069b6-937f-11e6-979c-bd06e7738959', ordernumber='1'}}
Duty{id='b68560a6-96c5-11e6-b79e-83fe6f33afd5', dutyname='项目助理', memo='负责辅助项目执行', depid='869069b6-937f-11e6-979c-bd06e7738959', ordernumber='1'}
User2{id='714c9921-8b60-4213-bbaa-0cf91574e188', loginId='uuii', password='000', name='小明', sex='1', createTime=Thu Nov 03 19:23:11 CST 2016, birthday=Wed Nov 02 19:23:17 CST 2016, status='1', dutyid='12', phone='12341', email='122@qq.com', photo='', duty=null}
null
User2{id='47a226a2-9b8d-11e6-b79e-83fe6f33afd5', loginId='user1', password='1', name='aaa', sex='2', createTime=Wed Oct 26 23:02:57 CST 2016, birthday=Sun Nov 06 00:09:43 CST 2016, status='1', dutyid='77a7225e-960f-11e6-979c-bd06e7738959', phone='18322223333', email='8866@qq.com', photo='/ssmUpload/files/file20161106191205189.png', duty=Duty{id='77a7225e-960f-11e6-979c-bd06e7738959', dutyname='项目主管', memo='管理项目经理', depid='869069b6-937f-11e6-979c-bd06e7738959', ordernumber='1'}}
Duty{id='77a7225e-960f-11e6-979c-bd06e7738959', dutyname='项目主管', memo='管理项目经理', depid='869069b6-937f-11e6-979c-bd06e7738959', ordernumber='1'}
User2{id='1083caa8-9143-11e6-945d-708e78b00b24', loginId='a', password='1', name='aa', sex='1', createTime=Mon Oct 24 20:39:56 CST 2016, birthday=Sat Oct 15 17:48:59 CST 2016, status='1', dutyid='111', phone='12344445555', email='323@qq.com', photo='/ssmUpload/files/file20161106191234411.jpg', duty=null}
null


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值