JPA 学习篇(四)Query接口下的 API 测试
来源:互联网 发布:mac 桌面上 ds.store 编辑:程序博客网 时间:2024/06/06 18:55
【Query 接口下的常用API】
【API 测试类:Test_QueryAPI.java】
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@Testpublic 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()方式时,必须保证查询的结果有且只有一个返回对象@Testpublic 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: 测试位置参数使用方法@Testpublic 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@Testpublic 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;@Testpublic 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: 测试命名参数:参数类型为普通参数@Testpublic 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@Testpublic 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@Testpublic 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语句@Testpublic 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 语句删除表@Testpublic 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: 测试分页数据@Testpublic 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 条数据@Testpublic 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();方法可用于执行更新,删除语句,
4. 源代码下载【D_JPA_02_简单实体映射和API.zip】
0 0
- JPA 学习篇(四)Query接口下的 API 测试
- JPA 学习--Query接口下的 API 测试
- JPA API(四)
- JPA学习笔记【四】【api】
- query接口的学习
- JPA(四):EntityManager接口
- JPA学习(四)
- Spring JPA @Query学习
- jmeter学习笔记(四)-接口测试
- JPA的api主要类和接口
- JPA的本地查询(native query)
- JPA学习笔记(四)
- hibernate学习之四——Query和Criteria接口
- Query接口学习笔记
- SoapUI 测试REST API(接口测试)
- JPA的本地查询(native query)转
- JPA的本地查询(native query)转
- jpa entityManager测试学习
- [ahk]读取excel文件实例
- Android自定义view(2)
- 学习OpenCV(二)
- 关于 lua的常用 语句 比较实用
- 熟悉msfvenom生成木马程序过程,并执行和监听控制.
- JPA 学习篇(四)Query接口下的 API 测试
- Java基础之String中equals,声明方式,等大总结
- MyBatis结果集映射(ResultMap)
- java中堆和栈的区别
- python列表函数append(),extend()只改变对象的值,无返回值
- 使用AIDL实现进程间通信
- 组织数据结构的能力
- Web开发(Servlet)(一)
- cookie和session机制详解