在generatorConfig中按如下格式添加配置
<table schema="erpdb" tableName="t_supplier_category" domainObjectName="SupplierCategory"
enableCountByExample="false" enableUpdateByExample="false"
enableDeleteByExample="false" enableSelectByExample="false"
selectByExampleQueryId="false">
<!--以下为添加内容 -->
<columnOverride column="detail_address" javaType="java.lang.String" jdbcType="VARCHAR" />
<columnOverride column="supplier_introduction" javaType="java.lang.String" jdbcType="VARCHAR" />
<columnOverride column="business_scope_introduction" javaType="java.lang.String" jdbcType="VARCHAR" />
</table>
问题
解决方案:
在连接字符串后面添加nullCatalogMeansCurrent=true
原来我jdbc连接串的数据库没起作用,MybatisGenerator取的是最近一个数据库的表(我数据库有很多database),所以没取到目标的数据库的表
使用mysql驱动连接mysql时,指定数据库是用catalog,而不是schema。
那nullCatalogMeansCurrent就好理解了,因为之前配置的是schema=“piwik”,那么catalog就是null了,null的话就means current,就取当前的catalog,这个catalog就是连接串jdbc:mysql://localhost:3306/piwik里的“piwik”。
在generatorConfig.xml中的table属性中添加catalog,如下:
<table catalog="mz" tableName="mc_common_data" domainObjectName="McCommonData" ></table>
但是问题是会建立新的包,所以还是第一种方法好用
在generatorConfig.xml中配置
<table tableName="%">
<!-- generatedKey用于生成生成主键的方法,
216 如果设置了该元素,MBG会在生成的<insert>元素中生成一条正确的<selectKey>元素 -->
<generatedKey column="id" sqlStatement="MySql" identity="true"/>
</table>
或者在xml中加上useGeneratedKeys, 具体参考http://note.youdao.com/noteshare?id=9ba0bba72548f286e19442e5a83a8245&sub=568B154A0DF84C98916268C9CAC5D3C2
我希望将数据库中的tinyint转成java的Integer。
我的数据库字段:
`status` tinyint(1) DEFAULT NULL comment '是否有效,默认1->有效,0->无效';
我在JavaTypeResolver定制的实现类中(参考https://www.cnblogs.com/grey-wolf/p/9090337.html)已经修改成如下:
this.typeMap.put(-6, new JavaTypeResolverDefaultImpl.JdbcTypeInformation("TINYINT", new FullyQualifiedJavaType(Integer.class.getName())));
但是生成的时候,最后还是生成Boolean
private Boolean status;
刚开始怀疑是JavaTypeResolver对应的字段是Boolean:
this.typeMap.put(-7, new JavaTypeResolverDefaultImpl.JdbcTypeInformation("BIT", new FullyQualifiedJavaType(Boolean.class.getName())));
```不生效,但是我在我自己的实现类中添加断点是可以进入到我的实现类。
后来将tinyint(1)改成tinyint(2)就可以变成Integer了。
后来再仔细看。tinyint(1),在mybatis对应的字段是:BIT,下面是生成代码后我的mapper.xml中的status字段对应的mysql 类型:
```
在JavaTypeResolver对应的字段是Boolean:
this.typeMap.put(-7, new JavaTypeResolverDefaultImpl.JdbcTypeInformation("BIT", new FullyQualifiedJavaType(Boolean.class.getName())));
所以解决这个问题有两种方案:
this.typeMap.put(-7, new JavaTypeResolverDefaultImpl.JdbcTypeInformation("BIT", new FullyQualifiedJavaType(Integer.class.getName())));
我选择了1,因为status字段后续有可能有别的含义,0和1还不够表达