猿问

jpa 如何优雅的实现动态sql

spring boot + jpa 的项目开发起来很快很舒服(至少开发起来是这样),从开发的角度来说(小公司没有数据库维护人员),基于注解的查询方式是最快并且最方便的.但是:

jpa竟然不支持动态sql,要知道,java的强大在于处理复杂的业务逻辑,后台系统一般java开发的居多,不支持动态sql感觉像断了条手一般的无奈.
so,我想向大神们请教,jpa有没有可能,在自己封装一层的情况下,优雅的实现动态sql,目前已知的有:
1:自定义注解,配合拦截器实现:http://gogs.daikun.xin:3000/d...优点:完全自定义,灵活性高,且完全保留所有的jpa原生提供的接口,例如:JpaRepository等,缺点:aop 大量使用反射,性能可能偏低(这都是虚的),这个思路是我自己写的,安全性,以及可靠性,说实话,我是不敢用,尽管demo测试通过.
2:覆写jpa的接口,并新加支持动态sql的接口,利用SimpleJpaRepository实现部分原生的接口,并对动态sql提供支持,优点:原生的写法,支持动态sql,缺点:如果sql定义不放在dao层,则破坏mvc设计模式,放在dao层,我感觉这就是一个工具类,类还是要那么多,怎么快?.由于是覆写?新用到的jpa接口也要覆写(当然,不会用到太多),但是不想jpa那样继承就可以帮我实现.

我知道的就是以上几种,感觉都不是很优雅,我相信肯定有更优雅的实现方式,求大神指教.
感谢

慕姐8265434
浏览 2905回答 4
4回答

叮当猫咪

CriteriaQuery 的api可以很好的实现动态查询呀。

慕勒3428872

复杂查询可以使用QueryDSL,或者spring-data-jap的Specification。 jpa的作用就是让你对数据库的操作更加的“面向对象”,更加易于维护。sql可读性查,难以维护。所以复杂的业务应该是写在对应的领域模型里,而不是SQL里,我并不认为动态SQL“优雅”

斯蒂芬大帝

简单的可以直接用jpa的解析规则在继承jpa的几口里自定义查询方法,复杂的用@Query手写sql,代码量都很少,不过也有点违背mvc
随时随地看视频慕课网APP

相关分类

Java
我要回答