Mybatis多表查询(一对一,一对多,多对多)

第一步:数据源和domain

第二步:接口OrderMapper

package it.heima.dao;

import it.heima.domain.Order;
import org.apache.ibatis.annotations.Param;

public interface OrderMapper {
    //需求:根据订单号 查询订单,查询出所属用户,并且查询出订单的详情,及订单详情中的对应的商品信息
    public Order queryOrderWithUserAndOrderItemsAndProductByOrderNumber(@Param("orderNumber") String ordernumber);
}

第三步:OrderMapper.xml文件

注意事项:property标签里面的都必须在domain中找到对应的成员变量

                 在成员变量是list集合时,必须 <collection property="orderitemList"   javaType="list"    ofType="Orderitem"/>

<?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="it.heima.dao.OrderMapper">
    <resultMap id="queryOrderWithUserAndOrderItemsAndProductByOrderNumber" type="Order" autoMapping="true">
        <!--关联订单表主键-->
        <id property="oid" column="oid" javaType="int"/>
        <!--订单表与用户表是多对一的关系-->
        <association property="user" javaType="User" autoMapping="true">
            <!--关联用户表主键-->
            <id property="id" column="id" javaType="long"/>
        </association>
        <!--订单表与订单详情表是多对多关系-->
        <collection property="orderitemList"  javaType="list" ofType="Orderitem" autoMapping="true">
            <!--关联订单详情表主键-->
            <id property="itemId" column="item_id"/>
            <!--订单详情表与产品表是多对一的关系-->
            <association property="product" javaType="Product" autoMapping="true">
                <!--关联产品表的主键-->
                <id property="pid" column="pid"/>
            </association>
        </collection>
    </resultMap>

<!--需求:根据订单号 查询订单,查询出所属用户,并且查询出订单的详情,及订单详情中的对应的商品信息-->
    <select id="queryOrderWithUserAndOrderItemsAndProductByOrderNumber" resultMap="queryOrderWithUserAndOrderItemsAndProductByOrderNumber">    //resultMap名字必须和上面的一致
        SELECT * FROM tb_order o
        LEFT JOIN tb_user u ON o.user_id=u.id
        LEFT JOIN tb_orderitem oi ON o.oid=oi.order_id
        LEFT JOIN tb_product p ON oi.product_id=p.pid
        WHERE o.order_number=#{orderNumber}
    </select>
</mapper>

第四步:mybatis-config.xml

<?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="jdbc.properties"/>
    <!--开启驼峰标识-->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
    <!--开启自动扫描包-->
    <typeAliases>
        <package name="it.heima"/>
    </typeAliases>
    <!--配置数据库连接对象-->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driverClassName}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--导入mapper文件-->
    <mappers>
        <mapper resource="OrderMapper.xml"/>
    </mappers>
</configuration>

第五步:测试

public class OrderMapperTest {

    @Test
    public void queryOrderWithUserAndOrderItemsAndProductByOrderNumber() throws Exception {
        //---------注册mybatis-config,获得具体mapper---------------
        InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        OrderMapper mapper = sqlSession.getMapper(OrderMapper.class);
        //---------根据方法,查询------------------------
        Order order = mapper.queryOrderWithUserAndOrderItemsAndProductByOrderNumber("20140921001");
        System.out.println(order);


    }

}

猜你喜欢

转载自blog.csdn.net/weixin_42333583/article/details/81545794