先看一对一关联。

建立两个表orders 和 user 。字段和java类保持一致。

创建java普通类。Orders和User

package com.pojo;

import java.io.Serializable;
import java.util.Date;

public class User implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private Integer id;
	private String username;
	private String sex;
	private Date birthday;
	private String address;
	private Integer[]  integers ;



	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getSex() {
		return sex;
	}
	public void setSex(String sex) {
		this.sex = sex;
	}
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", sex=" + sex
				+ ", birthday=" + birthday + ", address=" + address + "]";
	}

	
	

}
package com.pojo;

import java.io.Serializable;
import java.util.Date;

public class Orders  implements Serializable{
    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private Integer id;

    private Integer userid;

    private String number;

    private Date createtime;

    private String note;
    
    private User user ;
    
    
    public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	public Integer getId() {
        return id;
    }

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

    public Integer getUserId() {
        return userid;
    }

    public void setUserId(Integer userId) {
        this.userid = userId;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number == null ? null : number.trim();
    }

    public Date getCreatetime() {
        return createtime;
    }

    public void setCreatetime(Date createtime) {
        this.createtime = createtime;
    }

    public String getNote() {
        return note;
    }

    public void setNote(String note) {
        this.note = note == null ? null : note.trim();
    }

	@Override
	public String toString() {
		return "Orders [id=" + id + ", userId=" + userid + ", number=" + number
				+ ", createtime=" + createtime + ", note=" + note + ", user="
				+ user + "]";
	}
    
}

在Orders类中添加User类的对象。

创建配置文件ordersmapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper 
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dao.OrdersDao">
	<resultMap type="Orders" id="order">
		<result property="number" column="number"/>
		<result property="userid" column="userid"/>
		<association property="user" javaType="User">
			<result property="username"	column="username" />
			<result property="sex"	column="sex" />
			<result property="birthday"	column="birthday" />
			<result property="address"	column="address" />
		</association>
	</resultMap>
	<select id="oneToone" resultMap="order">
	select 
	u.username ,
	u.sex,
	o.userid,
	u.birthday,
	u.address,
	o.number from orders  o left join user u 
	on o.userid = u.id ;
	</select>
</mapper>

先写<select/>标签。值得注意的是此时返回的类型是resultMap.原因是返回的是一个复杂类型Orders,它里面还有user类型。

sql语句可以在mysql代码运行器中先执行。

在配置resultMap,需要注意的是,这里的resultMap 要把sql中所有需要返回的值全部手动匹配完整。对于配置User对象时,因为是一对一的关系,所有使用<association/>标签,需要注意的是,这里一定需要需要加JAVATYPE这个表情指定是User类型。

下面是运行代码。

public void oneToOne() throws IOException{
		String resource = "mybatis.comfiguration.xml" ;
		InputStream is = Resources.getResourceAsStream(resource);
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
		SqlSession session = factory.openSession();
		List<Orders> orders = session.getMapper(OrdersDao.class).oneToone();
		for (Orders orders2 : orders) {
			System.out.println(orders2);
		}
	}