首页 > 代码库 > [z]nativeSql

[z]nativeSql

http://blog.csdn.net/chenallen1025/article/details/9169543

EntityManager API 提供了创建 Query 实例以执行原生 SQL 语句的createNativeQuery方法。

  实体User:

[java] view plain copy
 
  1. package com.cndatacom.jpa.entity;   
  2.     
  3. import javax.persistence.Column;   
  4. import javax.persistence.Entity;   
  5. import javax.persistence.GeneratedValue;   
  6. import javax.persistence.Id;   
  7. import javax.persistence.Table;   
  8.     
  9. @Entity  
  10. @Table(name="t_user")   
  11. public class User {   
  12.         
  13.     /**  
  14.      * 主键  
  15.      */  
  16.     @Id  
  17.     @GeneratedValue  
  18.     private Long id;   
  19.         
  20.     /**  
  21.      * 名字  
  22.      */  
  23.     @Column(name="name",length=50)   
  24.     private String name;   
  25.         
  26.     /**  
  27.      * 密码  
  28.      */  
  29.     @Column(name="password",length=20)   
  30.     private String password;   
  31.         
  32.     /**  
  33.      * 邮箱  
  34.      */  
  35.     @Column(name="email",length=50)   
  36.     private String email;   
  37.         
  38.     /**  
  39.      * 年龄  
  40.      */  
  41.     @Column(name="age",length=3)   
  42.     private int age;   
  43.         
  44.     public User() {   
  45.             
  46.     }   
  47.         
  48.     //以下省略getter/setter方法   
  49.     //......   
  50.     
  51.     
  52.             
  53. }  


测试:

[java] view plain copy
 
    1. package com.cndatacom.jpa.test;   
    2.     
    3. import java.util.List;   
    4.     
    5. import javax.persistence.EntityManager;   
    6. import javax.persistence.EntityManagerFactory;   
    7. import javax.persistence.Persistence;   
    8. import javax.persistence.Query;   
    9.     
    10. import org.junit.After;   
    11. import org.junit.Before;   
    12. import org.junit.Test;   
    13.     
    14. import com.cndatacom.jpa.entity.User;   
    15.     
    16.     
    17. /**  
    18.  * 测试JPA原生SQL查询  
    19.  * @author Luxh  
    20.  */  
    21. public class TestNativeQuery {   
    22. EntityManagerFactory emf = null;   
    23.         
    24.     @Before  
    25.     public void before() {   
    26.         //根据在persistence.xml中配置的persistence-unit name 创建EntityManagerFactory   
    27.         emf = Persistence.createEntityManagerFactory("myJPA");   
    28.     }   
    29.         
    30.     @After  
    31.     public void after() {   
    32.         //关闭EntityManagerFactory   
    33.         if(null != emf) {   
    34.             emf.close();   
    35.         }   
    36.     }   
    37.         
    38.             
    39.     /**  
    40.      * 查询的结果是对象数组的集合  
    41.      */  
    42.     @Test  
    43.     public void testNativeQuery1() {   
    44.         EntityManager em = emf.createEntityManager();   
    45.         //定义SQL   
    46.         String sql = "SELECT * FROM t_user";   
    47.         //创建原生SQL查询QUERY实例   
    48.         <span style="color:#ff0000;">Query query =  em.createNativeQuery(sql);</span>   
    49.         //执行查询,返回的是对象数组(Object[])列表,   
    50.         //每一个对象数组存的是相应的实体属性   
    51.         List objecArraytList = query.getResultList();   
    52.         for(int i=0;i<objecArraytList.size();i++) {   
    53.             Object[] obj = (Object[]) objecArraytList.get(i);   
    54.            //使用obj[0],obj[1],obj[2]...取出属性             
    55.         }   
    56.         em.close();   
    57.     }   
    58.         
    59.         
    60.     /**  
    61.      * 查询的结果是实体的集合  
    62.      */  
    63.     @Test  
    64.     public void testNativeQuery2() {   
    65.         EntityManager em = emf.createEntityManager();   
    66.         //定义SQL   
    67.         String sql = "SELECT * FROM t_user";   
    68.         //创建原生SQL查询QUERY实例,指定了返回的实体类型   
    69.        <span style="color:#ff0000;"> Query query =  em.createNativeQuery(sql,User.class);   
    70. </span>        //执行查询,返回的是实体列表,   
    71.         List<User> userList = query.getResultList();   
    72.             
    73.         em.close();   
    74.     }   
    75.         
    76.         
    77.     /**  
    78.      * 查询单个属性  
    79.      * 返回的是这个属性值的集合  
    80.      */  
    81.     @Test  
    82.     public void testNativeQuery3() {   
    83.         EntityManager em = emf.createEntityManager();   
    84.         //定义SQL   
    85.         String sql = "SELECT t.name FROM t_user t";   
    86.         //创建原生SQL查询QUERY实例   
    87.     <span style="color:#ff0000;">    Query query =  em.createNativeQuery(sql);</span>   
    88.         //执行查询,返回的是String类型的集合,因为name这个属性是String类型   
    89.         List<String>  resultList = query.getResultList();   
    90.         em.close();   
    91.     }   
    92.         
    93.         
    94.     /**    
    95.        * 查询多个属性  
    96.        * 返回的是这些属性值的数组的集合  
    97.        */     
    98.     @Test     
    99.     public void testNativeQuery4() {       
    100.         EntityManager em = emf.createEntityManager();      
    101.         //定义SQL            
    102.         String sql = "SELECT t.name,t.age,t.email FROM t_user t";          
    103.         //创建原生SQL查询QUERY实例         
    104.     <span style="color:#ff0000;">    Query query =  em.createNativeQuery(sql); </span>         
    105.         //执行查询,返回的是查询属性值数组的集合          
    106.         List objecArraytList = query.getResultList();   
    107.         for(int i=0;i<objecArraytList.size();i++) {         
    108.             Object[] obj = (Object[]) objecArraytList.get(i);   
    109.              //使用obj[0],obj[1],obj[2]取出属性   
    110.         }          
    111.         em.close();    
    112.             
    113.     }   
    114.         
    115. }  

[z]nativeSql