JPA的封装中阶使用

  • 忽略了依赖的引入,具体请看上面的文章

注意事项

  • dao层必须继承 `JpaBasicsDao`
  • service层必须继承 `J2Service`
  • serviceImpl层必须继承 `J2ServiceImpl`

配合CommUtils.getSelectBean2 使用

  • 2.0.6版本废弃了 CommUtils 改为 JpaUtils
  • 默认拼装条件为 and eq (where field_1 = 你好 and field_2 = hi ), 如果需要使用其他条件则用**@JpaSelectOperator**进行处理
  • key值为空,默认会忽略

第一步

  1. **实体类** 或者 **dto类** 使用 **@JpaSelectOperator** 具体看注释
  2. 如果需要忽略某个字段不让他进行拼装where可以用 **@JpaSelectIgnoreField**

实体

  1. /**
  2. * 用户表 实体
  3. * @author : tn
  4. * @date : 2021-9-10
  5. */
  6. @Entity
  7. @Table(name = "sys_user",
  8. indexes = {
  9. @Index(name = "user_no_index", columnList = "userNo", unique = true),
  10. })
  11. @org.hibernate.annotations.Table(appliesTo = "sys_user", comment = "用户表")
  12. @Data
  13. @EqualsAndHashCode(callSuper = true)
  14. @DynamicUpdate
  15. @DynamicInsert
  16. public class User extends CommonBean<User> {
  17. /**
  18. * 用户编号
  19. */
  20. @Column(columnDefinition = " varchar(50) not null comment ' 用户编号' ")
  21. @JpaSelectOperator(operator = SQLOperator.LIKE, connect = SQLConnect.OR)
  22. private String userNo;
  23. /**
  24. * 姓名
  25. */
  26. @Column(columnDefinition = " varchar(100) not null comment ' 姓名' ")
  27. @JpaSelectOperator(operator = SQLOperator.LIKE, connect = SQLConnect.OR)
  28. private String name;
  29. /**
  30. * 地址
  31. */
  32. @Column(columnDefinition = " varchar(100) comment ' 地址' ")
  33. private String address;
  34. /**
  35. * 登录名称
  36. */
  37. @Column(columnDefinition = " varchar(100) not null comment '登录名称' ")
  38. @JpaSelectOperator(operator = SQLOperator.EQ, connect = SQLConnect.AND)
  39. private String loginName;
  40. /**
  41. * 登录密码
  42. */
  43. @Column(columnDefinition = " varchar(100) not null comment '登录密码' ")
  44. private String loginPwd;
  45. /**
  46. * 手机号/联系电话
  47. */
  48. @Column(columnDefinition = " varchar(15) comment ' 手机号/联系电话 ' ")
  49. private String phone;
  50. /**
  51. * 用户头像
  52. */
  53. @Column(columnDefinition = " varchar(60) comment ' 用户头像' ")
  54. private String userIcon;
  55. }

DTO

  1. /**
  2. * 用户-分页查询 dto
  3. * @author tnnn
  4. * @version V1.0
  5. * @date 2022-06-24 11:57
  6. */
  7. @ApiModel(value = "用户查询参数", description = "用户操作")
  8. @ToString
  9. @Getter
  10. @Setter
  11. @Builder(toBuilder = true)
  12. @AllArgsConstructor
  13. @NoArgsConstructor
  14. public class SelectUserDTO extends SerializableVO<SelectUserDTO> {
  15. /**
  16. * 用户编号
  17. */
  18. @Column(columnDefinition = " varchar(50) not null comment ' 用户编号' ")
  19. @JpaSelectOperator(operator = SQLOperator.LIKE, connect = SQLConnect.OR, ignoreNull = false)
  20. private String userNo;
  21. /**
  22. * 姓名
  23. */
  24. @Column(columnDefinition = " varchar(100) not null comment ' 姓名' ")
  25. @JpaSelectOperator(operator = SQLOperator.LIKE, connect = SQLConnect.OR)
  26. private String name;
  27. /**
  28. * 地址
  29. */
  30. @Column(columnDefinition = " varchar(100) comment ' 地址' ")
  31. private String address;
  32. /**
  33. * 登录名称
  34. */
  35. @Column(columnDefinition = " varchar(100) not null comment '登录名称' ")
  36. @JpaSelectOperator(operator = SQLOperator.EQ, connect = SQLConnect.AND)
  37. private String loginName;
  38. /**
  39. * 登录密码
  40. */
  41. @Column(columnDefinition = " varchar(100) not null comment '登录密码' ")
  42. private String loginPwd;
  43. /**
  44. * 手机号/联系电话
  45. */
  46. @Column(columnDefinition = " varchar(15) comment ' 手机号/联系电话 ' ")
  47. private String phone;
  48. /**
  49. * 用户头像
  50. */
  51. @Column(columnDefinition = " varchar(60) comment ' 用户头像' ")
  52. private String userIcon;
  53. }

第二步

使用 JPAUtilExpandCriteria 开始查询

  1. /**
  2. * 用户查询 - getSelectBean 在实体上使用注解
  3. * @param user 查询条件
  4. * @return
  5. */
  6. @ApiOperation(value = "查询用户",notes = "用户管理")
  7. @PostMapping("findByUser")
  8. public ResultVO<List<UserVO>> getUserByPage(@RequestBody SelectUserDTO user){
  9. User to = user.to(User.class);
  10. JPAUtilExpandCriteria<User> selectBean = CommUtils.getSelectBean(to);
  11. List<User> users = userService.getJpaBasicsDao().findAll(selectBean);
  12. return ResultVO.successForData(ListTo.to(UserVO.class, users));
  13. }
  14. /**
  15. * 用户查询 - getSelectBean2 在实体的异形(dto,vo)上使用注解
  16. * @param user 查询条件
  17. * @return
  18. */
  19. @ApiOperation(value = "查询用户",notes = "用户管理")
  20. @PostMapping("findByUser2")
  21. public ResultVO<List<UserVO>> getUserByPage2(@RequestBody SelectUserDTO selectUser){
  22. JPAUtilExpandCriteria<User> selectBean = CommUtils.getSelectBean2(selectUser);
  23. List<User> users = userService.getJpaBasicsDao().findAll(selectBean);
  24. return ResultVO.successForData(ListTo.to(UserVO.class, users));
  25. }

说明

  1. JPAUtilExpandCriteria<User> selectBean = CommUtils.getSelectBean(to); 根据 @JpaSelectOperator 进行对参数值的拼装,选择该字段的 运行符 和 sql连接符
    1. -- sql 不是上面表的,但是使用的是上面的方法步骤
    2. select userentity0_.id as id1_8_, userentity0_.update_user_name as update_u2_8_, userentity0_.create_user_name as create_u3_8_, userentity0_.update_time as update_t4_8_, userentity0_.create_time as create_t5_8_, userentity0_.user_no as user_no6_8_, userentity0_.login_name as login_na7_8_, userentity0_.login_password as login_pa8_8_, userentity0_.status as status9_8_, userentity0_.user_type as user_ty10_8_, userentity0_.company_no as company11_8_, userentity0_.company_name as company12_8_ from sys_user userentity0_ where userentity0_.company_no like '%Administrator%' or userentity0_.company_name like '%崇%'