在订单po类中 创建一个User的属性,然后利用resultMap将查询出来的与po进行自定义映射
订单Orders. java
public class Orders {
private int id;//订单号
private int user_id;//用户的id
private String order_number;//订单号
private User user;
Mapper.xml进行配置resultMap
<mapper namespace="com.mo.mapper.OrdersMapperCustom">
<!-- 定义订单信息及用户信息的resultMap -->
<resultMap type="orders" id="ordersUserResultMap">
<!--
id:订单的主键,或者是唯一的标示
result:是普通的字段
-->
<id column="id" property="id"/>
<result column="user_id" property="user_id"/>
<result column="order_number" property="order_number"/>
<!--
配置用户映射信息
将查询出来的数据 映射到orders中的user属性中
association:用于单个关系对象的映射
property:将关联信息映射到order的哪一个属性
javaType:映射属性的类型
-->
<association property="user" javaType="com.mo.pojo.User">
<!--
进行映射
id:关联的用户信息的唯一约束
result:是普通字段
column:代表表的字段
property:代表po类的属性
-->
<id column="user_id" property="id"/>
<result column="username" property="username"/>
<result column="address" property="address"/>
</association>
</resultMap>
<!-- 使用resultMap实现订单查询,关联查询用户信息 -->
<select id="findOrderUserListResultMap" resultMap="ordersUserResultMap">
SELECT orders.*,USER.username,USER.address FROM orders,USER WHERE orders.user_id = USER.id
</select>
public interface OrdersMapperCustom {
List<OrdersCustom> findOrderUserListResultMap();
}
单元测试
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 test3(){
SqlSession sqlSession = sqlSessionFactory.openSession();
OrdersMapperCustom ordersMapperCustom = sqlSession.getMapper(OrdersMapperCustom.class);
List<OrdersCustom> list = ordersMapperCustom.findOrderUserListResultMap();
System.out.println(list.size());
}
}