mybatis五表联合操作

一,建立表结构
1,users 用户表
2,orders 订单表
3, details 订单详细信息表
4,products 产品表
5,types 产品类别表
注:五表的逻辑关系图
在这里插入图片描述
1,pom文件添加junit,mysql, mybatis(3.4.4)

2,设置mybatis的配置文件

<?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节点
        里面有配置信息 分别是环境和映射
         其中环境里有datasource,里面有我们熟悉的连接数据库的四个字符串
-->
<configuration>

    <!--
        引入db的配置文件信息,后面用到的四个连接字符串就可以直接使用 ${}的方式来动态引入
    -->
    <properties resource="db.properties" />

    <!--
        给当前mybatis项目添加日志功能,该STDOUT_LOGGING值的好处是不用添加第三方jar包就可以有日志的输出
    -->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${user}"/>
                <property name="password" value="${pass}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/qfedu/mapper/OrderMapper.xml"/>
        <mapper resource="com/qfedu/mapper/UserMapper.xml"/>
        <mapper resource="com/qfedu/mapper/DetailMapper.xml"/>
        <mapper resource="com/qfedu/mapper/ProductMapper.xml"/>
        <mapper resource="com/qfedu/mapper/TypeMapper.xml"/>
    </mappers>
</configuration>

3,db.properties数据库的配置文件

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mall
user=root
pass=12345678

4,设计pojo类

5,设置映射文件mapper
1,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">

<!--
    每个mapper文件都将有一个自己的映射的namespace,
    每个方法对应自己的sql语句,每个sql语句对应有一个id
    整个项目中所有的namespace.id必须是唯一的
-->
<mapper namespace="com.qfstu.pojo.OrderMapper">

    <select id="getOrderByOid" resultMap="orderMap">
        select * from orders where oid = #{oid}
    </select>

    <resultMap id="orderMap" type="com.qfstu.pojo.Order">

        <!--
            id代表主键,分别设置列和属性的对应关系
        -->
        <id property="oid" column="oid" ></id>

        <!--
            result代表普通字段的映射,分别指定列与属性的对应

            如果字段名和属性名一致,可以省略

            属性名叫做payType,字段名pay_type;
            <result column="pay_type" property="payType" />
        -->
        <result column="price" property="price" />
        <result column="addr" property="addr" />
        <result column="payType" property="payType" />

        <!--
            association关联,只要是"对一"的关系都可以使用association,代表关联
            property代表Order类中的属性名u
            column代表Orders表中的uid字段
            select代表要使用该查询完成两表的联合查询得出user对象
        -->
        <association property="u" column="uid" select="com.qfstu.pojo.UserMapper.getUserByUid"></association>

        <collection property="details" column="oid" select="com.qfstu.pojo.DetailMapper.getDetailsByOid" ofType="com.qfstu.pojo.Detail"/>

    </resultMap>
</mapper>

2,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">

<!--
    每个mapper文件都将有一个自己的映射的namespace,
    每个方法对应自己的sql语句,每个sql语句对应有一个id
    整个项目中所有的namespace.id必须是唯一的
-->
<mapper namespace="com.qfstu.pojo.UserMapper">

    <select id="getUserByUid" resultType="com.qfstu.pojo.User">
        select * from users where uid = #{uid}
    </select>
</mapper>

3,DetailMapper.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">

<!--
    每个mapper文件都将有一个自己的映射的namespace,
    每个方法对应自己的sql语句,每个sql语句对应有一个id
    整个项目中所有的namespace.id必须是唯一的
-->
<mapper namespace="com.qfstu.pojo.DetailMapper">

    <select id="getDetailsByOid" resultMap="detailMap">
        select * from details where oid = #{oid}
    </select>

    <resultMap id="detailMap" type="com.qfstu.pojo.Detail">
        <id column="did" property="did"></id>

        <result property="count" column="count" />

        <association property="pro" column="pid" select="com.qfstu.pojo.ProductMapper.getProductByPid" />
    </resultMap>

</mapper>

4,ProductMapper.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">

<!--
    每个mapper文件都将有一个自己的映射的namespace,
    每个方法对应自己的sql语句,每个sql语句对应有一个id
    整个项目中所有的namespace.id必须是唯一的
-->
<mapper namespace="com.qfstu.pojo.ProductMapper">

    <select id="getProductByPid" resultMap="productMap">
        select * from products where pid = #{uid}
    </select>

    <resultMap id="productMap" type="com.qfstu.pojo.Product">
        <id column="pid" property="pid"></id>

        <association property="t" column="tid" select="com.qfstu.pojo.TypeMapper.getTypesByTid" />
    </resultMap>

</mapper>

5,TypeMapper.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">

<!--
    每个mapper文件都将有一个自己的映射的namespace,
    每个方法对应自己的sql语句,每个sql语句对应有一个id
    整个项目中所有的namespace.id必须是唯一的
-->
<mapper namespace="com.qfstu.pojo.TypeMapper">

    <select id="getTypesByTid" resultType="com.qfstu.pojo.Types">
        select * from types where tid = #{tid}
    </select>
</mapper>

6,TestOrder.java

package com.qfstu.test;

import com.qfstu.pojo.Order;
import com.qfstu.pojo.User;
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 org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;


/**
 * Created by 86150 on 2020/3/10.
 */
public class TestOrders {

    private SqlSessionFactory sf=null;

    private SqlSession session=null;

    @Before
    public void setUp(){
        try{
            sf = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis.xml"));

            session = sf.openSession(true);
        }catch (IOException e){
            e.printStackTrace();
        }
    }

    @After
    public void tearDown(){
        if (session!=null){
            session.close();
            session=null;
        }
    }


    @Test
    public void testGetOrderByOid(){
        Order order = session.selectOne("com.qfstu.pojo.OrderMapper.getOrderByOid", "f8fb1b8a62db11eaa2c13d7cb7217e15");
        System.out.println(order);
    }
    
}

运行结果

Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
Opening JDBC Connection
Created connection 1791868405.
==>  Preparing: select * from orders where oid = ? 
==> Parameters: f8fb1b8a62db11eaa2c13d7cb7217e15(String)
<==    Columns: oid, price, addr, payType, uid
<==        Row: f8fb1b8a62db11eaa2c13d7cb7217e15, 30998, beijingxisanqi, zhibubao, 1
====>  Preparing: select * from users where uid = ? 
====> Parameters: 1(Integer)
<====    Columns: uid, name, pass, phone
<====        Row: 1, wukong, 888888, 13488071376
<====      Total: 1
====>  Preparing: select * from details where oid = ? 
====> Parameters: f8fb1b8a62db11eaa2c13d7cb7217e15(String)
<====    Columns: did, count, pid, oid
<====        Row: 63ba6caa62dc11eaa2c13d7cb7217e15, 2, 06d7903f62da11eaa2c13d7cb7217e15, f8fb1b8a62db11eaa2c13d7cb7217e15
======>  Preparing: select * from products where pid = ? 
======> Parameters: 06d7903f62da11eaa2c13d7cb7217e15(String)
<======    Columns: pid, name, img, price, tid
<======        Row: 06d7903f62da11eaa2c13d7cb7217e15, iphone x, iphone.jpg, 9999, d96cac00628111eaa2c13d7cb7217e15
========>  Preparing: select * from types where tid = ? 
========> Parameters: d96cac00628111eaa2c13d7cb7217e15(String)
<========    Columns: tid, name
<========        Row: d96cac00628111eaa2c13d7cb7217e15, digit
<========      Total: 1
<======      Total: 1
<====        Row: ade6d49962dc11eaa2c13d7cb7217e15, 1, 778619ce62da11eaa2c13d7cb7217e15, f8fb1b8a62db11eaa2c13d7cb7217e15
======>  Preparing: select * from products where pid = ? 
======> Parameters: 778619ce62da11eaa2c13d7cb7217e15(String)
<======    Columns: pid, name, img, price, tid
<======        Row: 778619ce62da11eaa2c13d7cb7217e15, yagao, heiren.jpg, 99, d090dec4628111eaa2c13d7cb7217e15
========>  Preparing: select * from types where tid = ? 
========> Parameters: d090dec4628111eaa2c13d7cb7217e15(String)
<========    Columns: tid, name
<========        Row: d090dec4628111eaa2c13d7cb7217e15, house
<========      Total: 1
<======      Total: 1
<====        Row: b7fa3ada62dc11eaa2c13d7cb7217e15, 1, aa0f109e62d911eaa2c13d7cb7217e15, f8fb1b8a62db11eaa2c13d7cb7217e15
======>  Preparing: select * from products where pid = ? 
======> Parameters: aa0f109e62d911eaa2c13d7cb7217e15(String)
<======    Columns: pid, name, img, price, tid
<======        Row: aa0f109e62d911eaa2c13d7cb7217e15, mac pro, mac.jpg, 21999, d96cac00628111eaa2c13d7cb7217e15
<======      Total: 1
<====      Total: 3
<==      Total: 1
Order{oid='f8fb1b8a62db11eaa2c13d7cb7217e15', price=30998.0, addr='beijingxisanqi', payType='zhibubao', u=User{uid=1, name='wukong', pass='888888', phone='13488071376'}, details=[Detail{did='63ba6caa62dc11eaa2c13d7cb7217e15', count=2, pro=Product{pid='06d7903f62da11eaa2c13d7cb7217e15', name='iphone x', img='iphone.jpg', price=9999.0, t=Types{tid='d96cac00628111eaa2c13d7cb7217e15', name='digit'}}}, Detail{did='ade6d49962dc11eaa2c13d7cb7217e15', count=1, pro=Product{pid='778619ce62da11eaa2c13d7cb7217e15', name='yagao', img='heiren.jpg', price=99.0, t=Types{tid='d090dec4628111eaa2c13d7cb7217e15', name='house'}}}, Detail{did='b7fa3ada62dc11eaa2c13d7cb7217e15', count=1, pro=Product{pid='aa0f109e62d911eaa2c13d7cb7217e15', name='mac pro', img='mac.jpg', price=21999.0, t=Types{tid='d96cac00628111eaa2c13d7cb7217e15', name='digit'}}}]}
Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@6acdbdf5]
Returned connection 1791868405 to pool.

Process finished with exit code 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值