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