TKMapper通用Mapper生成主键策略的几种方式

通用 Mapper 是一个可以实现任意 MyBatis 通用方法的框架,项目提供了常规的增删改查操作以及Example 相关的单表操作。通用 Mapper 是为了解决 MyBatis 使用中 90% 的基本操作,使用它可以很方便的进行开发,可以节省开发人员大量的时间。

一、Mybatis基于Maven插件快速生成Java模型以及XML

<build>
    <plugins>
        <!-- mybatis自动生成插件 -->
        <plugin>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-maven-plugin</artifactId>
            <version>1.3.2</version>
            <dependencies>
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>5.1.47</version>
                </dependency>
                <dependency>
                    <groupId>tk.mybatis</groupId>
                    <artifactId>mapper</artifactId>
                    <version>3.4.4</version>
                </dependency>
            </dependencies>
            <configuration>
                <!--配置文件的路径-->
                <configurationFile>src/main/resources/AGeneratorConfig.xml</configurationFile>
                <overwrite>true</overwrite>
            </configuration>
        </plugin>
    </plugins>
</build>

AGeneratorConfig.xml这里以A打头的命名方式主要是方便快速找到自动生成配置文件。

一、自增主键方式一

<table tableName="t_car_mortgage" domainObjectName="CarMortgageDO"
       enableSelectByExample="false"
       enableDeleteByExample="false"
       enableCountByExample="false"
       enableUpdateByExample="false">
    <generatedKey column="id" sqlStatement="MySql" identity="true"/>
</table>

自增主键策略生成的Java模型例子:

@Table(name = "`t_car_mortgage`")
public class CarMortgageDO {
    /**
     * 主键
     */
    @Id
    @Column(name = "`id`")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
}

二、自增主键方式二

在项目开发中遇到过主键生成重复报错,将Java模型注解改成JDBC如下这种方式可解决。猜测大概是不支持bigint这样的字段类型吧。

@Table(name = "`t_car_mortgage`")
public class CarMortgageDO {
    /**
     * 主键
     */
    @Id
    @Column(name = "`id`")
    @GeneratedValue(generator = "JDBC")
    private Long id;
}

三、UUID主键策略

<table tableName="T_CUSTOMER_INFO" domainObjectName="CustomerInfoDO"
       enableSelectByExample="false"
       enableDeleteByExample="false"
       enableCountByExample="false"
       enableUpdateByExample="false">
    <generatedKey column="customer_id" sqlStatement="select upper(replace(uuid(),'-',''))" identity="false" type="pre"/>
</table>

UUID主键策略生成的Java模型例子:

@Table(name = "`t_customer_info`")
public class CustomerInfoDO {
    /**
     * 客户id
     */
    @Id
    @Column(name = "`customer_id`")
    @GeneratedValue(strategy = GenerationType.IDENTITY, generator = "select upper(replace(uuid(),'-',''))")
    private String customerId;
}