Mybatis级联查询——一对一

一对一关系映射

案例:根据订单编号查询订单信息和用户信息(两张表,主外键关系)

1、写一个订单的扩展类

1、定义order类,生成属性的get、set、和toString方法(User类前边都有,这里不写)

public class Orders {
private Integer id;

    public Integer getId() {
        return id;
    }

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

    public Integer getUser_id() {
        return user_id;
    }

    public void setUser_id(Integer user_id) {
        this.user_id = user_id;
    }

    public String getNote() {
        return note;
    }

    public void setNote(String note) {
        this.note = note;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public Date getCreatetime() {
        return createtime;
    }

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

    private  Integer user_id;
private  String note;
private String number;
private Date createtime;

    @Override
    public String toString() {
        return "Orders{" +
                "id=" + id +
                ", user_id=" + user_id +
                ", note='" + note + '\'' +
                ", number='" + number + '\'' +
                ", createtime=" + createtime +
                '}';
    }
}

2、定义扩展类OrderExs,继承order,添加用户名和地址属性,生成两个属性的get和set方法以及tostring方法

public class OrdersExt extends Orders {
    private String username;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    private String address;

    @Override
    public String toString() {
        return "OrdersExt{" +
                "username='" + username + '\'' +
                ", address='" + address + '\'' +
                '}'+super.toString();
    }
}

3、编写接口orderMapper,编写查询方法

public interface OrderMapper {

    /**
     * 一对一查询,编写扩展类
     * @param id
     * @return
     */
    public OrdersExt findOrderById(int id);
}

4、编写映射文件,编写查询方法

<?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.szl.mapper.OrderMapper">
    <select id="findOrderById" resultType="ordersExt" parameterType="int">
        select  o.*,u.username,u.address
        from orders o,user u
        where o.user_id=u.id
        and o.id=#{id}
    </select>
</mapper>

5、编写测试类

    /**
     * 一对一级联查询:订单扩展类
     * @throws IOException
     */
    @Test
    public void test6() throws IOException {
        OrderMapper orderMapper=session.getMapper(OrderMapper.class);
        OrdersExt ordersExt=orderMapper.findOrderById(3);


        System.out.println("查询结果"+ordersExt);
    }

查询的结果:

DEBUG [main] - ==>  Preparing: select o.*,u.username,u.address from orders o,user u where o.user_id=u.id and o.id=? 
DEBUG [main] - ==> Parameters: 3(Integer)
DEBUG [main] - <==      Total: 1
查询结果OrdersExt{username='王五', address='null'}Orders{id=3, user_id=1, note='null', number='1000010', createtime=Wed Feb 04 13:22:35 CST 2015}

2、模型里有模型

定义orders类,将user最为orders中的一个属性:

public class Orders {
private Integer id;

    public Integer getId() {
        return id;
    }

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

    public Integer getUser_id() {
        return user_id;
    }

    public void setUser_id(Integer user_id) {
        this.user_id = user_id;
    }

    public String getNote() {
        return note;
    }

    public void setNote(String note) {
        this.note = note;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public Date getCreatetime() {
        return createtime;
    }

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

    private  Integer user_id;
private  String note;
private String number;
private Date createtime;


    public User getUser() {
        return user;
    }

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

    private  User user;//订单所属用户
    @Override
    public String toString() {
        return "Orders{" +
                "id=" + id +
                ", user_id=" + user_id +
                ", note='" + note + '\'' +
                ", number='" + number + '\'' +
                ", createtime=" + createtime +
                '}';
    }
}

添加方法接口:

public interface OrderMapper {

    /**
     * 一对一查询,编写扩展类
     * @param id
     * @return
     */
    public OrdersExt findOrderById(int id);
    public Orders findOrderById2(int id);
}

编写查询配置文件:

   <!-- 模型里有模型,使用resultMap-->
    <resultMap id="orderRslMap" type="orders">
        <!--往order的模型匹配数据-->
        <id column="id" property="id"></id>
        <id column="note" property="note"></id>
        <id column="number" property="number"></id>
        <id column="createtime" property="createtime"></id>
        <!--往order的user匹配数据,property中的user是属性,javaType中的user是模型(类)-->
         <association property="user" javaType="user">
             <id column="user_id" property="id"></id>
             <id column="username" property="username"></id>
             <id column="address" property="address"></id>
         </association>

    </resultMap>

    <select id="findOrderById2" resultMap="orderRslMap" parameterType="int">
        select  o.*,u.username,u.address
        from orders o,user u
        where o.user_id=u.id
        and o.id=#{id}
    </select>
</mapper>

编写测试类(数据库加载对象前边有,这里不多写):

 @Test
    public void test8() throws IOException {
        OrderMapper orderMapper=session.getMapper(OrderMapper.class);
        Orders order =orderMapper.findOrderById2(3);


        System.out.println("查询结果"+order);
        System.out.println(order.getUser());
    }

查询结果:

查询结果Orders{id=3, user_id=null, note='null', number='1000010', createtime=Wed Feb 04 13:22:35 CST 2015}
User{id=1, username='王五', sex='null', birthday=null, address='null'}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值