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<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();	
		
	}
	
}

 

  

 

  

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM