125 Star 398 Fork 94

drinkjava2 / jSqlBox

 / 详情

[bug]当数据库表中出现数据库关键字,麻烦转义封装一下

已完成
创建于  
2020-04-22 16:41

对于MySQL数据库方言,如果表中出现数据库关键字,如default,order,或者表名是关键字,麻烦在执行时,动态生成的sql对其中数据库关键字用引号封装一下。

对于sqlserver数据库方言,理亦如此。

后续会考虑兼容jpa注解吗?比如,jpa的表名注解,字段注解。谢谢。

评论 (3)

小xu中年 创建了任务
小xu中年 关联仓库设置为drinkjava2/jSqlBox
展开全部操作日志
  1. 关于保留字支持,这个在4.0.6版里才更新过,如果遇到数据库关键字,可以在实体属性上加上@Column注解并用反单引号或双引号或中括号括起来,如@Column(name="`xxx`"),这个和Hibernate对于@Column中保留字的处理方式相同。因为保留字不推荐使用,所以这种方式往往只用于老项目改造,而且用单引号还是其它符号视数据为而定。 它的示例请详见https://gitee.com/drinkjava2/jsqlbox/tree/master/core/src/test/java/com/github/drinkjava2/jsqlbox/function/quote_column 目录下的三个单元测试源码。
  2. JPA兼容性这个已经考虑到了,而且这一点上jSqlBox比其它国产ORM工具做的要好。以下的注解它们的用法和JPA是一模一样的,如果不一样,就说明是bug,需要订正了:
    @Entity, @Transient, @UniqueConstraint, @GenerationType, @Id, @Index, @SequenceGenerator, @GeneratedValue, @Table, @Column, @TableGenerator, @Version, @Enumerated, @Convert, @时间的
    JPA注解有90多个,jSqlBox为了简化学习成本和降低本身的复杂度,只支持以上少数JPA注解,也就是说只要与JPA大小写拼写完全相同的注解,jSqlBox用法就和JPA一致。详见jDialects项目“实体注解”一节的介绍。
    另外你可能没注意到,虽然jSqlBox没有引入JPA包,但是也可以在pom.xml里引入JPA后直接使用以上15个JPA注解而不使用jSqlBox自带的同名注解。这是因为jSqlBox是利用反射技巧在运行期动态解析注解。

有时间要测一下如果表名出现保留字,是否有bug,这块还没做单元测试。

v4.0.7版,表名出现保留字单元测试已加,见QuoteTableMySqlTest.java和QuoteTableEntityNetTest.java, 这个issu应该关了。

drinkjava2 任务状态待办的 修改为已完成

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
920504 drinkjava2 1578935955 93275 xls web 1578917170
Java
1
https://gitee.com/drinkjava2/jsqlbox.git
git@gitee.com:drinkjava2/jsqlbox.git
drinkjava2
jsqlbox
jSqlBox

搜索帮助