JPA的查询语言—使用原生SQL

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

  实体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 Query query =  em.createNativeQuery(sql,User.class); 
        //执行查询,返回的是实体列表, 
        List 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  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

你可能感兴趣的:(JPA的查询语言—使用原生SQL)