目录
1.添加mybatis,lombok与jdbc依赖
2.创建对应的部门dept,员工emp表
3.创建pojo对象
@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class Emp implements Serializable {
private Integer empId;
private String empName;
//关联关系 1: 一个员工对应一个部门
private Dept dept;
}
@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class Dept implements Serializable {
private Integer deptId;
private String deptName;
//一个部门对应多个员工
private List<Emp> emps;
}
mybatis一对一封装
表关系:一个员工对应一个部门
mybatis中映射规则:结果集不允许出现重名字段
编辑mapper映射文件
<?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">
<mapper namespace="com.jt.mapper.EmpMapper">
<!-- 一对一关联查询 -->
<select id="findAll" resultMap="empRM">
select e.emp_id,e.emp_name,
d.dept_id,d.dept_name
from emp e,dept d
where e.dept_id = d.dept_id
</select>
<!--3.完成一对一封装
固定用法:
1.association: 将结果集封装为单独的对象 dept
2.property 需要封装的属性名称
3.javaType 固定写法: 属性的类型
-->
<resultMap id="empRM" type="Emp">
<!--1.主键字段 -->
<id property="empId" column="emp_id"></id>
<!--2.映射其它属性字段-->
<result property="empName" column="emp_name"></result>
<association property="dept" javaType="Dept">
<!--3.完成dept对象的封装-->
<id property="deptId" column="dept_id"/>
<result property="deptName" column="dept_name"/>
</association>
</resultMap>
</mapper>
mybatis一对多封装
<?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">
<mapper namespace="com.jt.mapper.DeptMapper">
<select id="findAll" resultMap="deptRM">
select d.dept_id,d.dept_name,e.emp_id,e.emp_name
from dept d,emp e
where e.dept_id = d.dept_id
</select>
<!--Mybatis的映射,一般都是一级封装 -->
<resultMap id="deptRM" type="Dept">
<!--指定主键-->
<id column="dept_id" property="deptId"/>
<!--封装其它的属性字段-->
<result column="dept_name" property="deptName"/>
<!--封装集合 属于同一个部门下的员工,封装到一个集合中 -->
<collection property="emps" ofType="Emp">
<id column="emp_id" property="empId"/>
<result column="emp_name" property="empName"/>
</collection>
</resultMap>
</mapper>
mybatis子查询
<select id="findAllSelect" resultMap="empRM2">
select * from emp
</select>
<!--进行数据封装-->
<resultMap id="empRM2" type="Emp">
<id column="emp_id" property="empId"/>
<result column="emp_name" property="empName"/>
<association property="dept" javaType="Dept" select="selectDept" column="dept_id"></association>
</resultMap>
<select id="selectDept" resultMap="deptRM">
select * from dept where dept_id= #{dept_id}
</select>
<resultMap id="deptRM" type="Dept">
<id column="dept_id" property="deptId"/>
<result column="dept_name" property="deptName"/>
</resultMap>
mybatis配置驼峰映射
<!--配置settings信息-->
<settings>
<!--开启驼峰映射规则-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
resultType:
1.适用与单表查询,同时要求属性名称与字段相同.
2.如果属性与字段满足驼峰命名规则,开启驼峰映射之后,
可以使用resultType
resultMap:
1.如果字段不一致时使用
2.多表关联查询时使用.
3.如果开启了驼峰映射规则, 则自动映射的属性可以省略,最好标识主键
4.如果使用驼峰规则映射时,需要映射封装对象时(一对一/一对多),默认条件下.驼峰规则失效.可以使用: autoMapping="true" 要求开启驼峰映射.
5.默认条件下 一对一,一对多不会自动完成驼峰规则映射.
需要配置 autoMapping="true"才能自动映射