12 数据库 08 ORM 数据新增
作者:谎言诞行    发布时间:2024年11月25日

1、简要说明

        从这里开始,我们将讲解用 ORM 的方式来对数据进行增加操作。在框架中,实体处理是建立在SQL 语句处理的基础上的。我通过自定义的注解,将实体对象映射为一个可执行的 SQL 语句字符串,以及对应的参数列表。然后,通过 JDBC 方式执行语句。下面,我将设计几个库表,向大家介绍我所自定义的几个注解的作用。

2、简要设计

        这里主要交代我所设计的库表信息 和 所映射的 Java 实体类。

2.1、测试库表的设计

        这里为了演示方便,我使用了SQL Server 2016 数据库作为例子。(主要是演示类型转换,因为SQL Server数据库,对于时间类型的处理,要求是 Java 中的 Timestamp 类型,而不是 LocalDateTime类型)

image.png

2.2、ORM映射实体举例(scores 表)

image.png

2.3、注解说明

        在工具包中,Java 注解暂时有7个,分别为:

        MyTableOrView 用于标记java类映射到哪个数据库表或者视图。

        MyVirtualEntity 用于标记一种虚拟的数据库到java类的映射。当需要把一些临时性的sql语句查询结果,映射到一个对象时,就可以用这个注解。

        MyIdGroup 这个注解用于标记表或者视图的唯一字段组(可以是一个字段,也可以是多个字段)。如果要标记多个字段,在每个字段对应的属性上面,添加这个注解即可。

        MyAutoIncrement 用于标记java类中,哪个属性对应的字段是自增长的。自增长的字段,在构造insert sql语句时,会忽略掉。

        MyColumn 用于标记java类中,属性映射到哪个数据库表或者视图的哪个字段。

        MyColumnIgnore 这个注解用于忽略某些类的属性,因为有些类的属性可能不属于数据库,数据库语句并没有这内容。

        MyColumnReadOnly 这个注解用于标记哪些列是只读的。因为,有些数据库列不能通过insert、update语句 设置值,数据库默认会设置这些值。比如:sql server 的 timestamp类型的列,直接设置值会报错,只能由数据库自己处理。这个注解要区别于:MyAutoIncrement 和 MyColumnIgnore。

        注意:这些注解主要功能在于,标记实体类和数据库表、视图的一种依赖关系。在Java程序与数据库交互时,实体类和数据库表进行ORM映射转换会需要注解上的某些信息。

3、实体数据插入的测试代码示例

image.png

image.png

image.png

4、关于ORM的类型转换

        前面我们提到,SQL Server 对于时间信息,需要传入 Java 的 Timestamp 类型才能正常写入。那为什么在第 3 点中,我们可以直接保存 LocalDateTime 信息呢?其实很简单,我们在数据插入前,做了一个转换

        在 DBStaticUtil 的 executeSQL 方法,我增加一个数据转换处理如下:

image.png

image.png

5、关于事务处理

        关于事务的处理,其实大家可以参考前文《12 数据库 02 SQL 数据新增》。只需要把DBOperator的 insertEntity 方法改为用 DBStaticUtil 的 insertEntity 即可。这里不作过多演示

 

        本文完结。


填写一种颜色的字符(不区分大小写),1分钟有效,点击图片刷新