关于数据库表设计和实体类设计的思考

后端开发最基础的工作就是CRUD

表设计常见疑惑点:

一、表字段类型和实体类型的对应关系

数据库常用字段类型为int、bigint、varchar、datetime;

  实体最好以integer、String、Date接受。

前后端交互一路都是date类型,输入:前端传date类型,后端接受date类型,存到数据库为datetime类型;输出:后端查到date类型,以某个日期格式(yyyy-MM-dd hh:mm:ss)传给前端。

问题1:需要注意,如果参数中有日期格式,以@requestbody接收时,会发生类型转换错误,因为json化之后,时间就是字符串,字符串解析成日期时会出错。

  解决方式1:以@ModalAttribute接受。

  解决方式2:定义属性编辑器

@InitBinder
protected void initBinder(WebDataBinder binder) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));

  解决方式3:使用两个注解解决  参考博客https://blog.csdn.net/zhou520yue520/article/details/81348926

@DateTimeFormat决定入参的格式,将字符串参数转为日期;@JsonFormat决定出参的格式,将日期转为需要的格式

   @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")private Date expectationResolveTime;

 

前端传时间戳,实体以long类型接受,存库的时候通过日期函数转为datetime类型;查询语句使用日期函数再将日期转为时间戳。

-------这样存在的问题是,dataJPA默认的sql是不会做这样的转换的,因此如果使用SpringdataJPA,entity的日期类型一定要设计未和数据库一致,不需要转换。

二、表的设计

1.主键的设置

主键设置常见的就是自增和UUID两种,可以在主键策略中设置执行那种策略。

2.日期的设置

日期可以存varchar类型、bigInt类型、datetime。强烈建议设置类型为datatime,很直观。。。

通常存datetime类型,这样数据表直观,对应entity的date类型

3.枚举值得设置

原文地址:https://www.cnblogs.com/blogNYGJ/p/11218144.html

时间: 2024-10-10 20:23:52

关于数据库表设计和实体类设计的思考的相关文章

hibernate通过数据库表反向生成实体类

步骤一: window-->open Perspective-->MyEclipse Java Persistence 进行了上面的 操作后会出现一个视图DB Brower:MyEclipse Derby, 点击右键新建new一个在出现的面板Database Driver中,Driver template中选择Oracle(ThinDriver)这里以oracle软件为例,如果是mysql就选mysql的 driver name可以随意取,Connection URL就写平常的JDBC中的 U

Hibernate之实体类设计基本步骤

1.先设计一个基类BaseBean (1)@MappedSuperclass表示实体类父类 package com.life.hibernate.bean; import java.util.Date; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Temporal; im

eclipse从数据库逆向生成Hibernate实体类(eclipse中反向生成hibernate实体类+jpa注释)

eclipse从数据库逆向生成Hibernate实体类 做项目必然要先进行数据库表设计,然后根据数据库设计建立实体类(VO),这是理所当然的,但是到公司里做项目后,让我认识到,没有说既进行完数据库设计后还要再"自己"建立一变VO.意思是,在项目设计时,要么根据需求分析建立实体类,由正向生成数据库表:要么就先进行数据库表设计,再逆向生成实体类.没有说进行完任意一方的设计后再去花时间去自己匹配建立另一方的设计. 原因是: 1. 1.5倍工作量,浪费时间.(时间对公司来说很重要) 2. 无法

【转】Eclipse从数据库逆向生成Hibernate实体类

原文地址:http://blog.csdn.net/wangpeng047/article/details/6877720 做项目必然要先进行数据库表设计,然后根据数据库设计建立实体类(VO),这是理所当然的,但是到公司里做项目后,让我认识到,没有说既进行完数据库设计后还要再"自己"建立一变VO.意思是,在项目设计时,要么根据需求分析建立实体类,由正向生成数据库表:要么就先进行数据库表设计,再逆向生成实体类.没有说进行完任意一方的设计后再去花时间去自己匹配建立另一方的设计. 原因是:

OrmLite动态创建表,一个实体类创建多张表的的偏招

在做一个Android的项目,因为使用数据库频繁,实体字段也比较多,于是打算采用ORM框架,发现OrmLite还不错,于是下了下来,打算使用. 没想到还没正式开工,就遇到问题了.我现在的一个需求如下, 我有一个实体类如下,代表聊天消息,现在要做的是针对每一个当前用户(userId)对应一个朋友(friendId)都要创建一个表.需求比较蛋疼,我本来想的是直接在加两个字段就搞定的,但是我们老大说要分表.没办法只能分表. public class ChatMessage{ public ChatMe

MyEclipse从数据库逆向生成Hibernate实体类

这个分为二个操作:数据库操作和MyEclipse操作 关系映射有:单双向1-n.n-1.n-n. 映射关系多由数据库里的表关系决定 当然也可以只对一个表进行操作 单双向1-n.n-1由二个表 单双向n-n由三个表,其中第三个表连接另外二个表 以下是创建n-n    MyEclipse从数据库逆向生成Hibernate实体类: 数据库操作: 创建表:Person_inf address_inf person_address 其中的关系是:person_address创建外键 需要注意的是perso

MyEclipse中hibernate通过数据库逆向生成java实体类

1.点击window->show view->DB Browser,然后出现如下窗口 右键空白处选择New,弹出如下窗口: 先点击Add JARs按钮,选择相应数据库的JDBC driver(因为我用的是MySQL,所以选择的是之前已经下好的JDBC driver),添加完JDBC driver后.然后选择Driver template,Driver name(任意填写),Connection URL.数据库用户名.数据库登录密码,然后点击点击Test Driver(测试一下数据库是否连接成功

[转]eclipse借助hibernate tool从数据库逆向生成Hibernate实体类

如何从数据库逆向生成Hibernate实体类呢??? 1. 首先,要在eclipse中采用自带的数据库管理器(Data Management),连通你的数据库: 然后选择数据库,这里用的oracle,然后给个名字,如MyOracle. 点击下图中按钮,新建一个数据库驱动的配置. 选择数据库版本,这里是oracle 10g版本,可以为该配置另起个名字. 然后选择相应数据库版本的jar包. 下面就是依据自身情况填写数据库连接配置了. 接下来,完善Properties下的General选项卡内容,同样

MyBatis系列二 之 数据库列名于程序实体类中字段名称不一致

MyBatis系列二  之   数据库列名于程序实体类中字段名称不一致 情景:当数据库中的列名与我们程序实体类中的字段名称不一致         使用ResultMap节点配置信息  在映射文件中  mapper根节点下配置ResultMap节点信息 <resultMap type="Student" id="studentMapper"> <result column="sname" property="stunam