This article mainly introduces the detailed explanation of delayed loading in the mybatis tutorial. The meaning and usage implementation of lazy loading are introduced in detail. Those who are interested can learn about
lazy loading
1 The meaning of using lazy loading
When performing data query, in order to improve database query performance, try to use single table query, because single table query is faster than multi-table related query.
If querying a single table can meet the needs, query the single table at the beginning. When related information is needed, then related query. When related information is needed, query again. This is called delayed loading.
The resultMap in mybatis provides the delayed loading function, and the delayed loading is configured through the resultMap.
2 Configure mybatis to support delayed loading
<!-- 全局配置参数 --> <settings> <!-- 延迟加载总开关 --> <setting name="lazyLoadingEnabled" value="true" /> <!-- 设置按需加载 --> <setting name="aggressiveLazyLoading" value="false" /> </settings>
3 Lazy loading implementation
3.1 Implementation ideas
3.2 mapper.xml
##
<!-- 一对一查询延迟加载 开始只查询订单,对用户信息进行延迟加载 --> <select id="findOrderUserListLazyLoading" resultMap="orderCustomLazyLoading"> SELECT orders.* FROM orders </select>
<!-- 一对一查询延迟加载 的配置 --> <resultMap type="orders" id="orderCustomLazyLoading"> <!-- 完成了订单信息的映射配置 --> <!-- id:订单关联用户查询的唯 一 标识 --> <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" /> <!-- 配置用户信息的延迟加载 select:延迟加载执行的sql所在的statement的id,如果不在同一个namespace需要加namespace sql:根据用户id查询用户信息 column:关联查询的列 property:将关联查询的用户信息设置到Orders的哪个属性 --> <association property="user" select="com.sihai.mybatis.mapper.UserMapper.findUserById" column="user_id"></association> </resultMap>
//一对一查询,延迟加载 public List<Orders> findOrderUserListLazyLoading() throws Exception;
3.5 Test code
// 一对一查询延迟加载 @Test public void testFindOrderUserListLazyLoading() throws Exception { SqlSession sqlSession = sqlSessionFactory.openSession(); // 创建mapper代理对象 OrdersMapperCustom ordersMapperCustom = sqlSession .getMapper(OrdersMapperCustom.class); // 调用方法 List<Orders> list = ordersMapperCustom.findOrderUserListLazyLoading(); //这里执行延迟加载,要发出sql User user = list.get(0).getUser(); System.out.println(user); }
4 summary of resultType, resultMap, lazy loading usage scenarios
##4.1 Lazy loading:
There are many ways to implement delayed loading. Querying only a single table can meet the needs. In order to improve database query performance, lazy loading is used and then the related information is queried. Mybatis provides lazy loading function for service layer.
4.2 resultType:
Function: Map the query results to the pojo according to the consistency of the sql column name pojo attribute name.
4.3 resultMap:
Use association and collection to complete one-to-one and one-to-many advanced mapping.
4.4 association:
Function: Map association query information to a pojo class.
Function: Map related query information to a list collection.
1.
Special Recommendation
:"php Programmer Toolbox" V0.1 version Download2. Java free video tutorial
3. Comprehensive analysis of Java annotations
The above is the detailed content of Introducing the solution for mybatis lazy loading. For more information, please follow other related articles on the PHP Chinese website!