一个jpa动态模糊查询的实现
最近一直在是用spring data jpa,使用起来确实方便,如果是单表的操作基本上通过方法名都可以实现,下面是一个
Specification 实现动态模糊查询的例子 这个查询是通过JpaSpecificationExecutor 这个接口实现的,只需要实现接口的toPredicate()方法jike,在Dao层不需要太多操作,只需生命接口,继承接口,声明方法即可
我这个实现是和分页排序接口在一块的,所以我是继承了两个接口,分页排序接口PagingAndSortingRepository,查询接口JpaSpecificationExecutor,这两个接口都是来自jpa的接口,在具体使用时
有这么一种情况,我不知道是不是普遍的或只是我的个例,就是如果只继承查询接口JpaSpecificationExecutor,会导致不能注入。下面贴代码:
1,dao层
public interface ParkInfoRepository extends PagingAndSortingRepository<ParkInfoPo, String> ,JpaSpecificationExecutor<ParkInfoPo> {
//查询所有
List<ParkInfoPo> findAll();
//模糊匹配搜索
List<ParkInfoPo> findAll(Specification<ParkInfoPo> specification);
}
dao层仅是声明接口,方法,继承,完成这些事情就可以了
2 service层实现
@Override
public ParkInfoPoList getParkInfoList(ParkInfoPo parkInfoPo) {
if(parkInfoPo!=null&&!StringUtils.isEmpty(parkInfoPo.getParkFullName())){
final String keyWords = parkInfoPo.getParkFullName();
List<ParkInfoPo> list = parkInfoRepository.findAll(new Specification<ParkInfoPo>() {
@Override
public Predicate toPredicate(Root<ParkInfoPo> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder cb) {
Predicate parkFullNamePredicate = cb.like(root.get("parkFullName").as(String.class), "%"+keyWords+"%");
criteriaQuery.where(cb.and(parkFullNamePredicate));
criteriaQuery.orderBy(cb.asc(root.get("updateTime").as(Date.class)));
return criteriaQuery.getRestriction();
}
});
return ParkInfoPoList.wrap(list);
}
List<ParkInfoPo> parkInfoPoList = parkInfoRepository.findAll();
return ParkInfoPoList.wrap(parkInfoPoList);
}
要把方法中的参数出入方法中的内部类,要用final类型,我这是只实现了一个查询条件即“parkFullName”,如果要用多个字段查询的话,可用拼接,如: query.where(cb.and(p3,cb.or(p1,p2)));
,还可以用list,如
- Specification<UserModel> spec = new Specification<UserModel>() {
- public Predicate toPredicate(Root<UserModel> root,
- CriteriaQuery<?> query, CriteriaBuilder cb) {
- List<Predicate> list = new ArrayList<Predicate>();
- if(um.getName()!=null && um.getName().trim().length()>0){
- list.add(cb.like(root.get("name").as(String.class), "%"+um.getName()+"%"));
- }
- if(um.getUuid()>0){
- list.add(cb.equal(root.get("uuid").as(Integer.class), um.getUuid()));
- }
- Predicate[] p = new Predicate[list.size()];
- return cb.and(list.toArray(p));
- }
- }; 这段代码也是我从网上贴过来的,希望不要造成干扰
具体大家可以百度。我这只用了一个查询字段,还没扩充,这就是我得全部实现,其实也很简单。有什么不明白可以联系我,qq253364185,phone13524929851
一个jpa动态模糊查询的实现的更多相关文章
- input动态模糊查询的实现方式
最近在用jQuery实现动态模糊查询的时候,找了挺久都没有找到像Vue.js的watch属性这么好用的动态模糊查询方法.就分享一下目前遇到的坑和可以实现动态查询的几种方式. 1.jQuery的chan ...
- 关于JPA动态SQL查询
1.继承接口 2.下面是简单的操作---自己写过的,下次再整理一下 public Page<IdddsMember> list(MemberSearch search, Pageable ...
- MyBatis做动态模糊查询时,like后面要不要加单引号??
做项目遇到了个奇怪的问题,项目里面要对商品.账户.进行分别的多条件查询,于是我就采用动态多条件分页查询,起初在做账户部分的时候Mybatis是这样写的 <!-- 动态多条件分页查询 --> ...
- input框动态模糊查询,能输入,能选择
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- SQLSERVER使用Spring Data JPA实现模糊查询like
mysql下可以使用 CONCAT函数 @Query("SELECT u.username FROM User u WHERE u.username LIKE CONCAT('%',:use ...
- instr动态模糊查询
String sqlSearchtext = ""; if(!"".equals(model.getXzqhdm())&&model.getXz ...
- MySQL数据库一个字段对应多个值得模糊查询
当一个字段想模糊查询出多个字段的时候,正常情况下一般会这么作 select * from a where name like 'a%' or name like 'b%' ....or ...; 但是 ...
- MySQL数据库一个字段对应多个值得模糊查询和多个字段对应一个模糊查询
当一个字段想模糊查询出多个字段的时候,正常情况下一般会这么作 1 select * from a where name like 'a%' or name like 'b%' ....or ...; ...
- mysql 实行模糊查询 一个输入值匹配多个字段和多个输入值匹配一个字段
mysql 实行模糊查询 一个输入值匹配多个字段 MySQL单表多字段模糊查询可以通过下面这个SQL查询实现 为啥一定要150字以上 真的麻烦 还不让贴代码了 SELECT * FROM `ma ...
随机推荐
- eclipse 导入项目时候java版本不一致问题
最近导入一个java项目,发现我安装的java版本是1.8.0_111,而项目的版本是1.8.0_101,当然不想重新再安装旧的java版本,于是就在网上找了解决方法. 在项目的library中右击, ...
- SVM原理(1)
SVM即支持向量机,是一种机器学习内的二类分类方法,是有监督学习方法. 首先我们需要建立一个分类任务: 首先考虑线性可分的情况:(所谓线性可分就是在N维空间上的两类点,可以用N-1个未知数的函数(超平 ...
- isEqual,isEqualTostring,==三者的区别
isEqual:首先判断两个字对象的类型是否相同,在判断内容是否相同,如果类型不同直接return no.如先判断是否都是 NSString,在判断string的内容. isEqualTostring ...
- Android 开源项目android-open-project解析之(三) ScrollView,TimeView,TipView,FlipView
九.ScrollView Discrollview 支持滚动时Item淡入淡出,平移,缩放效果的ScrollView 项目地址:https://github.com/flavienlaurent/di ...
- C++中模板类使用友元模板函数
在类模板中可以出现三种友元声明:(1)普通非模板类或函数的友元声明,将友元关系授予明确指定的类或函数.(2)类模板或函数模板的友元声明,授予对友元所有实例的访问权.(3)只授予对类模板或函数模板的特定 ...
- 解决XCode 4.x SVN无法连接的问题
XCode升级到4.X版本后,确实好用了不少.但普通都存在SVN无法连接的问题.XCode4.x Source Control功能迁移到了File - Source Control目录下,也出现了一些 ...
- Could not fetch https://api.github.com/repos/RobinHerbots/jquery
使用 composer 安装YII2时, 如题所示提示, 原因是由于yii安装中, 需要有一些相关的认证[或许说是composer的认证], 如有如下提示 Could not fetch https: ...
- Linq101-Conversion Operators
using System; using System.Linq; namespace Linq101 { class Conversion { /// <summary> /// This ...
- My.Ioc 代码示例——利用 ObjectBuilderRequested 事件实现延迟注册
在使用 Ioc 框架时,一般我们建议集中在一个称为 Composition Root(其含义请参见下面的小注)的位置来注册 (Register) 和解析 (Resolve) 服务.这种做法的目的在于限 ...
- IDisposable接口详解
转载:http://www.cnblogs.com/davyli/archive/2010/09/13/1825042.html 正确实现 IDisposable .NET中用于释放对象资源的接口是I ...