当前位置: 首页 > news >正文

MyBatis框架—xml映射

目录

一.为什么需要进行手动映射?

二.关联查询

1.使用resultMap进行映射

2.使用Connection进行映射


一.为什么需要进行手动映射?

当我们设计多表查询或关联查询时,表中含有相同的字段名或要进行关联查询时,MyBatis无法智能识别如何处理映射结果,就需要我们进行手动映射

二.关联查询

用员工表单和部门表单进行演示,对应的表单信息如下

create table employee(id int primary key auto_increment,name varchar(20),gender char(1),dep_id int,constraint employee_department foreign key(dep_id) references department(id)
)
create table department(id int primary key auto_increment,name varchar(10)
)

1.使用resultMap进行映射

我们需要用员工的id来查询他所在的部门

Employee实体类定义:

用一个Department对象来接收部门信息

public class Employee {private int id;private String name;private String gender;private Department department;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public Department getDepartment() {return department;}public void setDepartment(Department department) {this.department = department;}@Overridepublic String toString() {return "Employee{" +"id=" + id +", name='" + name + '\'' +", gender='" + gender + '\'' +", department=" + department +'}';}
}

Employee接口定义:

public interface EmployeeDao {Employee findEmployeeById(int id);ArrayList<EmployeeDao> findEmployee();
}

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="Demo.dao.EmployeeDao"><resultMap id="EmployeeMap" type="Employee"><id property="id" column="id"/><result property="name" column="name"/><result property="gender" column="gender"/>
<!--    在关联表时,会自动创建映射对象    --><association property="department" javaType="Department"><id property="id" column="did"/><result property="name" column="dname"/></association></resultMap><select id="findEmployeeById" parameterType="int" resultMap="EmployeeMap">select e.name,e.gender,d.name dname,d.id didfrom employee e inner join department d on e.dep_id=d.idwhere e.id=#{id}</select><select id="findEmployee" resultMap="EmployeeMap">select e.name,e.gender,d.name dnamefrom employee e inner join department d on e.dep_id=d.id</select></mapper>

映射部分单独拿出来解释:

//id就是resultMap的名字,type就是映射对象的数据类型(对应的实体类)<resultMap id="EmployeeMap" type="Employee"><id property="id" column="id"/><result property="name" column="name"/><result property="gender" column="gender"/>
<!--    在关联表时,会自动创建映射对象    -->
//property接收映射结果对象的名字,javaType就是在java中对应的数据类型<association property="department" javaType="Department"><id property="id" column="did"/><result property="name" column="dname"/></association></resultMap>

2.使用Connection进行映射

我们需要查找某个部门的所有员工

Department对应的实体类:

public class Department {private int id;private String name;private ArrayList<Employee> employee;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public ArrayList<Employee> getArrayList() {return employee;}public void setArrayList(ArrayList<Employee> arrayList) {this.employee = arrayList;}@Overridepublic String toString() {return "Department{" +"id=" + id +", name='" + name + '\'' +", arrayList=" + employee +'}';}
}

Department对应的接口:

public interface DepartmentDao {Department findDepartmentById(int id);
}

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="Demo.dao.DepartmentDao"><resultMap id="departmentMap" type="Department"><id column="id" property="id"/><result column="name" property="name"/>
<!--   这里的property必须和对应实现类的集合名相同,javatype指的是java中的数据类型,ofType指的是集合的泛型    --><collection property="employee" javaType="arraylist" ofType="Employee"><id column="did" property="id"/><result column="ename" property="name"/><result column="egender" property="gender"/></collection></resultMap>
<!--  查询结果必须全部写在映射里面  --><select id="findDepartmentById" parameterType="int" resultMap="departmentMap">select e.name ename,e.gender egender,e.id eid,d.name,d.idfrom employee e inner join department d on e.dep_id=d.idwhere d.id = #{id}</select>
</mapper>

相关文章:

  • 可穿戴设备待机功耗需降至μA级但需保持实时响应(2万字长文深度解析)
  • Android Studio打开xml布局文件内存会快速增加如何设置
  • C语言复习笔记--字符函数和字符串函数(下)
  • Unity接入安卓SDK(3)厘清Gradle的版本
  • 第六章.java集合与泛型
  • UML 状态图:解锁电子图书馆管理系统的高效设计
  • android的 framework 有哪些知识点和应用场景
  • 一键部署k8s之EFK日志收集系统
  • 在 Android 中实现通话录音
  • Flask API 项目 Swagger 版本打架不兼容
  • 02_Flask是什么?
  • Hadoop+Spark 笔记 2025/4/21
  • 【python实用小脚本系列】用Python让鼠标“动起来”:光标自动移动、自动点击、自动图象识别的小技巧
  • CSS 中实现 div 居中有以下几种常用方法
  • ADB -> pull指令推送电脑文件到手机上
  • 大数据学习(109)-Impala 和 Hive 之间的 SQL 差异
  • 机器学习 Day13 Boosting集成学习方法: Adaboosting和GBDT
  • Spark-SQL连接Hive总结及实验
  • 使用SystemWeaver生成SOME/IP ETS ARXML的完整实战指南
  • 23种设计模式-结构型模式之外观模式(Java版本)
  • 旁白丨还在寻亲路上的家长们,期待“上岸”
  • 著名政治学学者、中国人民大学教授仝志敏逝世
  • 海港主场不敌蓉城遭遇联赛首败,好消息是武磊终于复出了
  • 五一出境游火爆:境外包车订单增长25%,日本酒店价格贵了好几倍
  • 马上评丨直播员工上班?职场不是“楚门的世界”
  • 四川一季度GDP15246.92亿元,同比增长5.5%