【Query 接口下的常用API】


queryParams参数java后台接收_API

【API 测试类:Test_QueryAPI.Java

[java]

1. package org.zgf.jpa.entity;  
2.   
3. import java.math.BigInteger;  
4. import java.util.Calendar;  
5. import java.util.Date;  
6. import java.util.List;  
7.   
8. import javax.persistence.Query;  
9. import javax.persistence.TemporalType;  
10.   
11. import org.junit.Test;  
12. import org.zgf.jpa.enumer.Gender;  
13. /**
14.  * JPA 中sql 语句设置参数有两种形式,一种是命名参数,另一种是位置参数:
15.  * 位置参数:执行效率高, 可读性差,可用于原生sql 和 JPQL 语句中, 格式《?+数字》,数字可任意指定 
16.  * 命名参数:执行效率低 ,可读性强,可用于原生sql 和 JPQL 语句中, 格式《:+ 名称》,名称自定义
17.  * 
18.  * @Description: 测试Query接口的相关API
19.  * @author zonggf
20.  * @date 2015年11月4日-下午4:07:12
21.  */  
22. public class Test_QueryAPI extends BasicJPATest{  
23.       
24. //2. Test API 1: 测试返回列表API  
25. @Test  
26. public void test_getResultList(){  
27. "from PersonEntity";  
28. this.entityManager.createQuery(jpql);  
29.         List<PersonEntity> personEntityList = query.getResultList();  
30. for (PersonEntity personEntity : personEntityList) {  
31.             System.out.println(personEntity);  
32.         }  
33.     }  
34.       
35. //2. Test API 2: 使用query.getSingleResult()方式时,必须保证查询的结果有且只有一个返回对象  
36. @Test  
37. public void test_getSingleResult(){  
38. "from PersonEntity personEntity where personEntity.id = 1";  
39. this.entityManager.createQuery(jpql);  
40.         PersonEntity personEntity = (PersonEntity) query.getSingleResult();  
41.         System.out.println(personEntity);  
42.     }  
43.       
44. //2. Test API 2: 如果没有返回对象,则会抛出异常 NoResultException.class  
45. @Test(expected=javax.persistence.NoResultException.class)  
46. public void test_getSingleResult_Exception(){  
47. "from PersonEntity personEntity where personEntity.id = 100";  
48. this.entityManager.createQuery(jpql);  
49.         PersonEntity personEntity = (PersonEntity) query.getSingleResult();  
50.         System.out.println(personEntity);  
51.     }  
52.       
53. //2. Test API 2: 如果有多个返回对象,则会抛出异常 NonUniqueResultException.class  
54. @Test(expected=javax.persistence.NonUniqueResultException.class)  
55. public void test_getSingleResult_Exception_(){  
56. "from PersonEntity";  
57. this.entityManager.createQuery(jpql);  
58.         PersonEntity personEntity = (PersonEntity) query.getSingleResult();  
59.         System.out.println(personEntity);  
60.     }  
61.       
62.       
63. //3. Test API 3: 测试位置参数使用方法  
64. @Test  
65. public void test_setPositionParameter(){  
66. "from PersonEntity personEntity where personEntity.id = ?1";  
67. this.entityManager.createQuery(jpql);  
68. 1, 1);  
69.         PersonEntity personEntity = (PersonEntity) query.getSingleResult();  
70.         System.out.println(personEntity);  
71.           
72.     }  
73.       
74. //3. Test API 3: 测试位置参数使用方法,参数类型为java.util.Date  
75. @Test  
76. public void test_setPositionParameter_date(){  
77. "select count(*) from tb_person p where p.birthdayDate = ?2";  
78. this.entityManager.createNativeQuery(sql);  
79. 2,new Date(), TemporalType.DATE);  
80. //注意此处返回的是BigInteger 类型, 不是Int类型  
81.         BigInteger count = (BigInteger) query.getSingleResult();  
82. "共有记录:" + count);  
83.     }  
84.       
85. //3. Test API 3: 测试位置参数使用方法, 参数类型为 java.util.Calendar;  
86. @Test  
87. public void test_setPositionParameter_calender(){  
88. "select count(*) from tb_person p where p.birthdayDate = ?2";  
89. this.entityManager.createNativeQuery(sql);  
90. 2,Calendar.getInstance(), TemporalType.DATE);  
91. //注意此处返回的是BigInteger 类型, 不是Int类型  
92.         BigInteger count = (BigInteger) query.getSingleResult();  
93. "共有记录:" + count);  
94.     }  
95.       
96. //Test API 4: 测试命名参数:参数类型为普通参数  
97. @Test  
98. public void test_setNameParameter(){  
99. "from PersonEntity personEntity where personEntity.id = :id";  
100. this.entityManager.createQuery(jpql);  
101. "id", 1);  
102.         PersonEntity personEntity = (PersonEntity) query.getSingleResult();  
103.         System.out.println(personEntity);  
104.     }  
105.       
106. //Test API 4: 测试命名参数:参数类型为java.util.Date  
107. @Test  
108. public void test_setNameParameter_date(){  
109. "select count(*) from tb_person p where p.birthdayDate = :birthDate";  
110. this.entityManager.createNativeQuery(sql);  
111. "birthDate",new Date(), TemporalType.DATE);  
112. //注意此处返回的是BigInteger 类型, 不是Int类型  
113.         BigInteger count = (BigInteger) query.getSingleResult();  
114. "共有记录:" + count);  
115.     }  
116.       
117. //Test API 4: 测试命名参数:参数类型为java.util.Calendar  
118. @Test  
119. public void test_setNameParameter_calender(){  
120. "select count(*) from tb_person p where p.birthdayDate = :birthDate";  
121. this.entityManager.createNativeQuery(sql);  
122. "birthDate",Calendar.getInstance(), TemporalType.DATE);  
123. //注意此处返回的是BigInteger 类型, 不是Int类型  
124.         BigInteger count = (BigInteger) query.getSingleResult();  
125. "共有记录:" + count);  
126.     }  
127.       
128. //Test API 5: excuteUpdate 用于执行更新更新,删除语句或者DDL语句  
129. @Test  
130. public void test_excuteUpdate_clear(){  
131. "delete PersonEntity";  
132. this.entityManager.createQuery(jpql);  
133. int deleteCnt = query.executeUpdate();  
134. "共删除记录条数:" + deleteCnt);  
135.     }  
136.       
137. //Test API 5: excuteUpdate 执行DDL 语句删除表  
138. @Test  
139. public void test_excuteUpdate_drop(){  
140. "drop table tb_person";  
141. this.entityManager.createNativeQuery(sql);  
142. int cnt = query.executeUpdate();  
143. "cnt:" + cnt);  
144.     }  
145.       
146. //Test API 6: 测试分页数据  
147. @Test  
148. public void test_page(){  
149. "from PersonEntity";  
150. this.entityManager.createQuery(jpql);  
151. 10); //序号从0 开始  
152. 20);  
153.         List<PersonEntity> personList = query.getResultList();  
154. "count:" + personList.size());  
155. for (PersonEntity personEntity : personList) {  
156.             System.out.println(personEntity);  
157.         }  
158.     }  
159.       
160. //初始化100 条数据  
161. @Test  
162. public void test_savePerson(){  
163. new Date();  
164. for(int i=0; i<100;  i++){  
165. new PersonEntity();  
166. "zhangsan" + i);  
167. 20);  
168.             person.setBirthday(date);  
169.             person.setBirthdayDate(date);  
170.             person.setBirthdayTime(date);  
171. 20.20);  
172. 89.8f);  
173.             person.setGender(Gender.BOY);  
174. "I am a good boy".getBytes());  
175. this.entityManager.persist(person);  
176.         }  
177.     }  
178.       
179. }

其它涉及类PersonEntity, BasicJPATest 参看 《JPA 学习篇(三)简单实体类映射和EntityManager API》



【注意】


1.  JPA 中sql 语句设置参数有两种形式,一种是命名参数,另一种是位置参数:

     位置参数:执行效率高, 可读性差,可用于原生sql 和 JPQL 语句中, 格式《?+数字》,数字可任意指定 也可以不指定,直接用问号
     命名参数:执行效率低 ,可读性强,可用于原生sql 和 JPQL 语句中, 格式《:+ 名称》,名称自定义

2. query.getSigleResult(); 方法必须确保查询结果有且只有一个放回对象。

3. query.excuteUpdate();方法可用于执行更新,删除语句,