返回

主关键字该不应该选择原始数据类型?

后端

什么是主类型?

在编程中,我们知道 Java 中有八种基本类型(primitive data type):

  • boolean
  • byte
  • short
  • char
  • int
  • long
  • float
  • double

这些基本数据类型在编程语言中直接定义,编译器知道它们的实际占用内存大小。

Java 中的非基本类型(composite type)是指自己不占用内存空间,而是空间的。通常非基本类型都对应 Java 中所说的"类"。非基本类型包括:

  • 类、接口、数组

在 Java 中,基本类型相当于"基本类"。基本类型和非基本类型在定义上是平级的,但是基本类型的类结构十分简单。

什么是主?

通常表中每一行都会分配一个唯一的主关键字,该关键字能够快速高效的查询和访问这行数据,主关键字也是关系模型中唯一性约束条件的一个组成部分,换句话说,一个主关键字的值在表中必须唯一。主关键字类似于我们在现实中给文件分配编号,而这一编号是唯一的。

主关键字是否应该选择原始数据类型?

回答主关键字选择什么样的数据类型?这个问题之前,我们先要理解 Mybatis-Plus 框架中的一些定义。Mybatis-Plus 基于 MyBatis 进行扩展和整合,是 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

我们都知道,Mybatis-Plus 代码生成器在根据表结构生成实体类时,通常会将主键类型定义为包装类,而不是原始数据类型。这是因为,当主键类型为原始数据类型时,在某些情况下可能会导致问题。

例如,假设我们有一个表,其主键类型为 int,并且我们使用 Mybatis-Plus 来操作该表。当我们试图将一个 null 值插入到该表的某个字段时,可能会抛出一个异常,因为 int 类型不能存储 null 值。

为了避免这种问题,Mybatis-Plus 建议将主键类型定义为包装类,例如 Integer。这样,当我们试图将一个 null 值插入到该表的某个字段时,Mybatis-Plus 会自动将该值转换为 null。

如何避免使用原始数据类型作为主键类型

为了避免在使用 Mybatis-Plus 时遇到问题,我们应该尽量避免使用原始数据类型作为主键类型。我们可以通过以下方法来避免这个问题:

  • 在定义表结构时,将主键类型定义为包装类,而不是原始数据类型。
  • 在使用 Mybatis-Plus 操作数据库时,将主键值转换为包装类,而不是原始数据类型。
  • 我们也可以在实体类上使用 @KeySql 注解来指定主键的类型,例如:
@KeySql(keyType = KeyType.ID)
public class User {

    private Integer id;
    private String name;
    private Integer age;

}

通过在实体类上使用 @KeySql 注解,我们可以显式地指定主键的类型,从而避免使用原始数据类型作为主键类型。

结语

在使用 Mybatis-Plus 时,我们应该尽量避免使用原始数据类型作为主键类型。我们可以通过以下方法来避免这个问题:

  • 在定义表结构时,将主键类型定义为包装类,而不是原始数据类型。
  • 在使用 Mybatis-Plus 操作数据库时,将主键值转换为包装类,而不是原始数据类型。
  • 我们可以使用 @KeySql 注解来指定主键的类型。

通过遵循这些建议,我们可以避免在使用 Mybatis-Plus 时遇到问题。

常见问题解答

  1. 为什么 Mybatis-Plus 建议将主键类型定义为包装类?

因为当主键类型为原始数据类型时,在某些情况下可能会导致问题,例如无法存储 null 值。

  1. 如何避免在 Mybatis-Plus 中使用原始数据类型作为主键类型?

我们可以通过以下方法来避免这个问题:

  • 在定义表结构时,将主键类型定义为包装类。
  • 在使用 Mybatis-Plus 操作数据库时,将主键值转换为包装类。
  • 我们可以使用 @KeySql 注解来指定主键的类型。
  1. 什么是 @KeySql 注解?

@KeySql 注解允许我们在实体类上指定主键的类型。这可以避免使用原始数据类型作为主键类型。

  1. 在使用 Mybatis-Plus 时,使用包装类作为主键类型有哪些好处?

使用包装类作为主键类型可以避免一些问题,例如无法存储 null 值。此外,它还可以使我们的代码更健壮。

  1. 在使用 Mybatis-Plus 时,使用原始数据类型作为主键类型有哪些缺点?

使用原始数据类型作为主键类型可能会导致一些问题,例如无法存储 null 值。此外,它还可以使我们的代码更脆弱。