-
Notifications
You must be signed in to change notification settings - Fork 101
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fenix — 比 MyBatis 更加强大的 Spring Data JPA 扩展库 | 闪烁之狐 #80
Comments
spring-data-jpa使用多年,自己也写了一些很实用的组件,难得看到有jpa的扩展库,使用下来感觉非常赞,唯一不足的就是不能动态映射,不能自定义实体类(VO/DTO)返回。这样就不能select自己想要的,对于稍微复杂select的sql支持不是很好。望改进,加油 !!! |
@azhengZJ JPA 里面是可以将查询结果映射为自定义实体类的,你可以了解下 JPA 投影( |
|
|
@azhengZJ 我自己测试就是支持的,不晓得你的为啥不行,或者有报什么错之类的,发出来我看看。 |
这是定义接口的地方 @QueryFenix
List<FenixVO> queryByXML(@Param("params") ReqMailMessageVO params); 这是xml <fenix id="queryByXML" removeIfExist="1 = 1 AND ">
SELECT
a.id,
a.content
FROM
MailMessage AS a
WHERE
1 = 1
<andLike field="a.content" value="params.content" match="params.content != empty"/>
</fenix> 这是调用的地方 List<FenixVO> list = repository.queryByXML(vo); 这是返回的VO import lombok.Value;
@Value
public class FenixVO {
private Long id;
private String content;
} 报错如下
|
@azhengZJ 你这个不是投影的用法吧,投影的话,你需要自己定义一个接口,接口中的方法其实就对应着你自定义 Bean 里面的 -BlogRepositoryTest 除了使用投影的方式之外,你的示例场景,可以直接在你的实体类中,定义一个只有这两个值的构造方法,用 |
https://blog.csdn.net/qq_41959009/article/details/101363309 |
测试了一下 ,对接口确实是支持的,对类的方式还是不支持,new对象的方式我也知道,这种方式我不太喜欢用,因为需要创建对应的构造方法,而且构造方法和select字段的顺序有强一致性的要求,这个就增加了开发难度,而且后期构造方法或者select字段顺序不小心被改动都会影响到它的正常执行。不过能支持接口已经满足我的需求,感谢! |
@azhengZJ 也是支持类的,就在刚才的的几个单元测试文件中,有类的情况,单测方法为: 要想只通过字段名字来对应,不用写 new 的话,除非想办法做成 MyBatis 里面那样,XML 中定义一个 ResultMap,对应具体的实体类,将各个结果字段通过反射的 Setter 方法来注入到结果对象中才行,JPA 里面是不行的。 Fenix 目前的 SQL 执行都是使用 JPA 自身提供的,没有做过额外处理。 |
|
|
o |
博主,我发现一个bug,苹果safari浏览器浏览显示的文章访问次数不对 |
https://blinkfox.github.io/2019/08/20/hou-duan/jpa/fenix-bi-mybatis-geng-jia-qiang-da-de-spring-data-jpa-kuo-zhan-ku/
Fenix(菲尼克斯)是一个比 MyBatis 更加强大,为解决复杂、动态 SQL (JPQL) 而生的 Spring Data JPA 扩展库,目的是辅助开发者更方便、快捷的书写复杂、动态且易于维护的 SQL,支持 XML 和 Java
The text was updated successfully, but these errors were encountered: