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

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

  实体User:

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

测试:

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

[z]nativeSql的更多相关文章

  1. 【Python】使用torrentParser1.03对多文件torrent的分析结果

    Your environment has been set up for using Node.js 8.5.0 (x64) and npm. C:\Users\horn1>cd C:\User ...

  2. Android立体旋转动画实现与封装(支持以X、Y、Z三个轴为轴心旋转)

    本文主要介绍Android立体旋转动画,或者3D旋转,下图是我自己实现的一个界面 立体旋转分为以下三种: 1. 以X轴为轴心旋转 2. 以Y轴为轴心旋转 3. 以Z轴为轴心旋转--这种等价于andro ...

  3. Z字形扫描(201412-2)

    问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z字形扫描的过程如下图所示: 对于下面的4×4的矩阵, 1 5 3 9 3 7 5 ...

  4. 【IOS】将一组包含中文的数据按照#ABC...Z✿分组

    上一篇文章[IOS]模仿windowsphone列表索引控件YFMetroListBox里面 我们一步步的实现了WindowsPhone风格的索引. 但是有没有发现,如果你要实现按照字母排序,你还得自 ...

  5. Java 压缩/ 解压 .Z 文件

    1.问题描述 公司项目有需要用 JAVA 解压 .z文件. .z 是 unix 系统常见的压缩文件. 2.源码 import com.chilkatsoft.CkUnixCompress; impor ...

  6. 中文编程语言Z语言开源正式开源!!!

    (Z语言基于.NET环境,源码中有很多高技术的代码,让更多的人知道对大家有会有很好的帮助,请管理员一点要批准放在首页) 本人实现的中文编程语言Z语言现在正式开源,采用LGPL协议. 编译器核心的网址为 ...

  7. CCF——Z字形扫描问题

    试题编号: 201412-2 试题名称: Z字形扫描 时间限制: 2.0s 内存限制: 256.0MB 问题描述: 问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag ...

  8. Z.ExtensionMethods 一个强大的开源扩展库

    今天有意的在博客园里面搜索了一下 Z.ExtensionMethods 这个扩展类库,确发现只搜到跟这个真正相关的才两篇博文而已,我都点进去看了一下,也都只是提到而已,没有专门介绍,才引起我写这篇文档 ...

  9. Linux Ctrl+c与ctrl+z的区别

    提问:CTRL-Z和CTRL-C区别?回答:CTRL-Z和CTRL-C都是中断命令,但是他们的作用却不一样.CTRL-C是强制中断程序的执行,而CTRL-Z的是将任务中断,但是此任务并没有结束,他仍然 ...

随机推荐

  1. 二级菜单(avalon+jquery动画)

    by 司徒正美 var vm = avalon.define({ $id: "test", array: [ { name: 111111, child: [ {name: 1.1 ...

  2. 什么是socket?

    1.七层协议简化为四层:应用层.传输层.网络层.链路层:2.套接字是应用层和TCP/IP协议族通信间的软件抽象层,将TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用实现进程在网络中的通信:本地 ...

  3. C++随记

    1.const限定符 const限定变量的值不可变,并且const对象必须要初始化 const int buf = 512; //正确,表明buf的值为512 buf = 400;  //错误,buf ...

  4. Hibernate学习笔记2.2(Hibernate基础Annotation配置)

    如果数据库表名与类名不一致 可以用使用 @Table(name="_teacher") 来指定表名,没有就会自己创建 也可以在配置文件上修改 为class添加table属性 如果什 ...

  5. ArcGIS案例学习笔记2_1_山顶点提取最大值提取

    ArcGIS案例学习笔记2_1_山顶点提取最大值提取 计划时间:第二天上午 目的:最大值提取 教程:Pdf page=343 数据:chap8/ex5/dem.tif 背景知识:等高线种类 基本等高线 ...

  6. Hadoop集群(三) Hbase搭建

    前面已经完成Zookeeper和HDFS的安装,本文会详细介绍Hbase的安装步骤.以及安装过程中遇到问题的汇总. 系列文章:   Hadoop集群(一) Zookeeper搭建 Hadoop集群(二 ...

  7. ubuntu14配置opencv3.4.1(转)

    网站:https://blog.csdn.net/a1429331875/article/details/31539129 写此博客的目的是为了方便大家的学习,我是搞了半天,通过上网查找资料才成功的. ...

  8. mysql 触发器介绍

    create trigger triggerName   after/before insert/update/delete on tableName  for each row   --这句话在my ...

  9. vue 路由meta作用及在路由中添加props作用

    vue路由meta:有利于我们处理seo的东西,我们在html中加入meta标签,就是有利于处理seo的东西,搜索引擎 在路由中传参是通过/:id传参代码如下: import Login from ' ...

  10. vue 模拟下拉树

    // 使用vue 做表格部分其他部分暂不修改 var app = new Vue({ el: "#freightTbl", watch: { //监听表格数据的变化[使用 watc ...