需求是:查询所有订单的信息,包括订单所属用户的姓名和地址
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; }