mybatis 一对一关系取值association

来源:互联网 发布:json属性遍历 编辑:程序博客网 时间:2024/05/19 21:15

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}nullUser2{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}nullUser2{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}nullUser2{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}nullUser2{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


0 0
原创粉丝点击