zoukankan      html  css  js  c++  java
  • mybatis0202 一对一查询 resultType实现

    一对一查询
    查询订单信息和用户信息
    创建po类
    基础的单表的 po(数据库类)类:Items.java, Orderdetail.java, Orders.java, User.java
    一对一查询映射的pojo(工具类,用于sql语句接收返回的对象)
    创建pojo包括 订单信息和用户信息,resultType才可以完成映射。
    创建OrderCustom作为自定义pojo,继承sql查询列多的po类。

    接口:OrdersMapperCustom.java

    package cn.itcast.mybatis.mapper;
    
    import java.util.List;
    
    import cn.itcast.mybatis.po.OrderCustom;
    import cn.itcast.mybatis.po.Orders;
    import cn.itcast.mybatis.po.User;
    
    /**
     * Description:订单自定义mapper接口
     */
    public interface OrdersMapperCustom {
        // 一对一查询,查询订单关联查询用户,使用resultType
        public List<OrderCustom> findOrderUserList() throws Exception;
    
        // 一对一查询,使用resultMap
        public List<Orders> findOrderUserListResultMap() throws Exception;
        //一对一查询,延迟加载
        public List<Orders> findOrderUserListLazyLoading() throws Exception;
    
        // 一对多查询,使用resultMap
        public List<Orders> findOrderAndOrderDetails() throws Exception;
        
        // 一对多查询,使用resultMap
        public List<User> findUserOrderDetail() throws Exception;
    }

    实现类:OrdersMapperCustom.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="cn.itcast.mybatis.mapper.OrdersMapperCustom">
        <!-- 一对一查询使用reusltType完成查询订单关联查询用户信息-->
         <select id="findOrderUserList" resultType="orderCustom">
            SELECT 
              orders.*,
              user.username,
              user.sex 
            FROM
              orders,
              USER 
            WHERE orders.user_id = user.id 
         </select>
    </mapper>

    pojo类:OrderCustom.java

    package cn.itcast.mybatis.po;
    
    /**
     * <p>Description:订单扩展对象,用于完成订单和用户查询结果 映射 extends Orders</p>
     */
    public class OrderCustom extends Orders {
        
        //补充用户信息
        private String username;
        
        private String sex;
        
        private String address;

    po类:Orders.java

    package cn.itcast.mybatis.po;
    
    import java.io.Serializable;
    import java.util.Date;
    import java.util.List;
    
    public class Orders implements Serializable {
        private Integer id;
    
        private Integer userId;
    
        private String number;
    
        private Date createtime;
    
        private String note;
        
        //关联用户信息
        private User user;
        
        //订单明细
        private List<Orderdetail> orderdetails;
       
    
        public Integer getId() {
            return id;
        }

    SqlMapConfig.xml

    <!DOCTYPE configuration
    PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
    
        <!-- 属性定义 加载一个properties文件 在 properties标签 中配置属性值 -->
        <properties resource="db.properties">
            <!-- <property name="" value=""/> -->
        </properties>
      <!-- 定义 别名 -->
        <typeAliases>
            <!-- 单个别名的定义 alias:别名,type:别名映射的类型 -->
            <!-- <typeAlias type="cn.itcast.mybatis.po.User" alias="user"/> -->
            <!-- 批量别名定义 指定包路径,自动扫描包下边的pojo,定义别名,别名默认为类名(首字母小写或大写) -->
            <package name="cn.itcast.mybatis.po" />
    
        </typeAliases>
    
        <!-- 和spring整合后 environments配置将废除 -->
        <environments default="development">
            <environment id="development">
                <!-- 使用jdbc事务管理 -->
                <transactionManager type="JDBC" />
                <!-- 数据库连接池 -->
                <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>
    
        <!--加载mapper映射 如果将和spring整合后,可以使用整合包中提供的mapper扫描器,此处的mappers不用配置了。 -->
        <mappers>
            <!-- 通过resource引用mapper的映射文件 -->
            <mapper resource="sqlmap/User.xml" />
            <!-- <mapper resource="mapper/UserMapper.xml" /> -->
            <!-- 通过class引用mapper接口 class:配置mapper接口全限定名 要求:需要mapper.xml和mapper.java同名并且在一个目录 
                中 -->
            <!-- <mapper class="cn.itcast.mybatis.mapper.UserMapper"/> -->
            <!-- 批量mapper配置 通过package进行自动扫描包下边的mapper接口, 要求:需要mapper.xml和mapper.java同名并且在一个目录 
                中 -->
            <package name="cn.itcast.mybatis.mapper" />
    
    
        </mappers>
    
    
    </configuration>

    测试:

    package cn.itcast.mybatis.mapper;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.List;
    
    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.Before;
    import org.junit.Test;
    
    import cn.itcast.mybatis.po.OrderCustom;
    import cn.itcast.mybatis.po.Orders;
    import cn.itcast.mybatis.po.User;
    
    public class OrdersMapperCustomTest {
    
        // 会话工厂
        private SqlSessionFactory sqlSessionFactory;
    
        // 创建工厂
        @Before
        public void init() throws IOException {
    
            // 配置文件(SqlMapConfig.xml)
            String resource = "SqlMapConfig.xml";
    
            // 加载配置文件到输入 流
            InputStream inputStream = Resources.getResourceAsStream(resource);
    
            // 创建会话工厂
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    
        }
    
        @Test
        public void testFindOrderUserList() throws Exception {
    
            SqlSession sqlSession = sqlSessionFactory.openSession();
            // 创建mapper代理对象
            OrdersMapperCustom ordersMapperCustom = sqlSession
                    .getMapper(OrdersMapperCustom.class);
    
            // 调用方法
            List<OrderCustom> list = ordersMapperCustom.findOrderUserList();
    
            System.out.println(list);
        }
    
    }
  • 相关阅读:
    python uiautomator,比 appium 更简单的 app 测试工具
    Python 经典面试题(一)
    python 虚拟环境配置
    python 路径操作工具 pathlib,比 os 模块好用太多
    如何使用python records 库优雅的操作数据库
    使用 tablib 来自动化管理测试用例,其他的工具都不用学了
    allure 这么高大上的测试报告环境,5 分钟搞定
    学会这些 pycharm 编程小技巧,编程效率提升 10 倍
    stack,unstack,groupby,pivot_table的区别
    count(),列表推导式,transpose()
  • 原文地址:https://www.cnblogs.com/yaowen/p/4870422.html
Copyright © 2011-2022 走看看