Jeecg 查询条件拼装-代码解读

许久没有闲下来了,今天不想再写代码了,说说查询条件组装的,虽然基本上是自己写的,但是能写出来不一定可以说出来
,算是为过两天的讲课做做准备吧.
    这个是基于CriteriaQuery 的,而CriteriaQuery又是基于DetachedCriteria这个大家自己看了
    
    写这个的时候,想了挺久,就是想找可以可以扩展的查询拼装,后来定义了这个接口            
为每种类型做不同的实现,这个可以为以后类型扩充做准备
    
判断类型就是依据字段的类型,然后选择类型进行调用,现在实现了
基本上都是基本类型了,其中最复杂是String,其次是Date,但是Date也没有实现这个接口,是因为Date,有个特殊的东西,
ps:看来接口定义的还是欠水平
接下来看看调用的代码
1.获取区间值代码,就是加了begin和end的数据源

前台,选择查询条件类型group的时候就会添加了

2.根据类型选择IHqlParse的实现类
除了 String类型有些复杂外,其他都挺简单的了

3.时间类型
时间类型有两个级别类型yyyy-MM-dd和yyyy-MM-dd hh:mm:ss
如果还有特殊格式可以使用QueryTimeFormat 在get方法上面做注解表明格式

4.对象属性处理(判断如果下一层还有数据的话,就创建一个别名,继续遍历去了)

到这里基本上就拼装完了,不知道各位看客了解的如何了

其实调用就那么常见的一句话HqlGenerateUtil.installHql(cq,entity,parameterMap)
我们还是帮大家组合了很多where **=**的

By JueYue

Blog:http://blog.csdn.net/qjueyue

Git:http://git.oschina.net/jueyue

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的示例,假设我们有一个User模型,需要按照条件查询用户列表: ```java @RestController @RequestMapping("/users") public class UserController { private final UserService userService; public UserController(UserService userService) { this.userService = userService; } @GetMapping public List<User> getUsers(@RequestParam Map<String, String> params) { return userService.getUsersByParams(params); } } ``` 在controller中,我们通过@GetMapping注解定义了一个GET请求的接口,并且使用@RequestParam注解将查询参数注入到方法中。 在UserService中,我们可以编写getUsersByParams方法来根据不同的查询条件查询用户列表: ```java @Service public class UserService { private final UserRepository userRepository; public UserService(UserRepository userRepository) { this.userRepository = userRepository; } public List<User> getUsersByParams(Map<String, String> params) { Specification<User> spec = buildSpecification(params); return userRepository.findAll(spec); } private Specification<User> buildSpecification(Map<String, String> params) { Specification<User> spec = Specification.where(null); for (Map.Entry<String, String> entry : params.entrySet()) { String key = entry.getKey(); String value = entry.getValue(); if (StringUtils.isEmpty(value)) { continue; } switch (key) { case "name": spec = spec.and((root, criteriaQuery, criteriaBuilder) -> criteriaBuilder.like(root.get("name"), "%" + value + "%")); break; case "age": spec = spec.and((root, criteriaQuery, criteriaBuilder) -> criteriaBuilder.equal(root.get("age"), Integer.valueOf(value))); break; // 其他条件的处理 default: break; } } return spec; } } ``` 在UserService中,我们首先通过buildSpecification方法来构建查询条件。该方法可以根据不同的查询参数来构建查询条件。在本例中,我们只是简单地处理了name和age两个查询参数。 接下来,我们使用JPA的Specification来实现查询条件拼装。在以上示例中,我们使用了like查询和equal查询两种方式。其他查询条件的处理也可以类似地实现。 最后,我们使用userRepository.findAll(spec)方法来查询符合条件的用户列表,并返回给controller层。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值