博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Data 在 nGrinder 当中的应用
阅读量:5986 次
发布时间:2019-06-20

本文共 3587 字,大约阅读时间需要 11 分钟。

hot3.png

        相对于iBatis,Spring Data更容易支持动态查询。本文将简单介绍一下其在nGrinder中的应用。

        本例中会用到nGrinder 代码中的  测试项目类  PerfTest.java

/** * Peformance Test Entity * */@Entity@Table(name = "PERF_TEST")public class PerfTest extends BaseModel
{ /** * UUID */ private static final long serialVersionUID = 1369809450686098944L; @Column(name = "name") private String name; @Column(length = 2048) private String description; @Enumerated(EnumType.STRING) private Status status = Status.READY;...}

现在想做一个查询,条件是所有状态为 (FINISHED, ENDED)的测试项目

如果用SQL语句实现为

select * from perf_test where status in (‘FINISHED’, ‘ENDED’)
为了代码更有延伸性,我们在
PerfTestRepository加入了
 JpaSpecificationExecutor<PerfTest>

import java.util.List; import org.ngrinder.perftest.model.PerfTest;import org.ngrinder.perftest.model.Status;import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.data.jpa.repository.JpaSpecificationExecutor;  public interface PerfTestRepository extends JpaRepository
, JpaSpecificationExecutor
{ List
findAllByStatusOrderByCreateDateAsc(Status status); }
在PerfTestRepository中会有常用的方法

/**     * Returns a single entity matching the given {@link Specification}.     *     * @param spec     * @return     */    T findOne(Specification
spec); /** * Returns all entities matching the given {@link Specification}. * * @param spec * @return */ List
findAll(Specification
spec); /** * Returns a {@link Page} of entities matching the given {@link Specification}. * * @param spec * @param pageable * @return */ Page
findAll(Specification
spec, Pageable pageable); /** * Returns all entities matching the given {@link Specification} and {@link Sort}. * * @param spec * @param sort * @return */ List
findAll(Specification
spec, Sort sort); /** * Returns the number of instances that the given {@link Specification} will return. * * @param spec the {@link Specification} to count instances for * @return the number of instances */ long count(Specification
spec);
这些方法会根据对应的
查询规范Specification动态的生成SQL语句,以下为在PerfTest中加入的“
查询规范
/** * Peformance Test Entity * */@Entity@Table(name = "PERF_TEST")public class PerfTest extends BaseModel
{ .... public static Specification
statusSetEqual(final Status... statuses) { return new Specification
() { @Override public Predicate toPredicate(Root
root, CriteriaQuery
query, CriteriaBuilder cb) { return cb.not(root.get("status").in((Object[]) statuses)); } }; }}
下面会测试代码
public class PerfTestRepositoryTest extends NGrinderIocTransactionalTestBase {     @Autowired    public PerfTestRepository repo;     @Before    public void before() {        PerfTest entity = new PerfTest();        entity.setStatus(Status.FINISHED);        repo.save(entity);        PerfTest entity2 = new PerfTest();        entity2.setStatus(Status.CANCELED);        repo.save(entity2);        PerfTest entity3 = new PerfTest();        entity3.setStatus(Status.READY);        repo.save(entity3);    }     @Test    public void testPerfTest() {        List
findAll = repo.findAll(PerfTest.statusSetEqual(Status.FINISHED, Status.CANCELED)); assertThat(findAll.size(), is(2)); }}

转载于:https://my.oschina.net/u/939534/blog/104860

你可能感兴趣的文章
C++ STL之count函数
查看>>
CentOS7 yum 安装 PHP 5.6.24
查看>>
halcon算子翻译——par_join
查看>>
即时编译器 (JIT) 详解
查看>>
Unity 指定区域随机实例化预制体Prefab 代码
查看>>
判断数据类型
查看>>
webpack配置(一)
查看>>
《机器学习实战》 in python3.x
查看>>
使用命令关闭占用80端口的程序
查看>>
比特币是什么,为什么那么多人对此趋之若鹜?
查看>>
sdkman这个工具好用吗?
查看>>
HDD-FAT32 ZIP-FAT32
查看>>
Navicat MySQL连接Linux下MySQL的问题解决方案
查看>>
[日常] MySQL的哈希索引和原理研究测试
查看>>
linux就该这么学第十四课Samba和NFS文件共享服务
查看>>
【275】◀▶ Python 控制语句说明
查看>>
python 数据类型之数float
查看>>
JS控制键盘录入 和 window.event.keycode对照
查看>>
Oracle Merge Into
查看>>
Android tesseract-orc之扫描身份证号码
查看>>