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那样继承就可以帮我实现.
我知道的就是以上几种,感觉都不是很优雅,我相信肯定有更优雅的实现方式,求大神指教. 感谢
4 回答
慕勒3428872
TA贡献1848条经验 获得超6个赞
复杂查询可以使用QueryDSL
,或者spring-data-jap的Specification
。
jpa
的作用就是让你对数据库的操作更加的“面向对象”,更加易于维护。sql可读性查,难以维护。所以复杂的业务应该是写在对应的领域模型里,而不是SQL里,我并不认为动态SQL“优雅”
添加回答
举报
0/150
提交
取消