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


sql语句:


订单信息表orders

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


使用内链接还是外链接:

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

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



SELECT 

orders.*,

USER.username,

USER.address

 FROM


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