目錄
前言
?1 成員變量數據類型和字段類型 保持對應
2 成員變量的變量名,應采用小駝峰命名法
3 數據表中的主鍵如id 應采用自增方式
4 數據表中的時間類型數據與實體類中的時間類型的變量無法實現自動映射可以使用@JsonFormat 注解
4.1 配置全局時間處理器,替換@JsonFormat 注解
4.2?在Spring Boot中,可以通過配置文件設置默認格式?
前言
暫且補充這么多,之后在學習或工作中遇到了,繼續完善!
?1 成員變量數據類型和字段類型 保持對應
如下圖所示:
數據庫的字段類型 | 實體類的屬性數據類型 |
char/varchar/text[文本型] | String |
int [數值型] | Integer |
bigint | Long |
double | Double |
decimal | BigDecimal |
舉例:
實體包 entity: student? ,user 類
注意:數據庫中 data/time/datetime 字段類型 ,對應在Java中有兩種形式:
- ?Java.util.Date
- java.sql.Date
但我們推薦使用Java.util.Date
原因
這里 存在向上轉型:Java.util.Date 是java.sql.Date 的父類
2 成員變量的變量名,應采用小駝峰命名法
如 數據表? 字段 user_name 對應在實體類中 userName
示例
數據表
對應的實體類
3 數據表中的主鍵如id 應采用自增方式
如:
1,數據表中的主鍵(id)沒有采用自增,當我們使用id查詢,修改,刪除,操作是無法進行的!
2 ,數據表主鍵開始創建表時沒有添加,后添加,當查詢該表全部數據時,主鍵id顯示為null,當需要id時,要人為修改
示例
service層的借閱方法代碼
public Result borrowBook(Borrow borrow) {/*判斷是否借過1 觀察圖書庫存,如果還存在,則借書,如果小于1,則借書失敗*/Book book = bookService.selectBookById(borrow.getBookId());Integer Stock = book.getStock();if (Stock > 0) {borrow.setStatus(1);borrow.setBorrowDate(DateUtil.getCurrentDateTime());if (borrowMapper.insert(borrow) > 0) {System.out.println("當前圖書:"+book);// 更新圖書庫存book.setStock(Stock - 1);book.setBookId(borrow.getBookId());bookService.brUpdateBook(book);return Result.success("借書成功");}return Result.error("500", "借書失敗");}return Result.error("500", "庫存不足");}
測試結果,觀察打印的當前圖書
發現查詢不到主鍵id,? ?解決辦法是 顯示設置id
數據表
4 數據表中的時間類型數據與實體類中的時間類型的變量無法實現自動映射可以使用@JsonFormat 注解
使用@JsonFormat 注解 需要添加json依賴
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.0</version></dependency>
@JsonFormat 的作用
序列化(Java → JSON):將 Date/LocalDateTime 等時間類型按照指定格式轉換成 JSON 字符串。
反序列化(JSON → Java):將 JSON 字符串按照指定格式解析成 Java 時間類型。
注意:數據表數據與實體類數據的映射也是通過json格式數據傳遞,符合序列化與反序列化
示例
場景1:數據庫時間字段 ? 實體類 ? JSON
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;public class User {@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")private Date createTime; // 對應數據庫的 datetime/timestamp 字段// getter & setter
}
數據庫存儲:2023-10-01 12:00:00(MySQL DATETIME)
Java 對象:java.util.Date 類型
瀏覽器輸出結果
//JSON 輸出:
{"createTime": "2023-10-01 12:00:00"
}
場景2:配合 LocalDateTime(Java 8+)
import com.fasterxml.jackson.annotation.JsonFormat;
import java.time.LocalDateTime;public class Order {@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")private LocalDateTime orderTime; // 對應數據庫的 datetime/timestamp 字段// getter & setter
}
數據庫存儲:2023-10-01 12:00:00(MySQL DATETIME)
Java 對象:LocalDateTime 類型
瀏覽器輸出結果
//JSON 輸出:
{"orderTime": "2023-10-01 12:00:00"
}
4.1 配置全局時間處理器,替換@JsonFormat 注解
- 如果不想在每個字段上使用注解,可以在配置類中設置全局格式
@Configuration
public class JacksonConfig {@Beanpublic ObjectMapper objectMapper() {ObjectMapper mapper = new ObjectMapper();mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));mapper.setTimeZone(TimeZone.getTimeZone("GMT+8"));return mapper;}
}
4.2?在Spring Boot中,可以通過配置文件設置默認格式?
# application.properties
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8