mybatis使用resultType实现一对一查询

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


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值