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);
    }

}
原文地址:https://www.cnblogs.com/yaowen/p/4870422.html