前言:

按照个人理解,mapper.xml文件实现继承分为两个方面的继承。

第一种:

对原有的mapper.xml文件实现扩展功能。也就是创建一个新的扩展mapper.xml文件,直接继承原有mapper.xml文件中的所有内容保持不变并在此基础上扩展新的功能。

场景举例
原本有一个StudentMapper.java的mapper.xml文件,里面已经写好了新增、修改、查询功能的sql,但是此时需要对StudentMapper.java扩展实现一个新的功能(比如:删除的功能),条件是不允许更改原本StudentMapper.java的StudentMapper.xml文件,此时就需要创建一个新的mapper.xml文件,继承原有StudentMapper.java对应的StudentMapper.xml文件功能并新增实现学习功能。

代码实现:
首先我们是已经有一个StudentMapper.java和对应的StudentMapper.xml文件的,如下:

StudentMapper:

public interface StudentMapper {

    //新增学生信息
    Integer addStudentInfo(Student student);
    //根据id删除学生信息(物理刪除)
    Integer deleteStudentInfoById(Integer studentId);
    //更新学生信息
    Integer updateStudentInfo(Student student);
    

}

StudentMapper.xml:

继承MPJBaseMapper接口 mapper 继承_mapper文件继承


上面是原有的代码内容,接下来就是继承原有mapper文件实现扩展功能的代码:

首先,创建一个StudentMapper.java的扩展接口命名为StudentExtMapper.java,在扩展接口StudentExtMapper.java中补充需要扩展的查询功能,并且StudentExtMapper.java需要继承StudentMapper.java,代码如下:
StudentExtMapper:

public interface StudentExtMapper extends StudentMapper{
    //根据id查询学生信息
    Student loadStudentInfoById(Integer studentId);
}

StudentExtMapper.xml:

这个时候同样需要创建StudentExtMapper对应的mapper文件,这是一一对应的映射关系,不能被改变的。

继承MPJBaseMapper接口 mapper 继承_java_02


最关键的一步就是将原本的StudentMapper.xml文件中的namespace修改为StudentExtMapper接口的路径,因为StudentExtMapper已经继承了StudentMapper。

继承MPJBaseMapper接口 mapper 继承_继承MPJBaseMapper接口_03

但是这个时候呢,StudentMapper.java中会报错,因为前面提到mapper接口与对应xml文件以及namespace是要保持一致的关系,这时需要进行最后一步操作,就是applicationContext.xml中配置,让StudentMapper.java不被扫描就可以了。

第二种

不需要继承整个mapper.xml文件,而是直接使用mapper.xml文件中的某个已定义好的公共sql语句。

比如说在一个mapper.xml文件中已经定义好了一个公告sql语句,如下:

继承MPJBaseMapper接口 mapper 继承_mapper文件继承sql语句_04

直接在需要引入的mapper.xml文件中按照以下格式书写即可。使用include标签,refid属性的值必须是被引用的全包名和sql标签的id名

继承MPJBaseMapper接口 mapper 继承_mapper文件继承sql语句_05