• [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. }  
  • 相关阅读:
    HCS803对接鼎甲整机备份(LANBASE方式)
    面向对象语言中的设计模式——策略模式
    面向对象语言中的设计模式——工厂模式
    消息队列
    springboot使用feign
    平衡二叉树(AVL)Java
    PHP可变长度参数列表的实用技巧
    mysql表分区简述
    关于mac13寸电脑pyautogui定位不到坐标的问题
    vue 监听图片加载完成事件
  • 原文地址:https://www.cnblogs.com/jjj250/p/6364903.html
Copyright © 2020-2023  润新知