不熟悉的花十分钟看看入门的,也无妨
jpa+queryDSL入门
踩坑经历:
需求: 连表查询时,使用Projections对象
,按需选择返回字段组装成一个VO对象
坑点: 返回的字段有Integer
对象,如id
字段; 也有String
对象,如title
字段, 但是查询到的id
字段一直为null
。
天才可以忽略以下一段话,搞了一上午,反反复复测试、百度,都没有看到相关的资料,功夫不负有心人,瞎猫撞见死耗子,换了个方法查询之后,啥都有了。一度怀疑是源码有bug,但是看源码是不可能看源码的,这辈子都不可能去看源码的,有这个时间吹吹牛逼,撩撩妹子,下班打个游戏,学学炒菜,锻炼身体,保养一下头发,遛遛狗,说说骚话,不香吗,作为工程师就要有工程师的觉悟,搞研究的事情就交给天才去搞吧,哈哈。
之前使用的是Projections.bean(Class<? extends T> type, Expression<?>... exprs)
方法,
后来试了下Projections.fields(Class<? extends T> type, Expression<?>... exprs)
之后,就能拿到了
下面给个例子,如果会使用,应该大同小异了,应该看得懂吧,这里就拿个单表做查询测试了
测试示例:
@SpringBootTest
@RunWith(SpringRunner.class)
public class JPATests {
@Autowired
private JPAQueryFactory jpaQueryFactory;
@Test
public void JPATest() {
QAppAttachment appAttachment = QAppAttachment.appAttachment;
List<TaskAttachVo> taskAttaches = jpaQueryFactory.select(Projections.fields(TaskAttachVo.class,
appAttachment.iId,
appAttachment.vcTitle))
.from(appAttachment)
.where(appAttachment.iId.eq(34184))
.fetch();
System.err.println(taskAttaches);
}
}