一对多映射

需求:根据用户编号查询用户信息以及用户所有订单信息

sql语句为:

select u.*,o.*,o.id oid from kuser u join orders o on o.user_id = u.id where u.id = 1;

UserMapper.xml

<?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.kkb.mapper.UserMapper"> <!--自定义映射--> <resultMap id="user_resultMap" type="user" autoMapping="true"> <result column="username" property="name"/> <collection property="orders" ofType="order" autoMapping="true"> <result column="oid" property="id"/> </collection> </resultMap> <select id="selectUserByID" parameterType="int" resultMap="user_resultMap"> select u.*,o.*,o.id oid from kuser u left join orders o on o.user_id = u.id where u.id = #{uid} </select> </mapper>

autoMapping="true" 将自动映射字段名与属性名能对应的字段,我们只需要添加对应不上的即可

测试代码:

@Test public void test2(){ SqlSession session = factory.openSession(); UserMapper mapper = session.getMapper(UserMapper.class); User user = mapper.selectUserByID(1); System.out.println(user); session.close(); }

注意:在处理一对多时无论如何在resultMap标签中必须至少存在一个手动映射字段否则,将不会合并重复的主记录(user) 按照官方的说法,建议将手动映射id字段,可提高整体性能:去看看

另外collection标签中 ofType用于指定元素的类型 javaType指定容器类型

原文地址:https://www.cnblogs.com/huaobin/p/14162739.html