一、many2one(保存时,关系交给many方来进行处理)
1.实体类(实体类属性满足驼峰匹配的话,如userName,resultMap中添加autoMapping='true',则里面只需要写id映射,其余的挥动匹配映射)
public class Department {
private Long id;
private String name;
}
public class Employee {
private long id ;
private String name;
private Department dept;// 数据库中外键为dept_id
}
2.Dao接口类
public interface IDepartmentMapper {
void save(Department department);
Department get(Long id);
}
public interface IEmployeeMapper {
void save(Employee employee);
Employee get(Long id);
List<Employee> getList();
}
3.XML(DepartmentMapper.xml和EmployeeMapper.xml)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace:名称空间,全局的唯一标识 -->
<mapper namespace="com.shenzhenair.mybatis.demo_02.many2one.IDepartmentMapper">
<insert id="save" parameterType="Department" keyColumn="id" keyProperty="id" useGeneratedKeys="true" >
INSERT INTO department (name) VALUES (#{name})
</insert>
<select id="get" parameterType="java.lang.Long" resultType="Department">
SELECT id,name from department where id = #{id}
</select>
</mapper>
1.在查询所有many记录,每个many对应的one都是不同,查询N个many对象,总共会发出N+1条SQL.(性能特别不友好) 使用leftJoin的方式来解决.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace:名称空间,全局的唯一标识 -->
<mapper namespace="com.shenzhenair.mybatis.demo_02.many2one.IEmployeeMapper" >
<resultMap id="base_employeeMap" type="Employee" autoMapping="true" >
<id column="id" property="id" ></id>
<result column="name" property="name" ></result>
<!--
association关联关系:
property:表示实体类中关联关系的属性名
javaType:查询出来实体类中的类型
select:表示需要发送sql去查询出关联对象的sql映射
column:查询出来的哪个字段作为作为参数调用select中的SQL,此处dept_id作为映射get中的参数
columnPrefix:给映射的column添加前缀信息 dept_id,dept_name
此种关联会发送额外的sql
<association column="dept_id" property="dept" javaType="Department" select="com.shenzhenair.mybatis.demo_02.many2one.IDepartmentMapper.get" ></association>
-->
<association property="dept" javaType="Department" columnPrefix="dept_" autoMapping="true" >
<id column="id" property="id"></id>
<result column="name" property="name"></result>
</association>
</resultMap>
<insert id="save" parameterType="Employee" keyColumn="id" ke