延迟加载就是当真正需要数据的时候,才真正执行数据加载操作。
一对一(OrdersMapper.xml)
<mapper namespace="com.company.mapper.OrdersMapper"> <select id="queryOrdersUser" resultMap="ordersUserResultMap"> select * from orders as a left join userinfo as b on a.user_id=b.userid </select> <resultMap id="ordersUserResultMap" type="com.company.pojo.Orders"> <id column="id" property="id"/> <result column="user_id" property="userId"/> <result column="number" property="number"/> <result column="createtime" property="createTime"/> <result column="remark" property="remark"/> <association property="user" javaType="com.company.pojo.User"> <id column="userid" property="id"/> <result column="username" property="name"/> <result column="usersex" property="sex"/> <result column="userage" property="age"/> <result column="useraddress" property="address"/> </association> </resultMap> </mapper>
一对多(UserMapper.xml)
<mapper namespace="com.company.mapper.UserMapper"> <select id="queryUserOrders" resultMap="userOrdersResultMap"> select * from userinfo as a left join orders as b on a.userid=b.user_id </select> <resultMap id="userOrdersResultMap" type="com.company.pojo.User"> <id column="userid" property="id"/> <result column="username" property="name"/> <result column="usersex" property="sex"/> <result column="userage" property="age"/> <result column="useraddress" property="address"/> <collection property="ordersList" ofType="com.company.pojo.Orders"> <id column="id" property="id"/> <result column="user_id" property="userId"/> <result column="number" property="number"/> <result column="createtime" property="createTime"/> <result column="remark" property="remark"/> </collection> </resultMap> </mapper>
开启延迟加载
SqlMapConfig.xml (configuration标签内)
<settings> <!--开启延迟加载--> <setting name="lazyLoadingEnabled" value="true"/> <!--关闭立即加载--> <setting name="aggressiveLazyLoading" value="false"/> <!--设定toString等方法延迟加载--> <setting name="lazyLoadTriggerMethods" value="true"/> </settings>
一对一(OrdersMapper.xml)
拆分sql
select * from orders
和
select * from userinfo where userid=#{id}
处理之后的OrdersMapper.xml
<mapper namespace="com.company.mapper.OrdersMapper"> <select id="queryOrdersUser" resultMap="ordersUserResultMap"> select * from orders </select> <resultMap id="ordersUserResultMap" type="com.company.pojo.Orders"> <id column="id" property="id"/> <result column="user_id" property="userId"/> <result column="number" property="number"/> <result column="createtime" property="createTime"/> <result column="remark" property="remark"/> <!-- column:表示第一个sql执行之后的结果中,作为第二个sql语句的参数列 select:拆分的第二个sql --> <association property="user" javaType="com.company.pojo.User" column="user_id" select="com.company.mapper.UserMapper.queryUserById"> </association> </resultMap> </mapper>
测试
@Test public void queryOrdersUser(){ OrdersMapper ordersMapper = sqlSession.getMapper(OrdersMapper.class); List<Orders> ordersList = ordersMapper.queryOrdersUser(); for (Orders orders : ordersList) { System.out.println(orders.getUser().getName()); } sqlSession.close(); }
一对多(UserMapper.xml)
拆分sql
select * from userinfo
和
select * from orders where user_id=#{id}
处理之后的UserMapper.xml
<select id="queryUserOrders" resultMap="userOrdersResultMap"> select * from userinfo </select> <resultMap id="userOrdersResultMap" type="com.company.pojo.User"> <id column="userid" property="id"/> <result column="username" property="name"/> <result column="usersex" property="sex"/> <result column="userage" property="age"/> <result column="useraddress" property="address"/> <!-- column:表示第一个sql执行之后的结果中,作为第二个sql语句的参数列 select:拆分的第二个sql的id标识 --> <collection property="ordersList" ofType="com.company.pojo.Orders" column="userid" select="queryOrdersByUserId"> </collection> </resultMap> <select id="queryOrdersByUserId" parameterType="int" resultMap="ordersResultMap"> select * from orders where user_id=#{id} </select> <resultMap id="ordersResultMap" type="com.company.pojo.Orders"> <id column="id" property="id"/> <result column="user_id" property="userId"/> <result column="number" property="number"/> <result column="createtime" property="createTime"/> <result column="remark" property="remark"/> </resultMap>
测试
@Test public void queryUserOrders(){ UserMapper userMapper = sqlSession.getMapper(UserMapper.class); List<User> userList = userMapper.queryUserOrders(); //userList.forEach(System.out::println); for (User user : userList) { List<Orders> ordersList = user.getOrdersList(); ordersList.forEach(System.out::println); } sqlSession.close(); }
posted on
浙公网安备 33010602011771号