mybaits 一对多
时间: 2023-09-07 13:14:24 浏览: 162
MyBatis 是一种基于 Java 语言的持久层框架,可以与多种关系型数据库进行交互,提供了一种优雅的方式来映射对象与 SQL 语句。在 MyBatis 中,一对多关系可以通过配置多个 resultMap 来实现。
例如,我们有两个表,一个是部门表(department),一个是员工表(employee),一个部门可以有多个员工,员工表中有一个外键 dept_id 关联到部门表的主键 id。下面是部门表和员工表的建表语句:
```
CREATE TABLE department (
id INT PRIMARY KEY,
name VARCHAR(50)
);
CREATE TABLE employee (
id INT PRIMARY KEY,
name VARCHAR(50),
dept_id INT,
FOREIGN KEY (dept_id) REFERENCES department(id)
);
```
在 MyBatis 中配置一对多关系的步骤如下:
1. 在 MyBatis 配置文件中配置两个 resultMap,一个用于映射部门表的数据,一个用于映射员工表的数据。
```xml
<!-- 映射部门表的数据 -->
<resultMap id="departmentMap" type="Department">
<id property="id" column="id"/>
<result property="name" column="name"/>
</resultMap>
<!-- 映射员工表的数据 -->
<resultMap id="employeeMap" type="Employee">
<id property="id" column="id"/>
<result property="name" column="name"/>
<association property="department" resultMap="departmentMap"/>
</resultMap>
```
2. 在 SQL 映射文件中编写查询语句,使用 JOIN 语句连接两个表,并使用嵌套查询语句查询员工表中的数据。
```xml
<!-- 查询部门及其员工信息 -->
<select id="getDepartmentWithEmployees" resultMap="departmentMap">
SELECT d.id, d.name, e.id as employee_id, e.name as employee_name
FROM department d
LEFT JOIN employee e ON d.id = e.dept_id
ORDER BY d.id
</select>
```
3. 在 Java 代码中调用 MyBatis 提供的 API 进行查询。
```java
SqlSession session = sqlSessionFactory.openSession();
try {
DepartmentMapper mapper = session.getMapper(DepartmentMapper.class);
Department department = mapper.getDepartmentWithEmployees();
System.out.println(department);
} finally {
session.close();
}
```
其中,DepartmentMapper 是一个 Java 接口,用于定义查询方法,getDepartmentWithEmployees 方法用于查询部门及其员工信息。Department 和 Employee 是 Java 类,分别对应部门表和员工表中的数据。在 Employee 类中,还需要定义一个 Department 类型的属性用于存储所属部门的信息。
总之,使用 MyBatis 实现一对多关系需要配置多个 resultMap,并在 SQL 映射文件中使用 JOIN 语句连接两个表,使用嵌套查询语句查询员工表中的数据。通过调用 MyBatis 提供的 API 进行查询,可以将查询结果映射到 Java 对象中。
阅读全文