JPA的查询语言—使用原生SQL
2012-06-02 20:25
495 查看
EntityManager API 提供了创建 Query 实例以执行原生 SQL 语句的createNativeQuery方法。
实体User:
测试:
实体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.Table; @Entity @Table(name="t_user") public class User { /** * 主键 */ @Id @GeneratedValue private Long id; /** * 名字 */ @Column(name="name",length=50) private String name; /** * 密码 */ @Column(name="password",length=20) private String password; /** * 邮箱 */ @Column(name="email",length=50) private String email; /** * 年龄 */ @Column(name="age",length=3) private int age; public User() { } //以下省略getter/setter方法 //...... }
测试:
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; /** * 测试JPA原生SQL查询 * @author Luxh */ public class TestNativeQuery { 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 testNativeQuery1() { EntityManager em = emf.createEntityManager(); //定义SQL String sql = "SELECT * FROM t_user"; //创建原生SQL查询QUERY实例 Query query = em.createNativeQuery(sql); //执行查询,返回的是对象数组(Object[])列表, //每一个对象数组存的是相应的实体属性 List objecArraytList = query.getResultList(); for(int i=0;i<objecArraytList.size();i++) { Object[] obj = (Object[]) objecArraytList.get(i); //使用obj[0],obj[1],obj[2]...取出属性 } em.close(); } /** * 查询的结果是实体的集合 */ @Test public void testNativeQuery2() { 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 public void testNativeQuery3() { 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 public void testNativeQuery4() { 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(int i=0;i<objecArraytList.size();i++) { Object[] obj = (Object[]) objecArraytList.get(i); //使用obj[0],obj[1],obj[2]取出属性 } em.close(); } }
相关文章推荐
- JPA的查询语言—使用原生SQL
- JPA的查询语言—使用原生SQL
- JPA的查询语言—使用原生SQL
- 使用 JPQL 和原生 SQL 查询 JPA 实体(转)
- 使用 JPQL 和原生 SQL 查询 JPA 实体
- jpa或bernate使用原生sql进行关联查询org.hibernate.hql.internal.ast.QuerySyntaxException: Path expected for join
- 简单修改Hibernate源码,增加使用原生SQL查询时动态addEntity和addScalar功能
- 【JPA】JPA本地查询注解SqlResultSetMapping的使用
- Hibernate 使用原生SQL进行查询
- Django使用原生的SQL进行查询
- hinernate--推荐使用原生SQL语句进行查询(效率高)
- jpa使用原生SQL update和insert
- hibernate中使用原生sql查询
- hibernate使用原生SQL查询返回结果集的处理
- hibernate使用原生sql查询Hibernate原生SQL多表查询字段名重复问题以及解决方法
- 在ORM框架中使用原生sql语句进行聚合查询遇到的问题
- hiberante O/R映射,注解,查询语言,标准查询,原生SQL,缓存,批处理、,
- jpa使用原生sql
- Hibernate 使用原生SQL查询oracle数据库显示问题(char,Date)
- hibernate使用原生的sql,解决管理查询、结果集封装等问题