JPA JPQL 语句
来源:互联网 发布:矿用js刮板机减速器 编辑:程序博客网 时间:2024/06/06 13:13
JPA的命名查询实际上就是给查询语句起个名字,执行查询的时候就是直接使用起的这个名字,避免重复写JPQL语句,使查询在代码中得到更多的重用。我不怎么喜欢使用命名查询,因为我不想把查询语句写在实体中,使得实体看起来变得复杂臃肿。
1、使用@NamedQuery注解在实体类中定义命名查询。
@NamedQuery(name="findAllUser",query="SELECT u FROM User u")
@NamedQuery中的属性name指定命名查询的名称,query属性指定命名查询的语句。
如果要定义多个命名查询,需要使用@NamedQueries。
@NamedQueries({
@NamedQuery(name="findAllUser",query="SELECT u FROM User u"),
@NamedQuery(name="findUserWithId",query="SELECT u FROM User u WHERE u.id = ?1"),
@NamedQuery(name="findUserWithName",query="SELECT u FROM User u WHERE u.name = :name")
})
2、定义好命名查询后,可以使用EntityManager的createNamedQuery方法传入命名查询的名称创建查询。例如:createNamedQuery("findAllUser");
3、一个简单的例子。
简单的User实体:
package
com.cndatacom.jpa.entity;
import
javax.persistence.Column;
import
javax.persistence.Entity;
import
javax.persistence.GeneratedValue;
import
javax.persistence.Id;
import
javax.persistence.NamedQueries;
import
javax.persistence.NamedQuery;
import
javax.persistence.Table;
@Entity
@Table
(name=
"t_user"
)
@NamedQueries
({
@NamedQuery
(name=
"findAllUser"
,query=
"SELECT u FROM User u"
),
@NamedQuery
(name=
"findUserWithId"
,query=
"SELECT u FROM User u WHERE u.id = ?1"
),
@NamedQuery
(name=
"findUserWithName"
,query=
"SELECT u FROM User u WHERE u.name = :name"
)
})
public
class
User {
/**
* 主键
*/
@Id
@GeneratedValue
private
Long id;
/**
* 名字
*/
@Column
(name=
"name"
)
private
String name;
/**
* 密码
*/
@Column
(name=
"password"
)
private
String password;
public
Long getId() {
return
id;
}
public
void
setId(Long id) {
this
.id = id;
}
public
String getName() {
return
name;
}
public
void
setName(String name) {
this
.name = name;
}
public
String getPassword() {
return
password;
}
public
void
setPassword(String password) {
this
.password = password;
}
}
简单的测试:
package
com.cndatacom.jpa.test;
import
java.util.List;
import
javax.persistence.EntityManager;
import
javax.persistence.EntityManagerFactory;
import
javax.persistence.Persistence;
import
javax.persistence.Query;
import
org.junit.After;
import
org.junit.Before;
import
org.junit.Test;
import
com.cndatacom.jpa.entity.User;
public
class
TestNamedQuery {
EntityManagerFactory emf =
null
;
@Before
public
void
before() {
//根据在persistence.xml中配置的persistence-unit name 创建EntityManagerFactory
emf = Persistence.createEntityManagerFactory(
"myJPA"
);
}
@After
public
void
after() {
//关闭EntityManagerFactory
if
(
null
!= emf) {
emf.close();
}
}
@Test
public
void
testNamedQuery1() {
EntityManager em = emf.createEntityManager();
List<User> users = em.createNamedQuery(
"findAllUser"
).getResultList();
//根据User实体中定义的命名查询
}
@Test
public
void
testNamedQuery2() {
EntityManager em = emf.createEntityManager();
Query query = em.createNamedQuery(
"findUserWithId"
);
//根据User实体中定义的命名查询
query.setParameter(
1
, 2L);
List<User> users = query.getResultList();
}
@Test
public
void
testNamedQuery3() {
EntityManager em = emf.createEntityManager();
Query query = em.createNamedQuery(
"findUserWithName"
);
//根据User实体中定义的命名查询
query.setParameter(
"name"
,
"李坏"
);
List<User> users = query.getResultList();
}
}
原文:http://www.cnblogs.com/luxh/archive/2012/06/01/2531428.html
- JPA JPQL 语句
- JPA之使用JPQL语句操作数据库
- jpa使用jpql,在程序中使用jpql语句的in
- JPQL语句
- JPA JPQL 查询、排序.....
- JPA查询语言 JPQL
- JPA JPQL 查询、排序
- JPA JPQL 查询、排序
- JPA JPQL 查询、排序
- JPA--JPQL(五)
- JPA JPQL 查询、排序.....
- JPA学习笔记-JPQL
- JPA-6 JPQL语言
- 十一.JPA JPQL进阶
- 【JPA】JPQL查询 -- 小结
- jpa之jpql查询
- EJB3 JPA JPQL 语句 查询 使用 函数 分页 子查询(1)
- EJB3 JPA JPQL 语句 查询 使用 函数 分页 子查询(2)
- 强制类型转换---看原子的IAP升级例程的问题所引发的测试
- Selenium-webdriver系列教程(五)————如何定位frame中的元素
- Selenium-webdriver系列教程(六)————如何捕获弹出窗口
- 为hibernate的配置文件添加自动提示功能
- Scala类
- JPA JPQL 语句
- 古装齐刘海大比拼 孙俪秒杀众人刘诗诗面目全非
- Selenium-webdriver系列教程(七)————如何处理alert和confirm
- QScrollBar样式
- Android之SharedPreferences权限
- Selenium-webdriver系列教程(八)————如何操作select下拉框
- Android 内存溢出解决方案(OOM)
- 登录时第一次输入验证码显示验证码错误。出现的问题:验证码ajax验证时 后台取不到session的值
- static_cast, dynamic_cast, const_cast探讨