在Spring JdbcTemplate 中自动生成列值

Automatically generate column value in Spring JdbcTemplate

我正在使用 Spring 3.2,并且想修改对 JdbcTemplate 使用普通 JDBC 的现有数据库调用。我是新手,但我找不到问题的答案(我希望我 post 它在正确的位置)。

假设我在数据库中有以下 table(省略了一些字段):

UserRegistration
id int, PRIMARY, autoincrement
reg_year int,
reg_id_in_year int,
reg_number varchar(30),

列 "id" 是 table 的主键,并且从 1 开始自动递增 1。

列"reg_id_in_year"是某种逻辑索引。考虑到年份,它会递增 1。每年的第一个用户注册将 reg_id_in_year 设置为 1。

列 "reg_number" 的格式为字符串 = 'reg_year / reg_id_in_year'。例如'2017 / 001'.

示例值:

id | reg_year | reg_id_in_year | reg_number | 
 1 |     2017 |              1 | 2017 / 001 |
 2 |     2017 |              2 | 2017 / 002 |
 3 |     2018 |              1 | 2018 / 001 |
 4 |     2018 |              2 | 2018 / 002 |
 5 |     2018 |              3 | 2018 / 003 |

问题

JdbcTemplate 中是否有任何功能会 "automagically" 在插入新记录时创建这些值(可能使用一些自定义 KeyGenerator)?现在我必须对数据库进行 2 次调用:

提前致谢。

您提到 JDBCTemplate 意味着您使用本机 SQL,所以我认为它更适用于 SQL。该示例基于命名参数 JDBCTemplate,但您可以根据需要对其进行调整。

INSERT INTO the_table
(reg_year, reg_id_in_year, reg_number)
VALUES
(:year, 
 (SELECT COUNT(*)+1 FROM the_table WHERE reg_year = :year), 
 CONCAT(:year,'/',(SELECT COUNT(*)+1 FROM the_table WHERE reg_year = :year))
)

或者,您可以在插入前创建一个触发器来计算值并填充它们