blinkfox / fenix

This is an extension library to the Spring Data JPA complex or dynamic SQL query. 这是一个比 MyBatis 更加强大的 Spring Data JPA 扩展库,为解决复杂动态 JPQL (或 SQL) 而生。https://blinkfox.github.io/fenix
https://blinkfox.github.io/fenix
Apache License 2.0
345 stars 72 forks source link

自定义实体类型转换 #4

Closed hexian closed 4 years ago

hexian commented 4 years ago

hi, 您好,看到您的这个扩展感到很高兴,又能挤出点时间去陪别人的女朋友了,我想向您多借点时间,跟您这边提一个小小的需求,比如我的MySQL的字段类型是datetime,实体字段也是写的private Date xxx; 之前使用投影的时候是通过暴力反射注入类型转换器类实现, 也就是在投影的getter方法上增加自定义注解,Spring投影的调用方法链上会去调用之前注册的类型转换器进行转换,我想你这边已经可以支持返回自定义实体了后面是否会考虑增加类型转换这个功能呢? 比如我的数据库字段是 birth_day, 数据类型是datetime, 但是我可以在自定义的实体Dto上使用@Convert(pattern=“yyyy-MM-dd”) private String birthDay; 这样来写,
另外还有个小问题想请教下作者, 您官网提供的语义化标签里面后期会考虑支持:

not in

not like

xx>= 1

xx<3

xx>=1 and xx<3

xx>1 and x<=3

xx>1 and xx<3

这样基本上就涵盖了大部分的sql条件了。

blinkfox commented 4 years ago

@hexian

  1. 自定义的实体类其实还是用的 HibernateTransformer 来做的,要更多的自定义功能其实还是不行的。
  2. 你说的那些标签是本来都有的。你可以看看这里 和相关部分的介绍。
hexian commented 4 years ago

是的,可以采用别名或者JPA自带的注解@Column,然后结合AliasTransformer 这样的,就可以实现类型转换,不过用@Column的话有点点怪怪的,看了下您给的链接,确实有,初次看的时候每太注意到,谢谢, 另外,投影其实也可以基于别名,所以应该是鼓励这么做的,结合您文档上的:

u.id, u.name, u.email SELECT FROM @{entityName} AS u WHERE

其实在您的这个基础上使用hibernate-data-jpa已经非常简单了,感谢您的努力!