数据库联表查询基于笛卡尔积,如果数据量大,效率低,耗内存
一种优化方案就是不使用联表查询,拆分成单表查询
在加上使用延迟加载,可以很大的提高效率,节省资源
就以多对一和多对多为例了,逻辑都是一样的
多对一
public class Employee {
private Integer id;
private String name;
private String gender;
private Integer age;
// 多对一
private Depart depart;
public class Depart {
private Integer id;
private String name;
}
查询Employee时,把所属的Depart的信息也查出来
按照之前方式,就是联表查询,然后resultMap处理映射
分表查询就是将这两个sql分开
先写查Depart的sql
<select id="selDepById" parameterType="int" resultMap="DepartResultMap">
SELECT * FROM depart WHERE d_id = #{id}
</select>
<resultMap id="DepartResultMap" type="Depart">
<id column="d_id" property="id"></id>
<result column="d_name" property="name"></result>
</resultMap>
再写Employee
<select id="selById" resultMap="EmployeeResultMap">
SELECT * FROM employee WHERE e_id=#{id}
</select>
<resultMap id="BaseResultMap" type<