EntityManager API 提供了创建 Query 实例以执行原生 SQL 语句的createNativeQuery方法。
实体User:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | 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方法 //...... } |
测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | 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(); } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步