使用Mybatis时,处理PostgreSQL保留关键字的最佳方式是什么



当我在PostgreSQL 13中创建像namepassword这样的列时。PostgreSQL可能将其视为一个保留关键字。所以MyBatis SQL会这样:

INSERT INTO apple_server_notification_record (created_time, updated_time, notification_type, auto_renew_product_id, auto_renew_status, auto_renew_status_change_date, auto_renew_status_change_date_ms, auto_renew_status_change_date_pst, environment, `password`, bid, bvrs) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

它将在SQL中自动添加"。但是在PostgreSQL 13中执行sql时。显示此错误:

org.springframework.jdbc.BadSqlGrammarException: 
### Error updating database.  Cause: org.postgresql.util.PSQLException: ERROR: syntax error at or near "`"
Position: 249
### The error may exist in class path resource [mybatis/mapper/dolphin/AppleServerNotificationRecordMapper.xml]
### The error may involve com.dolphin.soa.post.dao.AppleServerNotificationRecordMapper.insertSelective-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO apple_server_notification_record (created_time, updated_time, notification_type, auto_renew_product_id, auto_renew_status, auto_renew_status_change_date, auto_renew_status_change_date_ms, auto_renew_status_change_date_pst, environment, `password`, bid, bvrs) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
### Cause: org.postgresql.util.PSQLException: ERROR: syntax error at or near "`"
Position: 249
; bad SQL grammar []; nested exception is org.postgresql.util.PSQLException: ERROR: syntax error at or near "`"
Position: 249

我可以通过将列password更改为apple_auth_password来解决这个问题,我知道它会解决这个问题。但在我的代码中,我必须在接收来自苹果的请求时明确地转换映射。我的实体定义如下:

private String password;

有什么好的建议可以解决这个问题吗?当遇到这个问题时,你会怎么做?

您可以更改Mybatis生成器的自动生成器配置代码配置:

<property name="autoDelimitKeywords" value="true"/>
<!--
the beginningDelimiter and endingDelimiter using " by default
when using PostgreSQL using "
when using MySQL, we should change to `
-->
<property name="beginningDelimiter" value="&quot;"/>
<property name="endingDelimiter" value="&quot;"/>

最新更新