Mybatis-generator源码修改之修改xmlmapper生成源码

需求:
项目使用了mybatis,想要防止xss,但是不想在后台去做html代码的转义工作,因为牵扯太多,所以就想着在数据库层面来做这个事儿。

解决办法:
1.在mysql添加一个自定义函数来转义html代码
2.修改mybatis-generator源码,在所有insert和update的地方加上自定义转义函数

mybatis-generator源码修改:

1.新建一个maven工程,使用maven的Download Sources,获得mybatis-generator-core的源码。
pom.xml里面添加以下代码:

    <dependency>
        <groupId>org.mybatis.generatorgroupId>
            <artifactId>mybatis-generator-coreartifactId>
            <version>1.3.2version>
    dependency>

2.把源码解压导入到工程里面,首先解决报错的地方
这两个类在这里没用,可以删除掉
还有就是有依赖log4j的地方,添加以下代码获取log4j的包

   <dependency>
        <groupId>log4jgroupId>
        <artifactId>log4jartifactId>
        <version>1.2.17version>
     dependency>

3.解决了以上问题就可以开始修改源码了
目的是修改数据入库的地方,那么就需要找到所有update和insert的地方,查看源码的结构,很容就找到了生成xmlmapper的类,需要修改的类如下图:
Mybatis-generator源码修改之修改xmlmapper生成源码_第1张图片

随便挑一个类出来看看,很容易就发现了如下图所示的地方是mybatis-generate生成的xml传参的地方
Mybatis-generator源码修改之修改xmlmapper生成源码_第2张图片

跟踪代码进去,有木有很熟悉
Mybatis-generator源码修改之修改xmlmapper生成源码_第3张图片

没错,这就是mybatis的xmlmapper里面的代码
Mybatis-generator源码修改之修改xmlmapper生成源码_第4张图片

因此,只需要在这里把自定义的转义函数加上即可,但是不是所有类型的数据都加上,在这里项目里字符类型只用到了varchar和char型的,所以需要先定义一个函数,判断一下是varchar和char类型的数据才加上自定义函数。代码如下:
Mybatis-generator源码修改之修改xmlmapper生成源码_第5张图片
这里自定义一个工具类来做这个事儿,以后如果有其它需要改动的地方也可以加到工具类里,同时也方便统一修改。然后找到需要修改的地方调用一下工具类的函数即可,如下图:
Mybatis-generator源码修改之修改xmlmapper生成源码_第6张图片
其它几个类找到
valuesClause.append(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn));
或者
sb.append(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn, “record.”));
或者
sb.append(MyBatis3FormattingUtilities.getParameterClause(introspectedColumn));
修改之即可。

修改之后生成的代码如下图所示:
Mybatis-generator源码修改之修改xmlmapper生成源码_第7张图片
修改源码工作完成,然后找到编译过后的class文件,替换掉原来jar包里面对应的class即可,同时别忘了把工具类扔到原来的jar里。

至此,源码修改工作完成,有什么不对的地方欢迎大家斧正,由于对Mybatis-generate不熟悉,所以可能还会有更高效的也欢迎大家不吝赐教,另外,Mybatis-generate可以自定义插件,不知道能不能在插件里完成这个事儿呢,有空可以研究研究。

mysql自定义html转义函数链接

你可能感兴趣的:(mybatis)