修改mybatis-generator中数据库类型和Java类型的映射关系

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhoutaochun/article/details/82714263

离你越近的地方,路途越远;最简单的音调,需要最艰苦的练习。——《泰戈尔诗选》

1、修改类型映射关系

在项目中,为了降低数据的存储空间,status状态字段一般使用tinyint,
1个tinyint型数据只占用一个字节,一个int型数据占用四个字节。这看起来似乎差别不大,但是在比较大的表中,字节数的增长是很快的。

tinyint的范围一般是,带符号的范围是-128到127,无符号的范围是0到255(1 bytes = 8 bit,0~2^8-1=255,-2^7~2^-1(-128~127))。这里需要主要的是,我们经常看到int(1),tinyint(1),是不是意味着他们的存储大小就一样?其实不是的,数字类型后面括号中的数字,不表示长度,表示的是显示宽度。这点与 varchar、char 后面的数字含义是不同的。

问题出现了,在mybatis-generator中,int(1)和tinyint(1)默认生成的jdbc类型是Boolean类型,只能表示true或false两种状态,无法表示多种状态。

1.1 tinyint转化为Byte类型

将其映射为Byte类型的解决方法有两种:

(1)直接修改字段长度,比如 tinyint(4) ;
(2)在jdbcURL 上加 ?tinyInt1isBit=false ,默认是true。

这种生成的对应语句为Byte类型了,可以表示多种状态了。

1.2 tinyint转户为Integer类型

但是,在实际项目开发中Byte类型用起来不是很方便,我们想将Byte类型转化为Integer类型,便于开发,解决方法同样也有两种:

(1)编写一个插件,修改mybatis源码中的JavaTypeResolver方法。参考地址。

(2)采用mybatis中table标签的columnOverride方法。如:

generator.config配置:
<table xxx>
   <columnOverride column="status" javaType="Integer"/>
</table>

java生成的model:
private Integer status;

第一种方法是进行全局修改,第二种方法是根据你的实际需要进行配置,比较方便,可根据需求动态配置。

2、修改主键映射

第二个问题也是在自动生成model的时候遇到的,我们知道在使用mybatis或tkmybatis时,能够通过insert或insertSelective方法,通过getId()方法获取自增主键的id,前提是需要在model上配置@GeneratedValue(generator = “JDBC)

@GeneratedValue 用于标注主键的生成策略,通过strategy 属性指定。默认情况下,JPA 自动选择一个最适合底层数据库的主键生成策略:SqlServer对应identity,MySQL 对应 auto increment。
在javax.persistence.GenerationType中定义了以下几种可供选择的策略:
–IDENTITY:采用数据库ID自增长的方式来自增主键字段,Oracle 不支持这种方式;
–AUTO: JPA自动选择合适的策略,是默认选项;
–SEQUENCE:通过序列产生主键,通过@SequenceGenerator 注解指定序列名,MySql不支持这种方式
–TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。

博主的JDBC是tkmybatis支持的一种属性。

@Id
@GeneratedValue(generator = "JDBC")
private Long id;

我们想在生成的时候自动生成上述代码,而不是对每个生成的model去添加一行代码,解决方法是:

在采用generator.config中配置table标签的generatedKey属性:

<table xxx>
    <generatedKey column="id" sqlStatement="JDBC" identity="true"/>
</table>

这样在model中就自动生成了generatedKey注解。

猜你喜欢

转载自blog.csdn.net/zhoutaochun/article/details/82714263
今日推荐