1、简要说明
从这里开始,我们将讲解用 ORM 的方式来对数据进行更新操作。在框架中,实体处理是建立在SQL 语句处理的基础上的。我通过自定义的注解,将实体对象映射为一个可执行的 SQL 语句字符串,以及对应的参数列表。然后,通过 JDBC 方式执行语句。下面,我将设计几个库表,向大家介绍我所自定义的几个注解的作用。
2、库表设计
这里为了演示方便,我使用了SQL Server 2016 数据库作为例子。(主要是演示类型转换,因为SQL Server数据库,对于时间类型的处理,要求是 Java 中的 Timestamp 类型,而不是 LocalDateTime类型)。具体库表设计信息,可以参考《12 数据库 08 ORM 数据新增》文章中,第2点中的库表结构。
3、ORM映射实体举例( student 表)

其实实体通过 ORM 映射,生成update 语句生成时,会校验实体的唯一属性。因为 update 删除信息,要明确删除的具体是哪一条记录。update 语句 的where 条件必须要明确。所以,在框架执行实体映射前,会自动校验注解是否完全填写。在不标记唯一列的情况下,执行数据修改处理,会产生报错如下:

4、实体数据插入的测试代码示例
当前对于实体修改,有2种模式:默认处理 和 指定字段处理。因为程序处理映射时,会把Java 实体类的所有属性扫描结果,映射为一个包含所有字段的update语句。以 student 表举例如下:

但是,我们实际上,并不需要把所有字段都修改;另外对于 SQL Server 数据库,部分数据类型的列也无法修改(比如:自增列、时间戳列)。所以我们只是修改一部分内容,比如下面所示:

这里就涉及到一个 API 设计的问题。如下图:

在我们修改库表内容时,我们在函数中指定要修改的属性名,以逗号分隔。然后就会得到我们想要的结果。在实际开发中,建议明确指定要修改的举例属性;当然,如果字段很多,全部扫描生成也可以。
4.1、实体更新代码演示如下:



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