@TableField注解之深入理解與應(yīng)用方式
@TableField注解:深入理解與應(yīng)用
引言
在現(xiàn)代軟件開(kāi)發(fā)中,數(shù)據(jù)庫(kù)操作是不可或缺的一部分。為了簡(jiǎn)化數(shù)據(jù)庫(kù)操作,提高開(kāi)發(fā)效率,許多ORM(Object-Relational Mapping)框架應(yīng)運(yùn)而生。
MyBatis-Plus作為MyBatis的增強(qiáng)工具,提供了豐富的功能和注解,其中@TableField注解是一個(gè)非常重要的注解,用于定義實(shí)體類字段與數(shù)據(jù)庫(kù)表字段的映射關(guān)系。
本文將詳細(xì)介紹@TableField注解的使用場(chǎng)景、屬性及其在實(shí)際開(kāi)發(fā)中的應(yīng)用,幫助讀者全面理解并掌握這一重要的注解。
MyBatis-Plus簡(jiǎn)介
MyBatis-Plus(簡(jiǎn)稱MP)是一個(gè)MyBatis的增強(qiáng)工具,旨在簡(jiǎn)化開(kāi)發(fā)、提高效率。
它提供了許多便捷的功能,如代碼生成、分頁(yè)插件、性能分析插件等,使得開(kāi)發(fā)者可以更專注于業(yè)務(wù)邏輯的實(shí)現(xiàn),而不必過(guò)多關(guān)注底層的數(shù)據(jù)庫(kù)操作。
@TableField注解概述
基本概念
@TableField注解是MyBatis-Plus提供的一個(gè)注解,用于標(biāo)識(shí)實(shí)體類字段與數(shù)據(jù)庫(kù)表字段的映射關(guān)系。
通過(guò)@TableField注解,可以指定字段的名稱、是否為數(shù)據(jù)庫(kù)字段、是否為主鍵、是否為邏輯刪除字段等屬性,從而實(shí)現(xiàn)更靈活的數(shù)據(jù)庫(kù)操作。
常用屬性
@TableField注解提供了多個(gè)屬性,常用的屬性包括:
value:指定數(shù)據(jù)庫(kù)表字段的名稱。exist:指定該字段是否為數(shù)據(jù)庫(kù)表字段,默認(rèn)為true。fill:指定字段填充策略,如插入時(shí)自動(dòng)填充、更新時(shí)自動(dòng)填充等。select:指定該字段是否參與查詢,默認(rèn)為true。update:指定該字段是否參與更新,默認(rèn)為true。condition:指定該字段在查詢條件中的匹配方式,如LIKE、EQUAL等。
@TableField注解的使用場(chǎng)景
1. 字段名稱映射
在實(shí)際開(kāi)發(fā)中,數(shù)據(jù)庫(kù)表字段的命名規(guī)范可能與實(shí)體類字段的命名規(guī)范不一致。
例如,數(shù)據(jù)庫(kù)表字段使用下劃線命名法(如user_name),而實(shí)體類字段使用駝峰命名法(如userName)。通過(guò)@TableField注解的value屬性,可以指定數(shù)據(jù)庫(kù)表字段的名稱,實(shí)現(xiàn)字段名稱的映射。
示例代碼:
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")將實(shí)體類字段id映射到數(shù)據(jù)庫(kù)表字段user_id,@TableField("user_name")將實(shí)體類字段userName映射到數(shù)據(jù)庫(kù)表字段user_name。
2. 非數(shù)據(jù)庫(kù)字段標(biāo)識(shí)
在某些情況下,實(shí)體類中可能包含一些非數(shù)據(jù)庫(kù)字段,如計(jì)算屬性、臨時(shí)變量等。
通過(guò)@TableField注解的exist屬性,可以指定該字段是否為數(shù)據(jù)庫(kù)表字段。
將exist屬性設(shè)置為false,表示該字段不是數(shù)據(jù)庫(kù)表字段。
示例代碼:
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)將實(shí)體類字段age標(biāo)識(shí)為非數(shù)據(jù)庫(kù)字段,MyBatis-Plus在生成SQL語(yǔ)句時(shí)會(huì)忽略該字段。
3. 字段填充策略
在實(shí)際開(kāi)發(fā)中,某些字段的值可能需要在插入或更新時(shí)自動(dòng)填充,如創(chuàng)建時(shí)間、更新時(shí)間等。通過(guò)@TableField注解的fill屬性,可以指定字段填充策略,實(shí)現(xiàn)自動(dòng)填充功能。
示例代碼:
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字段在插入時(shí)自動(dòng)填充,@TableField(fill = FieldFill.INSERT_UPDATE)指定updateTime字段在插入和更新時(shí)自動(dòng)填充。
4. 字段查詢策略
在某些情況下,可能需要指定字段在查詢條件中的匹配方式,如LIKE、EQUAL等。通過(guò)@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. 邏輯刪除字段標(biāo)識(shí)
在某些情況下,可能需要使用邏輯刪除而不是物理刪除,即通過(guò)一個(gè)字段標(biāo)識(shí)記錄是否被刪除。通過(guò)@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標(biāo)識(shí)該字段為邏輯刪除字段。
實(shí)際應(yīng)用案例
案例1:用戶管理系統(tǒng)
在一個(gè)用戶管理系統(tǒng)中,需要對(duì)用戶信息進(jìn)行增刪改查操作。通過(guò)@TableField注解,可以實(shí)現(xiàn)字段名稱映射、非數(shù)據(jù)庫(kù)字段標(biāo)識(shí)、字段填充策略等功能。
示例代碼:
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:訂單管理系統(tǒng)
在一個(gè)訂單管理系統(tǒng)中,需要對(duì)訂單信息進(jìn)行增刪改查操作。通過(guò)@TableField注解,可以實(shí)現(xiàn)字段名稱映射、字段查詢策略等功能。
示例代碼:
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);總結(jié)
@TableField注解是MyBatis-Plus提供的一個(gè)非常重要的注解,用于定義實(shí)體類字段與數(shù)據(jù)庫(kù)表字段的映射關(guān)系。
通過(guò)@TableField注解,可以實(shí)現(xiàn)字段名稱映射、非數(shù)據(jù)庫(kù)字段標(biāo)識(shí)、字段填充策略、字段查詢策略、邏輯刪除字段標(biāo)識(shí)等功能,從而簡(jiǎn)化數(shù)據(jù)庫(kù)操作,提高開(kāi)發(fā)效率。在實(shí)際開(kāi)發(fā)中,應(yīng)根據(jù)具體需求合理使用@TableField注解,實(shí)現(xiàn)靈活、高效的數(shù)據(jù)庫(kù)操作。
通過(guò)本文的介紹,希望讀者能夠全面理解@TableField注解的使用場(chǎng)景、屬性及其在實(shí)際開(kāi)發(fā)中的應(yīng)用,掌握這一重要的注解,并在實(shí)際開(kāi)發(fā)中靈活應(yīng)用,實(shí)現(xiàn)高質(zhì)量的軟件交付。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- j2ee mybatis注解@Data,@TableName,@TableField使用方式
- 注解@TableName,@TableField,pgsql的模式對(duì)應(yīng)方式
- MyBatisPlus中@TableField注解的基本使用
- mybatis-plus常用注解@TableId和@TableField的用法
- mybatis?plus框架@TableField注解不生效問(wèn)題及解決方案
- Java如何獲取@TableField,@TableName注解的值
- MyBatisPlus使用@TableField注解處理默認(rèn)填充時(shí)間的問(wèn)題
- Mybatis-plus使用注解 @TableField(exist = false)
相關(guān)文章
Spring boot2X Consul如何使用Feign實(shí)現(xiàn)服務(wù)調(diào)用
這篇文章主要介紹了spring boot2X Consul如何使用Feign實(shí)現(xiàn)服務(wù)調(diào)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
Java開(kāi)發(fā)人員最常犯的5個(gè)錯(cuò)誤總結(jié)
作為一名java開(kāi)發(fā)程序員,不知道大家有沒(méi)有遇到過(guò)一些匪夷所思的bug。這些錯(cuò)誤通常需要您幾個(gè)小時(shí)才能解決。今天,小編總結(jié)一些常見(jiàn)的編碼錯(cuò)誤,然后給出解決方案。希望大家在日常編碼中能夠避免這樣的問(wèn)題2022-12-12
mybatis模糊查詢like語(yǔ)句該如何寫(xiě)
MyBatis模糊查詢通常使用LIKE關(guān)鍵字,結(jié)合concat函數(shù)拼接通配符%實(shí)現(xiàn),在MyBatis配置文件中,通過(guò)#{keyword}傳遞參數(shù),生成帶有通配符的查詢語(yǔ)句,MyBatis-Plus中,通過(guò)LambdaQueryWrapper類和like方法構(gòu)建模糊查詢條件,簡(jiǎn)化查詢操作2024-09-09
Java實(shí)現(xiàn)樹(shù)形結(jié)構(gòu)的示例代碼
由于業(yè)務(wù)需要,后端需要返回一個(gè)樹(shù)型結(jié)構(gòu)給前端,包含父子節(jié)點(diǎn)的數(shù)據(jù)已經(jīng)在數(shù)據(jù)庫(kù)中存儲(chǔ)好。本文將為大家分享Java現(xiàn)樹(shù)形結(jié)構(gòu)的示例代碼,需要的可以參考下2022-05-05
SpringData JPA中查詢接口Repository的使用
本文主要介紹了SpringData JPA中查詢接口Repository的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07

