您的位置:

MybatisPlus联合主键注解

一、@TableId注解的用途

MybatisPlus是基于Mybatis的增强工具,提供了很多便捷的注解和方法。@TableId注解是其中的一个。它的作用是标注实体类的主键字段,并且可以指定主键策略。如果实体类没有声明主键字段,MybatisPlus会自动识别实体类中的名为"id"的字段为主键。示例代码如下:

@Data
        @TableName("user")
        public class User {
        
            @TableId(value = "user_id", type = IdType.AUTO)
            private Integer userId;
        
            private String name;
        
            private Integer age;
        
            private String email;
        
            // 省略getter和setter
        }

上面的代码中,@TableId注解标注在userId字段上,指定主键名为"user_id",并且指定自增主键策略,即IdType.AUTO。

二、@TableField注解的用途

除了主键字段,实体类还有其他的字段需要映射到数据库表中。@TableField注解的作用就是标注和数据库表字段的对应关系。示例代码如下:

@Data
        @TableName("user")
        public class User {
        
            @TableId(value = "user_id", type = IdType.AUTO)
            private Integer userId;
        
            @TableField("user_name")
            private String name;
        
            private Integer age;
        
            private String email;
        
            // 省略getter和setter
        }

上面的代码中,@TableField注解标注在name字段上,指定实体类中的名字为"name",但是对应的数据库表中的字段名为"user_name"。

三、联合主键注解的用途

在实际的业务场景中,某些表的主键可能不只一个字段。这时,就需要用到MybatisPlus的联合主键注解。@TableId注解可以用在联合主键上,但是需要指定type属性为IdType.INPUT,然后在实体类中声明多个主键字段,用@TableField指定每个字段对应的数据库表中的字段名。示例代码如下:

@Data
        @TableName("user")
        public class User {
        
            @TableId(value = "user_id", type = IdType.INPUT)
            @TableField("user_id")
            private Integer userId;
        
            @TableId(value = "product_id", type = IdType.INPUT)
            @TableField("product_id")
            private Integer productId;
        
            private String name;
        
            private Integer age;
        
            private String email;
        
            // 省略getter和setter
        }

上面的代码中,@TableId注解标注在userId和productId字段上,指定主键名和数据库表字段名都为"user_id"和"product_id"。

四、多个联合主键注解的用途

有时候,联合主键并不是只有两个字段,可能有三个或者更多的字段。MybatisPlus同样支持这种情况,只需要在实体类中声明多个主键字段,并且在每个字段上面标注@TableId注解和@TableField注解。示例代码如下:

@Data
        @TableName("order")
        public class Order {
        
            @TableId(value = "order_id", type = IdType.INPUT)
            @TableField("order_id")
            private Integer orderId;
        
            @TableId(value = "product_id", type = IdType.INPUT)
            @TableField("product_id")
            private Integer productId;
            
            @TableId(value = "user_id", type = IdType.INPUT)
            @TableField("user_id")
            private Integer userId;
        
            private Double price;
        
            private Integer quantity;
        
            // 省略getter和setter
        }

上面的代码中,@TableId注解标注在orderId、productId和userId字段上,指定主键名和数据库表字段名都为"order_id"、"product_id"和"user_id"。

五、总结

MybatisPlus的联合主键注解可以很方便地处理多个字段组成的主键。@TableId注解用于标注主键字段,可以指定主键名和主键策略;@TableField注解用于标注普通字段,可以指定字段名和字段类型。在使用联合主键注解时,需要在每个主键字段上面都加上@TableId注解和@TableField注解,非常灵活。