mybatis使用resultType实现一对一查询

xiaoxiao2021-02-28  79

需求是:查询所有订单的信息,包括订单所属用户的姓名和地址

sql语句:

订单信息表orders

关联查询表(用户表:user):显示关联信息,使用内链接。

使用内链接还是外链接:

内链接:如果主查询表和关联查询表存在外键关系就可以使用内链接。

外链接:主查询表中和关联表没有外键关系,查询的主表信息一部分在关联查询表中,此时要用外链接。

SELECT 

orders.*,

USER.username,

USER.address

 FROM

 orders,

USER 

WHERE

 orders.user_id = USER.id

定义statement是,resultType指定po包括上面sql查询的orders表的所有字段,

这时候需要定义一个po类继承原始的po类,自定义的po类包括订单信息,用户信息

写po类 OrdersCustom继承Orders,这样OrdersCustom就可以拥有Orders所有信息,而且有了需要的东西

public class OrdersCustom extends Orders { //用户的名称 private String username; //用户地址 private String address; }

写mapper.xml配置文件,在这里是使用了resultType

<?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="com.mo.mapper.OrdersMapperCustom"> <!-- 使用resultType实现订单查询,关联查询用户信息 --> <select id="findOrderUserList" resultType="com.mo.pojo.OrdersCustom"> SELECT orders.*,USER.username,USER.address FROM orders,USER WHERE orders.user_id = USER.id </select> </mapper>

Mapper.java

public interface OrdersMapperCustom { List<OrdersCustom> findOrderUserList(); }

单元测试

public class TestDao { //这里需要创建sqlSessionFactory工厂,因为创建新的UserDaoImpl需要注入会话工厂 private SqlSessionFactory sqlSessionFactory; @Before public void setUp() throws IOException{ String resource = "SqlMapConfig.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } @Test public void test2(){ SqlSession sqlSession = sqlSessionFactory.openSession(); OrdersMapperCustom ordersMapperCustom = sqlSession.getMapper(OrdersMapperCustom.class); List<OrdersCustom> list = ordersMapperCustom.findOrderUserList(); System.out.println(list.size()); } }

写po类 OrdersCustom继承Orders,这样OrdersCustom就可以拥有Orders所有信息,而且有了需要的东西

public class OrdersCustom extends Orders { //用户的名称 private String username; //用户地址 private String address; }
转载请注明原文地址: https://www.6miu.com/read-67136.html

最新回复(0)