Mybatis入门--一对多查询

来源:互联网 发布:金域名苑 编辑:程序博客网 时间:2024/05/21 11:16

场景

新增加一个场景,查询顾客的所有订单信息。

实体类

需要新增User.java类。由于有每个顾客有多个订单信息,所以用List来保存订单信息:private List<Order> orders = new ArrayList<Order>()。所有代码如下:

package domain;import java.util.ArrayList;import java.util.HashMap;import java.util.List;/** * Created by laiwenqiang on 2017/5/8. */public class User {    private String id;    private String name;    private List<Order> orders = new ArrayList<Order>();    public User() {    }    public User(String id, String name) {        this.id = id;        this.name = name;    }    public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public List<Order> getOrders() {        return orders;    }    public void setOrders(List<Order> orders) {        this.orders = orders;    }    @Override    public String toString() {        return "User{" +                "id='" + id + '\'' +                ", name='" + name + '\'' +                ", orders=" + orders +                '}';    }}

对应的orders表

创建一个orders数据表,和Order实体类对应。订单里面的user_id即为user表的id。

CREATE TABLE `orders` (  `id` varchar(100) NOT NULL DEFAULT '',  `user_id` int(100) DEFAULT NULL,  `money` double DEFAULT NULL,  `receiverAddress` varchar(255) DEFAULT NULL,  `receiverName` varchar(20) DEFAULT NULL,  `receiverPhone` varchar(20) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=latin1

mapper配置文件

resultMap节点

这个配置文件相对复杂,增加了<resultMap></resultMap>节点。而<resultMap></resultMap>节点,分为两大块。
1. “一”的那个部分。即,id="user"的resultMap节点。
2. “多”的那个部分。即,id="orders"的resultMap节点。无论“一”或者“多”的节点,他们都是type="domain.User"。同时,在“多”的这部分,还增加了一个extends="user"属性,表示它所依赖的载体是user。

collection节点

与此同时,还有一个极为重要的下级节点:<collection></collection>,作用于“多”的那一方。需要注意的是它有一个,ofType="domain.Order"属性。显然这个是用于描述集合内容的,也就是orders信息的。

具体代码如下:

<?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="domain.User">    <resultMap id="user" type="domain.User">        <id property="id" column="id"></id>        <result property="name" column="name"></result>    </resultMap>    <resultMap id="orders" type="domain.User" extends="user">        <collection property="orders" ofType="domain.Order">            <id property="id" column="id"></id>            <result property="userId" column="user_id"></result>            <result property="money" column="money"></result>            <result property="receiverAddress" column="receiverAddress"></result>            <result property="receiverName" column="receiverName"></result>            <result property="receiverPhone" column="receiverPhone"></result>        </collection>    </resultMap>    <select id="selectOrdersByUserId" parameterType="String" resultMap="orders">        select u.id, u.name, o.user_id, o.money, o.receiverAddress, o.receiverName, o.receiverPhone        from user u        left join orders o on u.id = o.user_id        where u.id = #{id}    </select></mapper>

修改configuration.xml文件

添加如下代码

<mapper resource="domain/user.xml" />

测试

这代码很简单

List<User> userOrders = session.selectList("domain.User.selectOrdersByUserId", "0001");for(User userOrder : userOrders) {    System.out.println(userOrder);}
1 0
原创粉丝点击