zoukankan      html  css  js  c++  java
  • 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();	
    		
    	}
    	
    }
    

      

      

      

      

  • 相关阅读:
    docker与虚拟机性能比较
    CAP原则(CAP定理)、BASE理论
    CAP 定理的含义
    JVM监测分析JConsole
    JConsole详解
    jconsole工具使用
    轻松看懂Java字节码
    JVM 虚拟机字节码指令表
    深入理解java虚拟机(六)字节码指令简介
    大话+图说:Java字节码指令——只为让你懂
  • 原文地址:https://www.cnblogs.com/luxh/p/2532123.html
Copyright © 2011-2022 走看看