JPA 学习--Query接口下的 API 测试
2017-08-14 16:14
411 查看
【Query 接口下的常用API】
【API 测试类:Test_QueryAPI.Java】
[java] view
plain copy
package org.zgf.jpa.entity;
import java.math.BigInteger;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.persistence.Query;
import javax.persistence.TemporalType;
import org.junit.Test;
import org.zgf.jpa.enumer.Gender;
/**
* JPA 中sql 语句设置参数有两种形式,一种是命名参数,另一种是位置参数:
* 位置参数:执行效率高, 可读性差,可用于原生sql 和 JPQL 语句中, 格式《?+数字》,数字可任意指定
* 命名参数:执行效率低 ,可读性强,可用于原生sql 和 JPQL 语句中, 格式《:+ 名称》,名称自定义
*
* @Description: 测试Query接口的相关API
* @author zonggf
* @date 2015年11月4日-下午4:07:12
*/
public class Test_QueryAPI extends BasicJPATest{
//2. Test API 1: 测试返回列表API
@Test
public void test_getResultList(){
String jpql = "from PersonEntity";
Query query = this.entityManager.createQuery(jpql);
List<PersonEntity> personEntityList = query.getResultList();
for (PersonEntity personEntity : personEntityList) {
System.out.println(personEntity);
}
}
//2. Test API 2: 使用query.getSingleResult()方式时,必须保证查询的结果有且只有一个返回对象
@Test
public void test_getSingleResult(){
String jpql = "from PersonEntity personEntity where personEntity.id = 1";
Query query = this.entityManager.createQuery(jpql);
PersonEntity personEntity = (PersonEntity) query.getSingleResult();
System.out.println(personEntity);
}
//2. Test API 2: 如果没有返回对象,则会抛出异常 NoResultException.class
@Test(expected=javax.persistence.NoResultException.class)
public void test_getSingleResult_Exception(){
String jpql = "from PersonEntity personEntity where personEntity.id = 100";
Query query = this.entityManager.createQuery(jpql);
PersonEntity personEntity = (PersonEntity) query.getSingleResult();
System.out.println(personEntity);
}
//2. Test API 2: 如果有多个返回对象,则会抛出异常 NonUniqueResultException.class
@Test(expected=javax.persistence.NonUniqueResultException.class)
public void test_getSingleResult_Exception_(){
String jpql = "from PersonEntity";
Query query = this.entityManager.createQuery(jpql);
PersonEntity personEntity = (PersonEntity) query.getSingleResult();
System.out.println(personEntity);
}
//3. Test API 3: 测试位置参数使用方法
@Test
public void test_setPositionParameter(){
String jpql = "from PersonEntity personEntity where personEntity.id = ?1";
Query query = this.entityManager.createQuery(jpql);
query.setParameter(1, 1);
PersonEntity personEntity = (PersonEntity) query.getSingleResult();
System.out.println(personEntity);
}
//3. Test API 3: 测试位置参数使用方法,参数类型为java.util.Date
@Test
public void test_setPositionParameter_date(){
String sql = "select count(*) from tb_person p where p.birthdayDate = ?2";
Query query = this.entityManager.createNativeQuery(sql);
query.setParameter(2,new Date(), TemporalType.DATE);
//注意此处返回的是BigInteger 类型, 不是Int类型
BigInteger count = (BigInteger) query.getSingleResult();
System.out.println("共有记录:" + count);
}
//3. Test API 3: 测试位置参数使用方法, 参数类型为 java.util.Calendar;
@Test
public void test_setPositionParameter_calender(){
String sql = "select count(*) from tb_person p where p.birthdayDate = ?2";
Query query = this.entityManager.createNativeQuery(sql);
query.setParameter(2,Calendar.getInstance(), TemporalType.DATE);
//注意此处返回的是BigInteger 类型, 不是Int类型
BigInteger count = (BigInteger) query.getSingleResult();
System.out.println("共有记录:" + count);
}
//Test API 4: 测试命名参数:参数类型为普通参数
@Test
public void test_setNameParameter(){
String jpql = "from PersonEntity personEntity where personEntity.id = :id";
Query query = this.entityManager.createQuery(jpql);
query.setParameter("id", 1);
PersonEntity personEntity = (PersonEntity) query.getSingleResult();
System.out.println(personEntity);
}
//Test API 4: 测试命名参数:参数类型为java.util.Date
@Test
public void test_setNameParameter_date(){
String sql = "select count(*) from tb_person p where p.birthdayDate = :birthDate";
Query query = this.entityManager.createNativeQuery(sql);
query.setParameter("birthDate",new Date(), TemporalType.DATE);
//注意此处返回的是BigInteger 类型, 不是Int类型
BigInteger count = (BigInteger) query.getSingleResult();
System.out.println("共有记录:" + count);
}
//Test API 4: 测试命名参数:参数类型为java.util.Calendar
@Test
public void test_setNameParameter_calender(){
String sql = "select count(*) from tb_person p where p.birthdayDate = :birthDate";
Query query = this.entityManager.createNativeQuery(sql);
query.setParameter("birthDate",Calendar.getInstance(), TemporalType.DATE);
//注意此处返回的是BigInteger 类型, 不是Int类型
BigInteger count = (BigInteger) query.getSingleResult();
System.out.println("共有记录:" + count);
}
//Test API 5: excuteUpdate 用于执行更新更新,删除语句或者DDL语句
@Test
public void test_excuteUpdate_clear(){
String jpql = "delete PersonEntity";
Query query = this.entityManager.createQuery(jpql);
int deleteCnt = query.executeUpdate();
System.out.println("共删除记录条数:" + deleteCnt);
}
//Test API 5: excuteUpdate 执行DDL 语句删除表
@Test
public void test_excuteUpdate_drop(){
String sql = "drop table tb_person";
Query query = this.entityManager.createNativeQuery(sql);
int cnt = query.executeUpdate();
System.out.println("cnt:" + cnt);
}
//Test API 6: 测试分页数据
@Test
public void test_page(){
String jpql = "from PersonEntity";
Query query = this.entityManager.createQuery(jpql);
query.setFirstResult(10); //序号从0 开始
query.setMaxResults(20);
List<PersonEntity> personList = query.getResultList();
System.out.println("count:" + personList.size());
for (PersonEntity personEntity : personList) {
System.out.println(personEntity);
}
}
//初始化100 条数据
@Test
public void test_savePerson(){
Date date = new Date();
for(int i=0; i<100; i++){
PersonEntity person = new PersonEntity();
person.setName("zhangsan" + i);
person.setAge(20);
person.setBirthday(date);
person.setBirthdayDate(date);
person.setBirthdayTime(date);
person.setEnglishScore(20.20);
person.setMathScore(89.8f);
person.setGender(Gender.BOY);
person.setInfo("I am a good boy".getBytes());
this.entityManager.persist(person);
}
}
}
其它涉及类PersonEntity, BasicJPATest 参看《JPA 学习篇(三)简单实体类映射和EntityManager API》
【注意】
1. JPA 中sql 语句设置参数有两种形式,一种是命名参数,另一种是位置参数:
位置参数:执行效率高, 可读性差,可用于原生sql 和 JPQL 语句中, 格式《?+数字》,数字可任意指定 也可以不指定,直接用问号
命名参数:执行效率低 ,可读性强,可用于原生sql 和 JPQL 语句中, 格式《:+ 名称》,名称自定义
2. query.getSigleResult(); 方法必须确保查询结果有且只有一个放回对象。
3. query.excuteUpdate();方法可用于执行更新,删除语句,
【API 测试类:Test_QueryAPI.Java】
[java] view
plain copy
package org.zgf.jpa.entity;
import java.math.BigInteger;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.persistence.Query;
import javax.persistence.TemporalType;
import org.junit.Test;
import org.zgf.jpa.enumer.Gender;
/**
* JPA 中sql 语句设置参数有两种形式,一种是命名参数,另一种是位置参数:
* 位置参数:执行效率高, 可读性差,可用于原生sql 和 JPQL 语句中, 格式《?+数字》,数字可任意指定
* 命名参数:执行效率低 ,可读性强,可用于原生sql 和 JPQL 语句中, 格式《:+ 名称》,名称自定义
*
* @Description: 测试Query接口的相关API
* @author zonggf
* @date 2015年11月4日-下午4:07:12
*/
public class Test_QueryAPI extends BasicJPATest{
//2. Test API 1: 测试返回列表API
@Test
public void test_getResultList(){
String jpql = "from PersonEntity";
Query query = this.entityManager.createQuery(jpql);
List<PersonEntity> personEntityList = query.getResultList();
for (PersonEntity personEntity : personEntityList) {
System.out.println(personEntity);
}
}
//2. Test API 2: 使用query.getSingleResult()方式时,必须保证查询的结果有且只有一个返回对象
@Test
public void test_getSingleResult(){
String jpql = "from PersonEntity personEntity where personEntity.id = 1";
Query query = this.entityManager.createQuery(jpql);
PersonEntity personEntity = (PersonEntity) query.getSingleResult();
System.out.println(personEntity);
}
//2. Test API 2: 如果没有返回对象,则会抛出异常 NoResultException.class
@Test(expected=javax.persistence.NoResultException.class)
public void test_getSingleResult_Exception(){
String jpql = "from PersonEntity personEntity where personEntity.id = 100";
Query query = this.entityManager.createQuery(jpql);
PersonEntity personEntity = (PersonEntity) query.getSingleResult();
System.out.println(personEntity);
}
//2. Test API 2: 如果有多个返回对象,则会抛出异常 NonUniqueResultException.class
@Test(expected=javax.persistence.NonUniqueResultException.class)
public void test_getSingleResult_Exception_(){
String jpql = "from PersonEntity";
Query query = this.entityManager.createQuery(jpql);
PersonEntity personEntity = (PersonEntity) query.getSingleResult();
System.out.println(personEntity);
}
//3. Test API 3: 测试位置参数使用方法
@Test
public void test_setPositionParameter(){
String jpql = "from PersonEntity personEntity where personEntity.id = ?1";
Query query = this.entityManager.createQuery(jpql);
query.setParameter(1, 1);
PersonEntity personEntity = (PersonEntity) query.getSingleResult();
System.out.println(personEntity);
}
//3. Test API 3: 测试位置参数使用方法,参数类型为java.util.Date
@Test
public void test_setPositionParameter_date(){
String sql = "select count(*) from tb_person p where p.birthdayDate = ?2";
Query query = this.entityManager.createNativeQuery(sql);
query.setParameter(2,new Date(), TemporalType.DATE);
//注意此处返回的是BigInteger 类型, 不是Int类型
BigInteger count = (BigInteger) query.getSingleResult();
System.out.println("共有记录:" + count);
}
//3. Test API 3: 测试位置参数使用方法, 参数类型为 java.util.Calendar;
@Test
public void test_setPositionParameter_calender(){
String sql = "select count(*) from tb_person p where p.birthdayDate = ?2";
Query query = this.entityManager.createNativeQuery(sql);
query.setParameter(2,Calendar.getInstance(), TemporalType.DATE);
//注意此处返回的是BigInteger 类型, 不是Int类型
BigInteger count = (BigInteger) query.getSingleResult();
System.out.println("共有记录:" + count);
}
//Test API 4: 测试命名参数:参数类型为普通参数
@Test
public void test_setNameParameter(){
String jpql = "from PersonEntity personEntity where personEntity.id = :id";
Query query = this.entityManager.createQuery(jpql);
query.setParameter("id", 1);
PersonEntity personEntity = (PersonEntity) query.getSingleResult();
System.out.println(personEntity);
}
//Test API 4: 测试命名参数:参数类型为java.util.Date
@Test
public void test_setNameParameter_date(){
String sql = "select count(*) from tb_person p where p.birthdayDate = :birthDate";
Query query = this.entityManager.createNativeQuery(sql);
query.setParameter("birthDate",new Date(), TemporalType.DATE);
//注意此处返回的是BigInteger 类型, 不是Int类型
BigInteger count = (BigInteger) query.getSingleResult();
System.out.println("共有记录:" + count);
}
//Test API 4: 测试命名参数:参数类型为java.util.Calendar
@Test
public void test_setNameParameter_calender(){
String sql = "select count(*) from tb_person p where p.birthdayDate = :birthDate";
Query query = this.entityManager.createNativeQuery(sql);
query.setParameter("birthDate",Calendar.getInstance(), TemporalType.DATE);
//注意此处返回的是BigInteger 类型, 不是Int类型
BigInteger count = (BigInteger) query.getSingleResult();
System.out.println("共有记录:" + count);
}
//Test API 5: excuteUpdate 用于执行更新更新,删除语句或者DDL语句
@Test
public void test_excuteUpdate_clear(){
String jpql = "delete PersonEntity";
Query query = this.entityManager.createQuery(jpql);
int deleteCnt = query.executeUpdate();
System.out.println("共删除记录条数:" + deleteCnt);
}
//Test API 5: excuteUpdate 执行DDL 语句删除表
@Test
public void test_excuteUpdate_drop(){
String sql = "drop table tb_person";
Query query = this.entityManager.createNativeQuery(sql);
int cnt = query.executeUpdate();
System.out.println("cnt:" + cnt);
}
//Test API 6: 测试分页数据
@Test
public void test_page(){
String jpql = "from PersonEntity";
Query query = this.entityManager.createQuery(jpql);
query.setFirstResult(10); //序号从0 开始
query.setMaxResults(20);
List<PersonEntity> personList = query.getResultList();
System.out.println("count:" + personList.size());
for (PersonEntity personEntity : personList) {
System.out.println(personEntity);
}
}
//初始化100 条数据
@Test
public void test_savePerson(){
Date date = new Date();
for(int i=0; i<100; i++){
PersonEntity person = new PersonEntity();
person.setName("zhangsan" + i);
person.setAge(20);
person.setBirthday(date);
person.setBirthdayDate(date);
person.setBirthdayTime(date);
person.setEnglishScore(20.20);
person.setMathScore(89.8f);
person.setGender(Gender.BOY);
person.setInfo("I am a good boy".getBytes());
this.entityManager.persist(person);
}
}
}
其它涉及类PersonEntity, BasicJPATest 参看《JPA 学习篇(三)简单实体类映射和EntityManager API》
【注意】
1. JPA 中sql 语句设置参数有两种形式,一种是命名参数,另一种是位置参数:
位置参数:执行效率高, 可读性差,可用于原生sql 和 JPQL 语句中, 格式《?+数字》,数字可任意指定 也可以不指定,直接用问号
命名参数:执行效率低 ,可读性强,可用于原生sql 和 JPQL 语句中, 格式《:+ 名称》,名称自定义
2. query.getSigleResult(); 方法必须确保查询结果有且只有一个放回对象。
3. query.excuteUpdate();方法可用于执行更新,删除语句,
相关文章推荐
- JPA 学习篇(四)Query接口下的 API 测试
- 阿里云短信服务API中接口签名的测试
- 从.Net到Java学习第十二篇——SpringBoot+JPA提供跨域接口
- C#进阶系列——WebApi 接口测试工具:WebApiTestClient
- 基于 Django1.10 文档的深入学习(23)—— QuerySet API reference 之 icontains
- Linux系统调用及用户编程接口(API)学习
- 测试接口文档--http://gank.io/api
- 关于某OA接口的编写和测试学习
- 最好用的API调试接口 在线接口测试工具
- ArcGIS API for JavaScript 4.2学习笔记[21] 对3D场景上的3D要素进行点击查询【Query类学习】
- 【分布式学习】为什么需要高质量API网关接口
- API接口开发 配置、实现、测试
- 工作流Activiti的学习总结(五) activiti的API和虚拟工作流测试
- yii2 RESTful 接口 api -5: restful的测试工具
- 淘宝API学习之道:淘宝TOP之API接口接入教程
- DBuint是什么?如何运用它来为接口测试服务?原理是什么? 【待学习】
- 空间apiLinux系统调用及用户编程接口(API)学习
- 接口API测试和返回值JSON解析的插件
- spring4学习记录05-spring mvc实战之框架构建测试jpa借助spring-data实现自动化jpa
- API学习接口Iterable