mybatis的延迟加载
11.1 延迟加载概述
前提:在分步查询基础上
延迟加载:使用数据时加载,不使用数据时不加载
使用数据,指的是第二步查询的数据
11.2 延迟加载语法
全局设置
注意事项 在mybatis3.4.1之前默认为true 需要加上
<setting name="aggressiveLazyLoading" value="false"/>设置为false
<settings> <!-- 开启延迟加载 --> <setting name="lazyLoadingEnabled" value="true"/> <!-- 设置加载的数据是按需加载【3.4.1及以前版本,默认值:true】--> <setting name="aggressiveLazyLoading" value="false"/> </settings>
局部设置【fetchType】
属性位置
association标签内部或collection标签内部
属性数值
eager:关闭局部延迟加载
lazy【默认值】:开启局部延迟加载
示例代码
<association property="dept" select="com.atguigu.mapper.DeptMapper.selectDeptByDeptId" column="dept_id" fetchType="eager"> </association> <collection property="empList" select="com.atguigu.mapper.EmployeeMapper.selectEmpByDeptId" column="dept_id" fetchType="lazy"> </collection>
扩展
如果分布查询.需要多个参数时,需要将多个参数封装成map结构即可
语法 {k1=v1,k2=v2,....}
Mybatis面试题值#和$符号的区别
8.1 回顾JDBC底层对象
DriverManager
Connection
Statement:执行SQL语句,入参使用SQL拼接【字符串拼接】方式
PreparedStatement:执行SQL语句,入参使用预编译SQL方式【占位符】
ResultSet
8.2 #{}与${}区别
#{}:底层执行SQL语句,使用PreparedStatement,预编译SQL,防止SQL注入安全隐患,相对比较安全
${}:底层执行SQL语句,使用Statement,字符串拼接SQL,未防止SQL注入安全隐患,相对不安全
8.3 #与$使用场景
单表查询语句:select col,col2,... from table1 where col=? and col2=? group by ?,order by? limit ?,?
【#{}】使用场景:SQL语句中占位符(?)位置均可以使用#{}
【${}】使用场景:#解决不了的问题时,使用$
myabtis 返回结果集的四种情况
测试代码
mybatis大体搭建过程
导入jar包
<!--导入MyBatis的jar包--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.26</version> </dependency> <!--junit--> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency>
编写核心配置文件
<?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> <properties resource="jdbc.properties"></properties> <!-- <settings>--> <!--<!– 开启驼峰命名自动映射–>--> <!-- <setting name="mapUnderscoreToCamelCase" value="true"/>--> <!-- </settings>--> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/cong/mapper/EmployeeMapper.xml"/> </mappers> </configuration>
核心文件主要了解一下
根标签:configuration,所有子标签均需要书写在根标签内部
子标签
properties属性标签
<properties resource="db.properties"></properties>
作用:定义property属性,也可以引入外部Properties属性文件。
示例代码
<properties resource="db.properties"></properties> <!-- 设置数据库连接环境--> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${db.driverClassName}"/> <property name="url" value="${db.url}"/> <property name="username" value="${db.username}"/> <property name="password" value="${db.password}"/> </dataSource> </environment> </environments>
编写mapper的映射文件 需要注意
Map参数