先看一对一关联。
建立两个表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);
}
}