MyBatis關聯查詢

數據庫中有兩張表:一張User表,和一張Order表,訂單表中有一個外鍵user_id指向User表的id

POJO:

User:

package com.xiaowen.pojo;

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

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 List<Orders> ordersList;

    public List<Orders> getOrdersList() {
        return ordersList;
    }

    public void setOrdersList(List<Orders> ordersList) {
        this.ordersList = ordersList;
    }

    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() {
        String str = "";
        for (Orders orders : ordersList) {
            str += "username:" + username + " number:" + orders.getNumber() + "\n";
        }
        return str;
    }
}

Orders:

package com.xiaowen.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 + '\'' +
                ",username"+user.getUsername()+
                '}';
    }
}

需求一:查詢訂單,以及訂單對應的用戶名稱:
OrderMapper接口:

package com.xiaowen.mapper;

import com.xiaowen.pojo.Orders;

import java.util.List;

public interface OrderMapper {

    //一對一關聯查詢,以訂單爲中心關聯用戶
    public List<Orders> selectOrders();
}

OrderMapper.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">
<!--寫sql語句-->
<!--命名空間-->
<mapper namespace="com.xiaowen.mapper.OrderMapper">
    <resultMap id="order" type="Orders">
        <id column="id" property="id"/>
        <result column="uId" property="userId"/>
        <result column="number" property="number"/>
        <result column="createtime" property="createtime"/>
        <!--一對一標籤-->
        <association property="user" javaType="User">
            <id column="uId" property="id"/>
            <result column="username" property="username"/>
        </association>
    </resultMap>
    <select id="selectOrders" resultMap="order">
        select 
        o.id,
        o.number,
        o.createtime,
        u.id as uId,
        u.username 
        from orders o 
        left join user u 
        on o.user_id=u.id
    </select>
</mapper>

resultMap中id與select標籤中resultMap對應,resultMap的column與sql語句中的字段名對應,property與pojo中的屬性名相對應。

測試代碼:

        //加載核心配置文件
        String resource = "sqlMapConfig.xml";
        InputStream in = Resources.getResourceAsStream(resource);
        //創建SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
        //創建SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();

        //由SqlSesstion生成接口的實現類
        OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
        List<Orders> orders = orderMapper.selectOrders();
        for (Orders order : orders) {
            System.out.println(order);
        }

輸出:

Orders{id=3, userId=1, number='1000010', createtime=Wed Feb 04 13:22:35 CST 2015, note='null'username王五}
Orders{id=4, userId=1, number='1000011', createtime=Tue Feb 03 13:22:41 CST 2015, note='null'username王五}
Orders{id=5, userId=10, number='1000012', createtime=Thu Feb 12 16:13:23 CST 2015, note='null'username張三}

需求二:查詢某用戶的所有訂單信息:

UserMapper接口:

package com.xiaowen.mapper;

import com.xiaowen.pojo.User;


public interface UserMapper {

    public User selectOrdersById(Integer id);
}

UserMapper.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">
<!--寫sql語句-->
<!--命名空間-->
<mapper namespace="com.xiaowen.mapper.UserMapper">

    <resultMap id="user" type="User">
        <id column="user_id" property="id"></id>
        <result column="username" property="username"></result>
        //一對多使用collection標籤
        <collection property="ordersList" ofType="Orders">
            <id column="id" property="id"></id>
            <result column="number" property="number"></result>
            <result column="createtime" property="createtime"></result>
        </collection>
    </resultMap>
    <select id="selectOrdersById" parameterType="Integer" resultMap="user">

        select
        o.id,
        o.user_id,
        o.number,
        o.createtime,
        u.username
        from  user u
        left join orders o
        on o.user_id=u.id
        where u.id=#{id}
    </select>

</mapper>

測試代碼:

    @Test
    public void selectOrdersById()throws Exception{
        //加載核心配置文件
        String resource="sqlMapConfig.xml";
        InputStream in = Resources.getResourceAsStream(resource);
        //創建SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
        //創建SqlSession
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
        User user = userMapper.selectOrdersById(1);
        System.out.println(user);
    }

運行結果:

username:王五number:1000010
username:王五number:1000011
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章