在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))
)
或者,您可以在插入前创建一个触发器来计算值并填充它们
我正在使用 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))
)
或者,您可以在插入前创建一个触发器来计算值并填充它们