文章目录
一 背景
1.1 举例
公司有若干名员工,此时,该公司与其员工之间的关系就属于一对多的关系。根据以上信息,我们可以创建公司信息与员工信息两张表。其中,公司表沿用上一个例子中的表。根据公司编号(ID)查询公司信息及其员工信息。
1.2 相关概念
- constructor - 用于在实例化类时,注入结果到构造方法中。
- idArg - ID 参数;标记出作为 ID 的结果可以帮助提高整体性能;
- arg - 将被注入到构造方法的一个普通结果。
- id – 一个 ID 结果;标记出作为 ID 的结果可以帮助提高整体性能。
- result – 注入到字段或 JavaBean 属性的普通结果。
- association – 一个复杂类型的关联;许多结果将包装成这种类型。
- 嵌套结果映射 – 关联可以是 resultMap 元素,或是对其它结果映射的引用。
- collection – 一个复杂类型的集合。
- 嵌套结果映射 – 集合可以是 resultMap 元素,或是对其它结果映射的引用。
- discriminator – 使用结果值来决定使用哪个 resultMap。
- case – 基于某些值的结果映射。
- 嵌套结果映射 – case 也是一个结果映射,因此具有相同的结构和元素;或者引用其它的结果映射
- case – 基于某些值的结果映射。
** ResultMap 的属性列表**
属性 | 描述 |
---|---|
id | 当前命名空间中的一个唯一标识,用于标识一个结果映射。 |
type | 类的完全限定名, 或者一个类型别名(关于内置的类型别名)。 |
autoMapping | 如果设置这个属性,MyBatis 将会为本结果映射开启或者关闭自动映射。 这个属性会覆盖全局的属性 autoMappingBehavior。默认值:未设置(unset)。 |
二 操作步骤
由于上一个例子中已经创建数据库,因此不再创建,本例中仅需创建员工信息表和公司表。
2.1 创建表
-- company: table
CREATE TABLE `company`
(
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '公司编号',
`name` varchar(20) NOT NULL COMMENT '公司名称',
PRIMARY KEY (`id`)
) ENGINE = InnoDB
AUTO_INCREMENT = 4
DEFAULT CHARSET = utf8 COMMENT ='公司信息表';
-- staff: table
CREATE TABLE `staff`
(
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '员工编号',
`name` varchar(20) NOT NULL COMMENT '员工姓名',
`age` int(11) NOT NULL COMMENT '员工年龄',
`id_com` int(11) NOT NULL COMMENT '公司编号',
PRIMARY KEY (`id`),
KEY `staff_company_id_fk` (`id_com`),
CONSTRAINT `staff_company_id_fk` FOREIGN KEY (`id_com`) REFERENCES `company` (`id`)
) ENGINE = InnoDB
AUTO_INCREMENT = 6
DEFAULT CHARSET = utf8 COMMENT ='员工表';
-- No native definition for element: staff_company_id_fk (index)
INSERT INTO mybatis.company (id, name) VALUES (1, 'A_LTD');
INSERT INTO mybatis.company (id, name) VALUES (2, 'B_LTD');
INSERT INTO mybatis.company (id, name)