我们知道,MyBatis的逆向工程可以帮我们自动的生成Pojo和Mapper,大大的减少了我们开发的时间
基本的操作方法为:
那当我们要这样显示员工数据的时候
那么问题来了,
这时候MyBatis逆向工程自动生成的代码是不够的,因为这样的数据显示不仅仅是一张表,而是两张表,员工表emp,部门表dept,并且显示的信息中,还有上级领导的信息,也就是自关联查询
那这时候怎么办呢?使用关联查询
那MyBatis逆向工程自动生成的映射文件和接口只能对单表操作,怎么多表联查呢?
没有条件,创造条件
下面是思路:
1、我们由于搞分页查询,所以肯定得接收两个参数,一个是page(表示的是当前页是第几页,这里默认值我设置为1),rows(表示的是一页显示多少条数据,这里默认值我设置是3)
2、业务层
这里业务层使用到了分页的插件PageHelper,很方便,可以封装我们查询的信息
3、下面是到了Mapper层了
Mapper层是MyBatis逆向工程自动生成的,所以没有关联查询,这里我们需要修改一下,没有条件,我们就创造条件
首先是Pojo实体类Employee的修改,
可以看出生成的实体类里没有部门这个信息Dept,也没有上级员工Employee这个信息,虽然我们可以直接写在里面,但是不建议直接写在里面,这样有可能会影响到其他的操作,所以我们可以继承员工类Employee,我们去我们定义的这个类中去书写:
好了,有了实体类可以接收从数据库查询来的数据,这时候我们得去接口中添加一个方法:
一个是查询所有的员工信息,一个是通过上级领导的编号,查询上级领导的信息
接着修改EmployeeMapper.xml配置文件
这里就是关键部分了,需要说明:
这里要注意另外一个关联查询:
虽然这里没有使用到,但是还得提一下colletion和association的区别
colletion:
比如说:老师的信息中可能含有学生的信息,学生不可能只有一个,而是一个List
association:
比如说:上面的一个员工,一个部门,一个员工只有一个上级领导
最后把查询的数据返回,从分页助手的PageInfo中取出数据:
存入作用域,响应到JSP页面,JSP页面中接收数据,使用JSTL和EL表达式处理,就可以显示了: