2018 Spring Data Jpa 和mybatis的 动态条件查询比较 研究。

jpa, spring data jpa, hibernate ,和mybatis的基础知识,此处不说了,想要了解可以自行百度。

spring data jpa 和mybatis的单表查询和多表关联查询也不做描述。

主要想说下 spring data jpa和mybatis在动态条件查询时候的优劣。

前者主要是面向对象的查询,后者面向关系的查询。

前者不用写sql语句,直接上代码,在多条件查询时候网上有好几种方法,经过总结比较,我研究了下,如下的做法是最简单的。

JPA的写法:

a、Repository的写法:

public interface RecordRepository extends JpaRepository,JpaSpecificationExecutor

b、服务层中调用Repository的findAll()方法:

 

//动态条件查询
public List findALLRecordsByCondition(final QueryVo queryvo) {

    return recordRepository.findAll(new Specification() {
        @Override
        public Predicate toPredicate(Root root, CriteriaQuery criteriaQuery, CriteriaBuilder criteriaBuilder) {
            List predicateList = new ArrayList<>();
            if(null !=queryvo.getProjectNo()&&!queryvo.getProjectNo().equals("")){
                predicateList.add(criteriaBuilder.equal(root.get("projectNo"), queryvo.getProjectNo()));
            }
            if(null !=queryvo.getDesigner()&&!queryvo.getDesigner().equals("")){
                predicateList.add(criteriaBuilder.like(root.get("designer"), "%"+queryvo.getDesigner()+"%"));
            }
            if(null !=queryvo.getConfirmed()&&!queryvo.getConfirmed().equals("")){
                predicateList.add(criteriaBuilder.equal(root.get("confirmed"), queryvo.getConfirmed()));
            }
            return criteriaQuery.where(predicateList.toArray(new Predicate[predicateList.size()])).getRestriction();
          
        }
    });
}

Mybatis的写法:

参考如下这篇:

https://www.cnblogs.com/zuo72/p/8408609.html

优劣:

mybatis的更灵活,在查询性能上可以做到更优,因为mybatis是面对结果集的关系型查询,查询可以只查询部分字段。

而spring data jpa 是查询整个对象, 虽然jpa也可以自定义语句去查询,那那样做就失去了原本设计jpa的理念。

 

 

 

你可能感兴趣的:(jpa,mybatis)