@TableField注解之深入理解与应用方式

 更新时间:2024年10月23日 09:44:37   作者:需要重新演唱  
在现代软件开发中,@TableField注解作为MyBatis-Plus中的一个重要特性,用于定义实体类字段与数据库表字段的映射关系,本文详细介绍了@TableField注解的使用场景、属性及其在实际开发中的应用,包括字段名称映射、非数据库字段标识、字段填充策略

@TableField注解:深入理解与应用

引言

在现代软件开发中,数据库操作是不可或缺的一部分。为了简化数据库操作,提高开发效率,许多ORM(Object-Relational Mapping)框架应运而生。

MyBatis-Plus作为MyBatis的增强工具,提供了丰富的功能和注解,其中@TableField注解是一个非常重要的注解,用于定义实体类字段与数据库表字段的映射关系。

本文将详细介绍@TableField注解的使用场景、属性及其在实际开发中的应用,帮助读者全面理解并掌握这一重要的注解。

MyBatis-Plus简介

MyBatis-Plus(简称MP)是一个MyBatis的增强工具,旨在简化开发、提高效率。

它提供了许多便捷的功能,如代码生成、分页插件、性能分析插件等,使得开发者可以更专注于业务逻辑的实现,而不必过多关注底层的数据库操作。

@TableField注解概述

基本概念

@TableField注解是MyBatis-Plus提供的一个注解,用于标识实体类字段与数据库表字段的映射关系。

通过@TableField注解,可以指定字段的名称、是否为数据库字段、是否为主键、是否为逻辑删除字段等属性,从而实现更灵活的数据库操作。

常用属性

@TableField注解提供了多个属性,常用的属性包括:

  • value:指定数据库表字段的名称。
  • exist:指定该字段是否为数据库表字段,默认为true
  • fill:指定字段填充策略,如插入时自动填充、更新时自动填充等。
  • select:指定该字段是否参与查询,默认为true
  • update:指定该字段是否参与更新,默认为true
  • condition:指定该字段在查询条件中的匹配方式,如LIKEEQUAL等。

@TableField注解的使用场景

1. 字段名称映射

在实际开发中,数据库表字段的命名规范可能与实体类字段的命名规范不一致。

例如,数据库表字段使用下划线命名法(如user_name),而实体类字段使用驼峰命名法(如userName)。通过@TableField注解的value属性,可以指定数据库表字段的名称,实现字段名称的映射。

示例代码:

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;

@TableName("user")
public class User {
    @TableField("user_id")
    private Long id;

    @TableField("user_name")
    private String userName;

    // 其他字段和方法
}

在上述示例中,@TableField("user_id")将实体类字段id映射到数据库表字段user_id@TableField("user_name")将实体类字段userName映射到数据库表字段user_name

2. 非数据库字段标识

在某些情况下,实体类中可能包含一些非数据库字段,如计算属性、临时变量等。

通过@TableField注解的exist属性,可以指定该字段是否为数据库表字段。

exist属性设置为false,表示该字段不是数据库表字段。

示例代码:

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;

@TableName("user")
public class User {
    private Long id;

    private String userName;

    @TableField(exist = false)
    private Integer age;

    // 其他字段和方法
}

在上述示例中,@TableField(exist = false)将实体类字段age标识为非数据库字段,MyBatis-Plus在生成SQL语句时会忽略该字段。

3. 字段填充策略

在实际开发中,某些字段的值可能需要在插入或更新时自动填充,如创建时间、更新时间等。通过@TableField注解的fill属性,可以指定字段填充策略,实现自动填充功能。

示例代码:

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.FieldFill;

@TableName("user")
public class User {
    private Long id;

    private String userName;

    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

    // 其他字段和方法
}

在上述示例中,@TableField(fill = FieldFill.INSERT)指定createTime字段在插入时自动填充,@TableField(fill = FieldFill.INSERT_UPDATE)指定updateTime字段在插入和更新时自动填充。

4. 字段查询策略

在某些情况下,可能需要指定字段在查询条件中的匹配方式,如LIKEEQUAL等。通过@TableField注解的condition属性,可以指定字段在查询条件中的匹配方式。

示例代码:

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;

@TableName("user")
public class User {
    private Long id;

    @TableField(condition = "%s LIKE CONCAT('%%', #{%s}, '%%')")
    private String userName;

    // 其他字段和方法
}

// 查询示例
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("user_name", "张");
List<User> userList = userMapper.selectList(queryWrapper);

在上述示例中,

@TableField(condition = "%s LIKE CONCAT('%%', #{%s}, '%%')")

指定userName字段在查询条件中使用LIKE匹配方式。

5. 逻辑删除字段标识

在某些情况下,可能需要使用逻辑删除而不是物理删除,即通过一个字段标识记录是否被删除。通过@TableField注解的select属性,可以指定该字段是否参与查询。

示例代码:

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableLogic;

@TableName("user")
public class User {
    private Long id;

    private String userName;

    @TableField(select = false)
    @TableLogic
    private Integer deleted;

    // 其他字段和方法
}

在上述示例中,@TableField(select = false)指定deleted字段不参与查询,@TableLogic标识该字段为逻辑删除字段。

实际应用案例

案例1:用户管理系统

在一个用户管理系统中,需要对用户信息进行增删改查操作。通过@TableField注解,可以实现字段名称映射、非数据库字段标识、字段填充策略等功能。

示例代码:

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableLogic;

@TableName("user")
public class User {
    @TableField("user_id")
    private Long id;

    @TableField("user_name")
    private String userName;

    @TableField(exist = false)
    private Integer age;

    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

    @TableField(select = false)
    @TableLogic
    private Integer deleted;

    // 其他字段和方法
}

案例2:订单管理系统

在一个订单管理系统中,需要对订单信息进行增删改查操作。通过@TableField注解,可以实现字段名称映射、字段查询策略等功能。

示例代码:

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;

@TableName("order")
public class Order {
    @TableField("order_id")
    private Long id;

    @TableField("order_no")
    private String orderNo;

    @TableField(condition = "%s LIKE CONCAT('%%', #{%s}, '%%')")
    private String customerName;

    // 其他字段和方法
}

// 查询示例
QueryWrapper<Order> queryWrapper = new QueryWrapper<>();
queryWrapper.like("customer_name", "张");
List<Order> orderList = orderMapper.selectList(queryWrapper);

总结

@TableField注解是MyBatis-Plus提供的一个非常重要的注解,用于定义实体类字段与数据库表字段的映射关系。

通过@TableField注解,可以实现字段名称映射、非数据库字段标识、字段填充策略、字段查询策略、逻辑删除字段标识等功能,从而简化数据库操作,提高开发效率。在实际开发中,应根据具体需求合理使用@TableField注解,实现灵活、高效的数据库操作。

通过本文的介绍,希望读者能够全面理解@TableField注解的使用场景、属性及其在实际开发中的应用,掌握这一重要的注解,并在实际开发中灵活应用,实现高质量的软件交付。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot集成ShedLock实现分布式定时任务流程详解

    SpringBoot集成ShedLock实现分布式定时任务流程详解

    ShedLock是一个锁,官方解释是他永远只是一个锁,并非是一个分布式任务调度器。一般shedLock被使用的场景是,你有个任务,你只希望他在单个节点执行,而不希望他并行执行,而且这个任务是支持重复执行的
    2023-02-02
  • SpringBoot整合ip2region实现使用ip监控用户访问城市的详细过程

    SpringBoot整合ip2region实现使用ip监控用户访问城市的详细过程

    这篇文章主要介绍了SpringBoot整合ip2region实现使用ip监控用户访问城市,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • SpringBoot实现自定义Redis的连接的流程步骤

    SpringBoot实现自定义Redis的连接的流程步骤

    Spring Boot 自定义 Redis 主要是指在基于 Spring Boot 的应用程序中,当你需要更深入地控制或扩展对 Redis 数据库的操作,而不是仅仅依赖 Spring Data Redis 的默认配置,本文给大家介绍了SpringBoot实现自定义Redis的连接的流程步骤,需要的朋友可以参考下
    2024-09-09
  • SpringBoot整合LocalDateTime的过程

    SpringBoot整合LocalDateTime的过程

    LocalDateTime 和 Date 是 Java 中处理日期和时间的两种不同的类,在 JDK8 中引入了 java.time 包,这篇文章主要介绍了SpringBoot整合LocalDateTime的过程,需要的朋友可以参考下
    2024-08-08
  • MybatisX-Generator自动代码生成插件教程

    MybatisX-Generator自动代码生成插件教程

    这篇文章主要介绍了MybatisX-Generator自动代码生成插件教程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Java排序算法之桶排序算法解析

    Java排序算法之桶排序算法解析

    这篇文章主要介绍了Java排序算法之桶排序算法解析,桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作原理是将数组分到有限数量的桶子里,每个桶子再个别排序,有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序,需要的朋友可以参考下
    2023-10-10
  • Java9以后的垃圾回收的具体用法

    Java9以后的垃圾回收的具体用法

    这篇文章主要介绍了Java9以后的垃圾回收的具体用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • SpringBoot获取http数据、打印HTTP参数的4种方式

    SpringBoot获取http数据、打印HTTP参数的4种方式

    Java的话本地打断点可以调试获取rest入参,但是在生产环境可能我们获取入参(Http header/parameter)可能就没有那么的轻松了,所以本文给大家介绍了SpringBoot获取http数据、打印HTTP参数的4种方式,需要的朋友可以参考下
    2024-03-03
  • Java日常练习题,每天进步一点点(14)

    Java日常练习题,每天进步一点点(14)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07
  • 一篇文章带你学习JAVA MyBatis底层原理

    一篇文章带你学习JAVA MyBatis底层原理

    近来想写一个mybatis的分页插件,但是在写插件之前肯定要了解一下mybatis具体的工作原理吧,本文就详细总结了MyBatis工作原理,,需要的朋友可以参考下
    2021-09-09

最新评论