例如:
一个订单对应一个用户 (一对一)
一个用户对应多个订单(一对多)
一对一
第一步:在mabatis文件中配置别名,方便后续使用
<!--自定义类别名-->
<typeAliases>
<typeAlias type="com.ermu.domain.User" alias="user"/>
<typeAlias type="com.ermu.domain.Order" alias="order"/>
</typeAliases>
<mappers>
<package name="com.ermu.dao"/>
</mappers>
第二步:创建对应的order实体类
public class Order {
private int id;
private String ordertime;
private double total;
private User user ;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getOrdertime() {
return ordertime;
}
public void setOrdertime(String ordertime) {
this.ordertime = ordertime;
}
public double getTotal() {
return total;
}
public void setTotal(double total) {
this.total = total;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String toString() {
return "Order{" +
"id=" + id +
", ordertime='" + ordertime + '\'' +
", total=" + total +
", user=" + user +
'}';
}
}
第三步:映射配置文件中的查询语句以及使用resultMap进行手动指定查询结果中:字段与实体属性的映射关系
<resultMap id="orderMap" type="order" >
<!--手动指定字段与实体属性的映射关系-->
<!--column :数据表的字段名称-->
<!--property:实体的属性名称-->
<!--主键-->
<id column="oid" property="id"></id>
<result column="ordertime" property="ordertime"></result>
<result column="total" property="total"></result>
<!--order实体类中所封装的User-->
<!--property:当前实体order中的属性名称(private User user)-->
<!--javaType:当前实体order中属性的类型(User)-->
<association property="user" javaType="user">
<id column="uid" property="id"></id>
<result column="username" property="username"></result>
<result column="password" property="password"></result>
<result column="birthday" property="birthday"></result>
</association>
</resultMap>
<select id="findAll" resultMap="orderMap">
select * ,o.id oid from orders o , user u where o.uid = u.id
</select>
第四步 :测试
一对多
第一步:同上
第二步:创建User实体类
public class User {
private Integer id;
private String username;
private String password;
private Date birthday;
//描述当前用户存在那些订单
private List<Order> orderList;
public List<Order> getOrderList() {
return orderList;
}
public void setOrderList(List<Order> orderList) {
this.orderList = orderList;
}
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 getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", birthday=" + birthday +
", orderList=" + orderList +
'}';
}
}
第三步:映射配置文件中的查询语句以及使用resultMap进行手动指定查询结果中:字段与实体属性的映射关系
<resultMap id="userMap" type="user">
<id column="uid" property="id"></id>
<result column="username" property="username"></result>
<result column="password" property="password"></result>
<result column="birthday" property="birthday"></result>
<!--配置集合信息-->
<!--property :集合名称-->
<!--ofType:当前集合中的数据类型-->
<collection property="orderList" ofType="order">
<!--封装order数据-->
<id column="oid" property="id"></id>
<result column="ordertime" property="ordertime"></result>
<result column="total" property="total"></result>
</collection>
</resultMap>
<select id="findAll" resultMap="userMap">
select * ,o.id oid from user u , orders o where u.id =o.uid
</select>