10. Mybatis多表查询 一对一查询

一对一查询

我们这里做一个 用户表对订单表,即  一对一查询的需求:查询一个订单,与此同时查询出该订单所属的用户

 

 

我们准备工作 建表、Bean、核心配置文件、映射文件 这里省略,

执行命令:

然后我们Bean:

package com.bihu.Bean;

import java.util.Date;

public class User {
    private int id;
    private String username;
    private String password;
    private Date birthday;

    public User() {
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public int getId() {
        return id;
    }

    public void setId(int 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;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", birthday=" + birthday +
                '}';
    }
}
User
package com.bihu.Bean;

import java.util.Date;

public class Order {
    private int id;
    private Date ordertime;
    private double total;

    //当前订单属于哪一个用户
    private User user;

    public int getId() {
        return id;
    }

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

    public Date getOrdertime() {
        return ordertime;
    }

    public void setOrdertime(Date 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 +
                '}';
    }
}
Order    //重点是哪个user ,查询user表的数据是嵌进去的

mybetis核心配置文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">


<configuration>



    <properties resource="datasourceInfo.properties"></properties>

    <typeAliases>
        <typeAlias type="com.bihu.Bean.User" alias="User"></typeAlias>
        <typeAlias type="com.bihu.Bean.Order" alias="Order"></typeAlias>
        <typeAlias type="java.util.List" alias="List"></typeAlias>
    </typeAliases>



<!-- 插件   -->
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageHelper">
            <property name="dialect" value="mysql"/>
        </plugin>
    </plugins>




    <environments default="dev">
        <environment id="dev">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>


    
    <mappers>
        <mapper resource="com/bihu/mapper/UserMapper.xml"></mapper>
        <mapper resource="com/bihu/mapper/OrderMapper.xml"></mapper>
    </mappers>


</configuration>
mybatis 核心配置文件

⭐⭐⭐ 重点是映射文件这!!! 

<?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.bihu.Dao.OrderMapper">



        <resultMap id="orderMap" type="Order">      <!--Order已设置别名-->
            <id column="oid" property="id"></id>
            <result column="ordertime" property="ordertime"></result>
            <result column="total" property="total"></result>
            <!--    下面开始是User的封装-->
            <result column="uid" property="user.id"></result>
            <result column="username" property="user.username"></result>
            <result column="password" property="user.password"></result>
            <result column="birthday" property="user.birthday"></result>
        </resultMap>

    <select id="findAll" resultMap="orderMap">            <!--这的返回结果更改为上面自定义的结果集resultMap 因为里面有User对象-->
        SELECT *,o.id oid FROM orders o,user u WHERE o.uid=u.id;
    </select>




</mapper>
OrderMapper.xml

重点看注释即可

 

然后这里测试

注意测试里面的是Order对象,映射的也是Order文件 

package com.bihu.Service;


import com.bihu.Bean.Order;
import com.bihu.Bean.User;
import com.bihu.Dao.OrderMapper;
import com.bihu.Dao.UserMapper;
import com.github.pagehelper.PageHelper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class UserService {
    public static void main(String[] args) throws IOException {

        InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
        SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = build.openSession();
        OrderMapper mapper = sqlSession.getMapper(OrderMapper.class);
        List<Order> all = mapper.findAll();
        for (Order item : all) {
            System.out.println(item);
        }


        sqlSession.close();
    }
}
Service 测试

 

运行:

 

posted @ 2021-08-20 13:04  咸瑜  阅读(93)  评论(0编辑  收藏  举报