一、分步查询
1.1什么时候可以用到分步查询
有的时候需要我们对数据库进行关联查询,比如Employee
持有另一个Department
对象的一个引用,我们希望在查询Employee
的时候把Department
也一同查询出来。这时候我们可以编写关联表的SQL 语句,从而将查询出来的数据使用resultMap
进行映射。
我们也可以使用其他的方式将关联的信息查询出来,MyBatis 提供了分步查询的机制,把复杂的SQL 语句简单化。
关于MyBatis关联查询可参考博文:
MyBatis使用resultMap自定义映射规则与关联映射
1.2分步查询完成JavaBean 之间关联
需求:在查询Employee
信息的时候,把其对应的Department
信息也一并查询出来,这里使用分步查询的方法。使用关联映射的方法可以参考上面链接内的博文。
过程分析:
1根据员工id 向员工数据库中查询信息,获得员工的信息与部门的id。
2.根据部门的id 查询部门的信息。
3.对查询的信息进行封装。
由此可见,实现分步查询的方法就是将复杂的SQL 语句拆分成简单的多个SQL 语句,在某个SQL 执行结果的基础上再进行数据查询。
1.数据库表结构:
t_employee
数据库表结构(其中d_id
用于关联t_dept
表 中的id
):
DROP TABLE IF EXISTS `t_employee`;
CREATE TABLE `t_employee` (
`id` int(11) unsigned zerofill NOT NULL AUTO_INCREMENT,
`username` varchar(30) DEFAULT NULL,
`gender` char(1) DEFAULT NULL,
`email` varchar(20) DEFAULT NULL,
`d_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8;
t_dept
数据库表结构:
DROP TABLE IF EXISTS `t_dept`;
CREATE TABLE `t_dept` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`dept_name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
2.