一 前言
1、mybatis-generate生成插件在生成过程中经常出现多次生成的情况
其主要原因是登录的用户在不同表空间都有同名的表造成的
例如 test 用户 指定TEST1表空间 但是TEST2表空间拥有相同的表名
出现的情况如下:同一张表出现两次生成
2、网上的方案是加入表空间指定数据表、本文阐述通过权限控制的方式
二 解决方案
0、如果需要保留sql中表空间使用1 如果不需要保留sql表空间可以使用2
1、
(1)插件配置表空间
<table schema="VMSV2" tableName="CMS_BUS_TASK" >
注意:schema:指定表空间名
table:指定表空间下的表名
(2)其他配置
<!-- targetProject:mapper.xml映射文件生成的位置 -->
<sqlMapGenerator targetPackage="${xml.mapper.package}"
targetProject="${xml.target.project}">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false"/>
</sqlMapGenerator>
<!-- targetProject:生成PO实体类的位置 -->
<javaModelGenerator targetPackage="${model.package}"
targetProject="${model.target.project}">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="true"/>
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="false"/>
</javaModelGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER" targetPackage="${dao.package}"
targetProject="${dao.target.project}">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false"/>
</javaClientGenerator>
注意:enableSubPackages 为 false时不是用表空间生成包名 但是sql仍然带表空间
(3)验证:生成一次文件但是 注意:1、包名携带表空间(可以通过配置(2)消除) 2、sql语句带表空间
2、
(1)修改用户的权限 指定其只看自己的表空间
-- 移除dba权限
revoke dba from 用户名
-- 授权dba权限
grant dba to 用户名
注意:如果用户具有dba权限 则拥有多个表空间的权限 导致生成过程多现多次生成 所以移除dba权限 生成后 添加回来
(2)清除表空间配置
<table tableName="CMS_BUS_TASK" >
去除 shema
(3)验证:生成一次文件且没有表空间问题
三、总结
1、使用权限去控制表空间更合理,但是也不排除使用多表空间的业务常见 所以仁者见仁智者见智。
2、注意权限控制的范围,如果用户不是dba权限则,只需移除不需要的表空间权限,生成后再根据需要添加回去。
祝你成功