在Spring JdbcTemplate

时间:2017-12-12 22:46:01

标签: java spring jdbc spring-jdbc

我正在使用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次调用:

  • 第一个获得当年最大注册号。
  • 第二个插入新记录。

提前致谢。

1 个答案:

答案 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))
)

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