我正在使用Spring 3.2并希望修改对使用普通JDBC到JdbcTemplate的数据库的现有调用。我是新手,但我找不到我的问题的答案(我希望我在正确的位置发布)。
假设我在数据库中有以下表(某些字段是ommited):
UserRegistration
id int, PRIMARY, autoincrement
reg_year int,
reg_id_in_year int,
reg_number varchar(30),
列“id”是表的主键,从1开始自动递增,从1开始。
列“reg_id_in_year”是某种逻辑索引。考虑到年份,它增加1。每年的第一次UserRegistration将reg_id_in_year设置为1。
列“reg_number”的格式为string ='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中是否有任何功能可以在插入新记录时“自动”创建这些值(可能使用某些自定义KeyGenerator)?现在我必须对数据库进行2次调用:
提前致谢。
答案 0 :(得分:0)
你提到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))
)
或者,您可以在插入之前创建触发器以计算值并填充它们