JPQL的命名查询@NamedQuery
来源:互联网 发布:python 将字符串split 编辑:程序博客网 时间:2024/05/16 14:23
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();
}
}
- JPQL的命名查询@NamedQuery
- JPA的查询语言—JPQL的命名查询@NamedQuery
- Hibernate的命名查询(NamedQuery)
- Hibernate 命名查询NamedQuery
- Hibernate 命名查询NamedQuery及存储过程的使用
- Hibernate NamedQuery like 模糊查询的写法
- jpql 语句的查询
- JPA的查询语言JPQL
- JPQL排序,命名查询,构造器,带参数查询
- JPQL 查询
- JPQL查询
- JPQL查询
- JPA的关系映射和JPQL查询
- JPQL统计查询的一点总结
- 【JPQL】—查询参数、命名查询和使用构造器查询
- JPA的查询语言:JPQL的简单查询
- JPA的查询语言—JPQL的关联查询
- JPA的查询语言—JPQL的关联查询
- MyBatis一对多和多对一
- JPA的查询语言—JPQL的简单查询
- Qt Quick QML
- Java工程师成神之路~
- Java中apache下面FTPClient主动模式和被动模式
- JPQL的命名查询@NamedQuery
- uva1121 方法一删去前端 方法二 二分
- SqlServer执行计划
- Using AppCompat 'layout_behavior' with '@string/appbar_scrolling_view_behavior' throws exception
- 科技论文中图片的处理方法
- PAT乙级 旧键盘打字(20)
- centos7 mininal安装,需要自己安装jdk1.8,步骤
- 安卓开发学习之020 自定义视图的用户交互事件
- 今天,我赚了