当前位置: 首页 > news >正文

补充:建立实体类与数据表的映射关系

目录

前言

 1 成员变量数据类型和字段类型 保持对应

2 成员变量的变量名,应采用小驼峰命名法

3 数据表中的主键如id 应采用自增方式

4 数据表中的时间类型数据与实体类中的时间类型的变量无法实现自动映射可以使用@JsonFormat 注解

4.1 配置全局时间处理器,替换@JsonFormat 注解

4.2 在Spring Boot中,可以通过配置文件设置默认格式 


前言

暂且补充这么多,之后在学习或工作中遇到了,继续完善!


 1 成员变量数据类型和字段类型 保持对应

如下图所示:

数据库的字段类型实体类的属性数据类型
char/varchar/text[文本型]String
int [数值型]Integer
bigintLong
doubleDouble
decimalBigDecimal

举例:

实体包 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

相关文章:

  • C盘莫名其妙一直变大
  • 从github的插件直接导入unity
  • stm32week14
  • Android运行时ART加载类和方法的过程分析
  • 学习黑客 ATTCK
  • 多段线和二维多段线的区别及顶点遍历
  • Docker 服务搭建
  • 【windows操作技巧】设置应用的开机自启动
  • C++入门☞关于类的一些特殊知识点
  • AI跑得快,MCP来加速——模型计算平台在训练与推理中的硬核作用
  • 2025信息安全网络安全意识培训资料汇编(24份)
  • QT下根据深度信息计算物体尺寸并UI显示的简单方案
  • 只用Prettier进行格式化项目
  • TS 类型断言
  • 百度「心响」:左手“多智能体”右手“保姆级服务”,C端用户能看懂这技术告白吗?
  • C#方法返回值全解析:从基础语法到实战技巧
  • C++ STL简介:构建高效程序的基石
  • 实时在线状态
  • Android 输入控件事件使用示例
  • Nx 智能分发机制(Nx Agents + Nx Cloud)
  • 2年就过气!ChatGPT催生的百万年薪岗位,大厂不愿意招了
  • 伊朗公布新型弹道导弹,“萨德”系统无法拦截
  • 普京称俄中关系对维护世界稳定具有战略意义
  • 竞彩湃|新科冠军利物浦留力?纽卡斯尔全力冲击欧冠
  • 巴菲特股东大会精华版:批评拿贸易当武器,宣布年底交班
  • 5月2日,全社会跨区域人员流动量完成29275.4万人次