Mybatis中的延时加载

来源:互联网 发布:win7网络发现无法启用 编辑:程序博客网 时间:2024/06/06 09:03

resultMap可以实现高级映射(使用association、collection实现一对一及一对多映射),association、collection具备延迟加载功能


延迟加载resultMap
使用association中的select指定延迟加载去执行的statement的id


实例:查询订单关联用户,用户信息延迟加载
全局配置:SqlMapConfig.xml中添加

<settings>    <!-- 打开延迟加载得开关 -->    <setting name="lazyLoadingEnabled" value="true"/>    <!-- 将积极加载改为消极加载 即按需加载 -->    <setting name="aggressiveLazyLoading" value="false"/></settings> 


mapper中的配置:

<mapper namespace="dancheng.mybatis.mapper.OrdersMapperCustom">    <select id="findUserById" parameterType="int" resultType="user">        SELECT * FROM USER WHERE id=#{value}    </select>    <!-- 延迟加载的resultMap -->    <resultMap type="dancheng.mybatis.po.Orders" id="OrdersUserLazyLoadingResultMap">        <!-- 对订单信息进行映射配置 -->        <id column="id" property="id"/>        <result column="user_id" property="userId" />        <result column="number" property="number" />        <result column="createtime" property="createtime" />        <result column="note" property="note" />        <!-- 对用户信息进行延迟加载 -->        <association property="user" javaType="dancheng.mybatis.po.User" select="findUserById" column="user_id">                    </association>        </resultMap>    <!-- 查询订单关联用户,用户信息需要延迟加载 -->    <select id="findOrdersUserLazyLoading" resultMap="OrdersUserLazyLoadingResultMap">        SELECT * FROM orders    </select></mapper>


接口定义:

public interface OrdersMapperCustom {        public List<Orders> findOrdersUserLazyLoading() throws Exception;}


Test:
public class OrdersMapperCustomTest {    private SqlSessionFactory sqlSessionFactory;    @Before    public void setUp() throws Exception {        InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);    }        @Test    public void testFindOrdersUserLazyLoading() throws Exception {        SqlSession sqlSession = sqlSessionFactory.openSession();        OrdersMapperCustom ordersMapperCustom = sqlSession.getMapper(OrdersMapperCustom.class);                List<Orders> ordersList = ordersMapperCustom.findOrdersUserLazyLoading();                System.out.println(ordersList);        sqlSession.close();    }}


0 0
原创粉丝点击