因为框架是公司自己封装的,为了减少开发量,减少手动写SQL。引用了QueryDSL框架,然后项目上抛弃了原有的三层结构,目前就一个service层,controller层的位置在框架里封装好了,业务开发只需要建一个service类,在service层中进行业务处理以及对数据库的CRUD操作,近期在代码中发现了一同事将@RestController和@Service注解都用在了service类上,我想使用的原因:一个有请求的接口可供前端直接调用,另一个时,被其他service注入调用,所以该同事就出现了这种用法。
可以加一起,但是不建议。querydsl
,可以通过抽象。在Controller
层同通过 lambda
调用。也是很方便的。
@PostMapping("/enabled")
public Object setEnable(@RequestParam("id") HashSet<Integer> ids,
@RequestParam("enabled") boolean enabled) {
this.userService.apply(queryFactory -> queryFactory.update(QUser.user)
.set(QUser.user.enabled, enabled)
.set(QUser.user.lastModifiedDate, LocalDateTime.now())
.where(QUser.user.id.in(ids).and(QUser.user.enabled.eq(!enabled)))
.execute());
return "ok";
}
尽量还是把业务层抽离出来,它需要支持事务,以及事务方法之间的调用。事务加在Controller
层,看起来也说得过去,但其实某些Controller
逻辑并不需要事务的支持。并且Controller
中执行,校验数据封装。。等比较复杂的逻辑,还会一直占用链接不提交事务。