2021-05-03 11:00  阅读(106)
文章分类:MyBatis 教程 文章标签:MyBatisMyBatis 教程
©  原文作者:一点教程 原文地址:http://www.yiidian.com/springmvc/

刚才演示了MyBatis一对一映射,接着我们看看用户对订单的一对多映射如何完成。

1 设计Pojo,建立关系

在User类添加List订单集合属性,用于关联用户的所有订单

    
    package com.yiidian.domain;
    
    import java.util.List;
    
    /**
     * 用户实体
     * 一点教程网 - www.yiidian.com
     */
    public class User {
        private Integer id;
        private String username;
        private String password;
    
        private List<Order> orders;
    
        public List<Order> getOrders() {
            return orders;
        }
    
        public void setOrders(List<Order> orders) {
            this.orders = orders;
        }
    
        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 getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    }
    

2 编写Dao接口方法

在UserDao添加查询所有用户的方法

    
    package com.yiidian.dao;
    
    import com.yiidian.domain.User;
    
    import java.util.List;
    
    /**
     * 用户Dao接口
     * 一点教程网 - www.yiidian.com
     */
    public interface UserDao {
        /**
         * 查询所有用户
         */
        public List<User> findAllUsers();
    }
    

3 编写Dao映射配置

    
    <?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">
    <!--
       namespace: 用于指定该映射文件需要映射的Dao接口
    -->
    <mapper namespace="com.yiidian.dao.UserDao">
    
        <!--一对多映射-->
        <resultMap id="UserResultMap" type="com.yiidian.domain.User">
            <id property="id" column="id"/>
            <result property="username" column="username"/>
            <result property="password" column="password"/>
            <!--关联查询用户的所有订单-->
            <collection property="orders" column="id" ofType="com.yiidian.domain.Order">
                <id property="id" column="oid"/>
                <result property="orderno" column="orderno"/>
                <result property="amount" column="amount"/>
            </collection>
        </resultMap>
    
        <select id="findAllUsers" resultMap="UserResultMap">
            SELECT
              u.*,
              o.id oid,
              o.orderno orderno,
              o.amount amount
            FROM t_user u
              LEFT JOIN t_order o
                ON o.user_id = u.id
        </select>
    </mapper>

collection:一对多映射属性

  • property:User类的orders集合属性名称
  • column:外键字段名称
  • ofType:orders集合里面的元素类型,就是Order类的全限定名

4 编写测试类

    
    package com.yiidian.mybatis;
    
    import com.yiidian.dao.OrderDao;
    import com.yiidian.dao.UserDao;
    import com.yiidian.domain.Order;
    import com.yiidian.domain.User;
    import com.yiidian.utils.MyBatisUtils;
    import org.apache.ibatis.session.SqlSession;
    import org.junit.Test;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * MyBatis测试类 - 一对多映射
     * 一点教程网 - www.yiidian.com
     */
    public class TestOne2Many {
    
        /**
         * 测试一对多映射
         */
        @Test
        public void testOrderDao(){
            //1.获取SqlSession对象
            SqlSession sqlSession = MyBatisUtils.getSession();
    
            //2.创建Mapper代理对象
            UserDao userDao = sqlSession.getMapper(UserDao.class);
    
            //3.调用方法
            List<User> list = userDao.findAllUsers();
            System.out.println(list);
    
            //4.关闭连接
            sqlSession.close();
        }
    
    }
    

5 运行测试类

使用dubug启动,查看User类的orders属性,成功封装了所有订单数据

202105031100224451.png

源码下载:https://pan.baidu.com/s/1jWgai3idBh7Vy-9WJSxILw

点赞(0)
版权归原创作者所有,任何形式转载请联系作者; Java 技术驿站 >> MyBatis 一对多关系映射
上一篇
MyBatis 一对一关系映射
下一篇
MyBatis 连接池