- 基于注解方式的一对多
基于注解方式的一对多 来学习延迟加载的配置办法 - 加上日志
为了观察到延迟加载前后,SQL语句的变化,加上日志 - 只查询分类,不获取产品
把27,28,29注释掉,只获取分类,不获取产品,执行后发现,获取产品的SQL语句也执行了
package com.how2java; import java.io.IOException; import java.io.InputStream; import java.util.List; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.how2java.mapper.CategoryMapper; import com.how2java.pojo.Category; public class TestMybatis { public static void main(String[] args) throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = sqlSessionFactory.openSession(); CategoryMapper mapper = session.getMapper(CategoryMapper.class); List<Category> cs = mapper.list(); for (Category c : cs) { System.out.println(c.getName()); // List<Product> ps = c.getProducts(); // for (Product p : ps) { // System.out.println("\t"+p.getName()); // } } session.commit(); session.close(); } }
- 加上延迟加载的配置
修改mybatis-config.xml,在6-11行添加延迟加载的配置
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <settings> <!-- 打开延迟加载的开关 --> <setting name="lazyLoadingEnabled" value="true" /> <!-- 将积极加载改为消息加载即按需加载 --> <setting name="aggressiveLazyLoading" value="false"/> </settings> <typeAliases> <package name="com.how2java.pojo"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/how2java?characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="admin"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/how2java/pojo/Category.xml"/> <mapper class="com.how2java.mapper.CategoryMapper"/> <mapper class="com.how2java.mapper.ProductMapper"/> </mappers> </configuration>
- 只查询分类,不获取产品
执行同样的操作,可以观察到,只查询了category_表的数据,没有查询product_表的数据
- 只有在查询产品的时候,才会看到SQL语句
修改代码,获取分类对应的产品集合,这个时候,才会去对product_表进行查询。
package com.how2java; import java.io.IOException; import java.io.InputStream; import java.util.List; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import com.how2java.mapper.CategoryMapper; import com.how2java.pojo.Category; import com.how2java.pojo.Product; public class TestMybatis { public static void main(String[] args) throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession session = sqlSessionFactory.openSession(); CategoryMapper mapper = session.getMapper(CategoryMapper.class); List<Category> cs = mapper.list(); for (Category c : cs) { System.out.println(c.getName()); List<Product> ps = c.getProducts(); for (Product p : ps) { System.out.println("\t"+p.getName()); } } session.commit(); session.close(); } }
Mybatis其他-延迟加载
最新推荐文章于 2022-04-11 17:25:05 发布