- 敏感信息自动加密(参考:AESCryptTypeHandler)
- 多生成一个以Ext结尾的Mapper类和xml文件,用于写生成的sql以外的sql语句。Ext文件不会因为重新生成而覆盖(参考:ExtXMLPlugin)
- 增加batchInsert方法,批量插入。(参考:BatchInsertPlugin)
- 增加where语句增强,用于在where条件后追加类似:is_deleted='n'的语句(参考:AssistPlugin)
- insert和insertSelective方法添加
useGeneratedKeys="true" keyProperty="id"
- 自动增加@Mapper注解(参考:ExtXMLPlugin)
- 不会生成BLOBs的java对象,但是SQL中会拆出BLOBS字段,不影响性能查询。TODO
pom.xml中对mybatis-generator-maven-plugin插件添加依赖
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.0</version>
<configuration>
<overwrite>true</overwrite>
</configuration>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
<dependency>
<groupId>club.usql</groupId>
<artifactId>mybatis-generator-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<dependency>
<groupId>club.usql</groupId>
<artifactId>mybatis-generator-plugin</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
generatorConfig.xml中添加plugin、或者在对应的列加上typeHandler,具体请参照resources下的generatorConfig文件
<plugin type="ExtXMLPlugin"/>
<table tableName="enc_test" domainObjectName="EncTest" enableCountByExample="false"
enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false">
<columnOverride column="CERT_NO" javaType="String" jdbcType="VARCHAR" typeHandler="AESCryptTypeHandler"/>
<columnOverride column="MOBILE_PHONE" javaType="String" jdbcType="VARCHAR" typeHandler="AESCryptTypeHandler"/>
</table>
在generatorConfig.xml中添加对应plgin,就可以生效
<plugin type="ExtXMLPlugin"/>
该模块用于,对数据敏感数据进行加密,如用户证件号,手机号等。 可在写入和更新数据库时对指定的列进行加密,在查询时对指定的列解密。
以下以AES为例,具体代码可见AESCryptTypeHandler。
- 单独指定列 在查询的resultMap中指定某一列,查询时可解密,如下:
<resultMap id="BaseResultMap" type="EncTest">
<id column="ID" jdbcType="BIGINT" property="id" />
<result column="CREATE_AT" jdbcType="TIMESTAMP" property="createAt" />
<result column="CREATE_BY" jdbcType="VARCHAR" property="createBy" />
<result column="MODIFY_AT" jdbcType="TIMESTAMP" property="modifyAt" />
<result column="MODIFY_BY" jdbcType="VARCHAR" property="modifyBy" />
<result column="CERT_NO" jdbcType="VARCHAR" property="certNo" typeHandler="AESCryptTypeHandler" />
<result column="MOBILE_PHONE" jdbcType="VARCHAR" property="mobilePhone" typeHandler="AESCryptTypeHandler" />
</resultMap>
在插入时,对参数名指定,
<insert id="insert" parameterType="EncTest">
insert into enc_test (ID, CREATE_AT, CREATE_BY,
MODIFY_AT, MODIFY_BY, CERT_NO,
MOBILE_PHONE
)
values (#{id,jdbcType=BIGINT}, #{createAt,jdbcType=TIMESTAMP}, #{createBy,jdbcType=VARCHAR},
#{modifyAt,jdbcType=TIMESTAMP}, #{modifyBy,jdbcType=VARCHAR}, #{certNo,jdbcType=VARCHAR,typeHandler=AESCryptTypeHandler},
#{mobilePhone,jdbcType=VARCHAR,typeHandler=AESCryptTypeHandler}
)
</insert>
如果大面积的铺这样的代码,也是一种体力活。 那么你可以在mybatis-generator的配置文件中,使用columnOverride,那么你生成的代码得到的就是上面列举的。
<table tableName="enc_test" domainObjectName="EncTest" enableCountByExample="false"
enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false">
<columnOverride column="CERT_NO" javaType="String" jdbcType="VARCHAR" typeHandler="AESCryptTypeHandler"/>
<columnOverride column="MOBILE_PHONE" javaType="String" jdbcType="VARCHAR" typeHandler="AESCryptTypeHandler"/>
</table>
- 你可以使用AESString,那么不用指定列,mybatis会自动扫描这个类型的字段进行加密解密,如下
<table tableName="enc_test" domainObjectName="EncTest" enableCountByExample="false"
enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false">
<columnOverride column="CERT_NO" javaType="AESString" jdbcType="VARCHAR" />
<columnOverride column="MOBILE_PHONE" javaType="AESString" jdbcType="VARCHAR" />
</table>
不过,还需要在应用配置application.yml中配置typeHandler
mybatis:
type-handlers-package: club.usql.mybatis.generator.handler.auto
AES-CBC-PKCS5Padding