packagecom.cndatacom.jpa.entity;
importjavax.persistence.Column;
importjavax.persistence.Entity;
importjavax.persistence.GeneratedValue;
importjavax.persistence.Id;
importjavax.persistence.Table;
@Entity
@Table(name="t_user")
publicclassUser {
/**
* 主键
*/
@Id
@GeneratedValue
privateLong id;
/**
* 名字
*/
@Column(name="name",length=50)
privateString name;
/**
* 密码
*/
@Column(name="password",length=20)
privateString password;
/**
* 邮箱
*/
@Column(name="email",length=50)
privateString email;
/**
* 年龄
*/
@Column(name="age",length=3)
privateintage;
publicUser() {
}
//以下省略getter/setter方法
//......
}
测试:
packagecom.cndatacom.jpa.test;
importjava.util.List;
importjavax.persistence.EntityManager;
importjavax.persistence.EntityManagerFactory;
importjavax.persistence.Persistence;
importjavax.persistence.Query;
importorg.junit.After;
importorg.junit.Before;
importorg.junit.Test;
importcom.cndatacom.jpa.entity.User;
/**
* 测试JPA原生SQL查询
* @author Luxh
*/
publicclassTestNativeQuery {
EntityManagerFactory emf =null;
@Before
publicvoidbefore() {
//根据在persistence.xml中配置的persistence-unit name 创建EntityManagerFactory
emf = Persistence.createEntityManagerFactory("myJPA");
}
@After
publicvoidafter() {
//关闭EntityManagerFactory
if(null!= emf) {
emf.close();
}
}
/**
* 查询的结果是对象数组的集合
*/
@Test
publicvoidtestNativeQuery1() {
EntityManager em = emf.createEntityManager();
//定义SQL
String sql ="SELECT * FROM t_user";
//创建原生SQL查询QUERY实例
Query query = em.createNativeQuery(sql);
//执行查询,返回的是对象数组(Object[])列表,
//每一个对象数组存的是相应的实体属性
List objecArraytList = query.getResultList();
for(inti=0;i<objecArraytList.size();i++) {
Object[] obj = (Object[]) objecArraytList.get(i);
//使用obj[0],obj[1],obj[2]...取出属性
}
em.close();
}
/**
* 查询的结果是实体的集合
*/
@Test
publicvoidtestNativeQuery2() {
EntityManager em = emf.createEntityManager();
//定义SQL
String sql ="SELECT * FROM t_user";
//创建原生SQL查询QUERY实例,指定了返回的实体类型
Query query = em.createNativeQuery(sql,User.class);
//执行查询,返回的是实体列表,
List<User> userList = query.getResultList();
em.close();
}
/**
* 查询单个属性
* 返回的是这个属性值的集合
*/
@Test
publicvoidtestNativeQuery3() {
EntityManager em = emf.createEntityManager();
//定义SQL
String sql ="SELECT t.name FROM t_user t";
//创建原生SQL查询QUERY实例
Query query = em.createNativeQuery(sql);
//执行查询,返回的是String类型的集合,因为name这个属性是String类型
List<String> resultList = query.getResultList();
em.close();
}
/**
* 查询多个属性
* 返回的是这些属性值的数组的集合
*/
@Test
publicvoidtestNativeQuery4() {
EntityManager em = emf.createEntityManager();
//定义SQL
String sql ="SELECT t.name,t.age,t.email FROM t_user t";
//创建原生SQL查询QUERY实例
Query query = em.createNativeQuery(sql);
//执行查询,返回的是查询属性值数组的集合
List objecArraytList = query.getResultList();
for(inti=0;i<objecArraytList.size();i++) {
Object[] obj = (Object[]) objecArraytList.get(i);
//使用obj[0],obj[1],obj[2]取出属性
}
em.close();
}
}
JPA原生SQL查询实践
本文详细介绍了如何使用Java Persistence API (JPA)执行原生SQL查询,包括查询对象数组、实体集合、单个属性及多个属性的方法,并提供了具体的代码示例。
9558

被折叠的 条评论
为什么被折叠?



