ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

反射2-spring boot jpa 注入model即实现查询

2019-11-21 16:03:09  阅读:258  来源: 互联网

标签:idField get jpa spring getName express boot field id


spring boot jpa 
使用方法:
将对应的model类注入即可
// fixed parameter type private Specification<TargetModel> findByConditionSpecification(TargetModel formalParameter) { return new Specification<TargetModel>() { // fixed parameter type @Override public Predicate toPredicate(Root<TargetModel> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) { List<Predicate> predicates = new ArrayList<Predicate>(); // fixed parameter type Class clsEmployeeBase = TargetServiceImpl.class; Method[] methods = clsEmployeeBase.getDeclaredMethods(); try { for (Method method : methods) { if (method.getName().equals("findByConditionSpecification")) { Class clsEmployee = formalParameter.getClass(); Field[] fields = clsEmployee.getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); if (!"serialVersionUID".equals(field.getName()) && field.get(formalParameter) != null) { switch (field.getName()) { case "id": { // TODO fixed parameter,formal patameter primary key TargetIdentity id = (TargetIdentity) field.get(formalParameter); Field[] idFields = id.getClass().getDeclaredFields(); for (Field idField : idFields) { idField.setAccessible(true); if (!"serialVersionUID".equals(idField.getName()) && idField.get(id) != null) { String paramType = String.valueOf(idField.getType()).split(" ")[1]; switch (paramType) { case "java.lang.String": { String[] strs = String.valueOf(idField.get(id)).split(","); Expression<String> express = root.get("id").get(idField.getName()); CriteriaBuilder.In<String> in = criteriaBuilder.in(express); Arrays.asList(strs).forEach(n -> { in.value(n); }); predicates.add(in); break; } case "java.util.Date": { if (idField.getName().contains("start")) { Expression<Date> express = root.get("id") .get(idField.getName()); predicates.add(criteriaBuilder.greaterThanOrEqualTo(express, (Date) (idField.get(id)))); break; } if (idField.getName().contains("end")) { Expression<Date> express = root.get("id") .get(idField.getName()); predicates.add(criteriaBuilder.lessThanOrEqualTo(express, (Date) (idField.get(id)))); break; } } default: { Expression express = root.get("id").get(idField.getName()); predicates.add(criteriaBuilder.equal(express, idField.get(id))); break; } } } } break; } // 非联合主键 default: { String paramType = String.valueOf(field.getType()).split(" ")[1]; switch (paramType) { case "java.lang.String": { String[] strs = String.valueOf(field.get(formalParameter)).split(","); Expression<String> express = root.get(field.getName()); CriteriaBuilder.In<String> in = criteriaBuilder.in(express); Arrays.asList(strs).forEach(n -> { in.value(n); }); predicates.add(in); break; } case "java.util.Date": { if (field.getName().contains("start")) { Expression<Date> express = root.get(field.getName()); predicates.add(criteriaBuilder.greaterThanOrEqualTo(express, (Date) (field.get(formalParameter)))); break; } if (field.getName().contains("end")) { Expression<Date> express = root.get(field.getName()); predicates.add(criteriaBuilder.lessThanOrEqualTo(express, (Date) (field.get(formalParameter)))); break; } } default: { Expression express = root.get(field.getName()); predicates.add(criteriaBuilder.equal(express, field.get(formalParameter))); break; } } break; } } } } } } } catch (Exception e) { // TODO: handle exception } query.where(predicates.toArray(new Predicate[predicates.size()])); return query.getRestriction(); } }; }

 

标签:idField,get,jpa,spring,getName,express,boot,field,id
来源: https://www.cnblogs.com/xiaoshahai/p/11867904.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有