这一节写一个JPA的HelloWorld来体验一下。

一、建立工程

  按照 1、创建一个JPA project(解决“at least one user library must be selected”问题)中说的步骤建立一个JPA project。创建过程极其简单,就是 New → JPA project 就可以了。当然,如果在创建的过程中出现了at least one user library must be selected 问题,而user library中又没有选项的时候可以参看第一节后面的解决方案(如果想给动态web工程创建JPA环境也参照这一节)。然后在工程中创建一个lib目录用于放置第三方jar包。工程结构如下:

  

二、添加必须的jar包

  JPA是一个标准,其有很多种实现,如Hibernate,OpenJPA,TopLink等。之前学习过Hibernate,那么就用Hibernate的实现来进行学习。

  要用到的jar包有:

  ①、hibernate-release-4.3.10.Final\lib\required 文件夹下的所有jar包

  ②、hibernate-release-4.3.10.Final\lib\jpa 文件夹下的所有jar包

  ③、MySQL 的jdbc驱动包 mysql-connector-java-5.1.7-bin.jar

三、创建实体(entity)类Customer.java

  在创建实体类的时候会用到一些注解,这些注解在下一节进行讲解。不过这些注解的作用很容易理解。下面是Customer的代码:

  1. package com.magicode.jpa.helloworld;
  2.  
  3. import javax.persistence.Column;
  4. import javax.persistence.Entity;
  5. import javax.persistence.GeneratedValue;
  6. import javax.persistence.GenerationType;
  7. import javax.persistence.Id;
  8. import javax.persistence.Table;
  9.  
  10. /**
  11. * @Entity 用于注明该类是一个实体类
  12. * @Table(name="t_customer") 表明该实体类映射到数据库的 t_customer 表
  13. */
  14. @Table(name="t_customer")
  15. @Entity
  16. public class Customer {
  17.  
  18. private Integer id;
  19. private String lastName;
  20.  
  21. private String email;
  22. private int age;
  23.  
  24. /**
  25. * @GeneratedValue(strategy=GenerationType.AUTO) 指明主键生成策略为AUTO
  26. * @Id 表明实体类的主键
  27. */
  28. @GeneratedValue(strategy=GenerationType.AUTO)
  29. @Id
  30. public Integer getId() {
  31. return id;
  32. }
  33.  
  34. /**
  35. * @Column 指明lastName属性映射到表的 LAST_NAME 列中
  36. * 同时还可以指定其长度、能否为null等数据限定条件
  37. */
  38. @Column(name="LAST_NAME", length=50, nullable=false)
  39. public String getLastName() {
  40. return lastName;
  41. }
  42.  
  43. public String getEmail() {
  44. return email;
  45. }
  46.  
  47. public int getAge() {
  48. return age;
  49. }
  50.  
  51. public void setId(Integer id) {
  52. this.id = id;
  53. }
  54.  
  55. public void setLastName(String lastName) {
  56. this.lastName = lastName;
  57. }
  58.  
  59. public void setEmail(String email) {
  60. this.email = email;
  61. }
  62.  
  63. public void setAge(int age) {
  64. this.age = age;
  65. }
  66.  
  67. }

四、修改配置文件persistence.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <persistence version="2.0"
  3. xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
  5.  
  6. <!-- 注意这里的 persistence-unit标签的name属性值,main函数中会用到它 -->
  7. <persistence-unit name="jpa-1" transaction-type="RESOURCE_LOCAL">
  8.  
  9. <!-- 配置使用什么样的ORM产品作为JPA的实现
  10. 1、实际上配置的是 javax.persistence.spi.PersistenceProvider 接口的实现类
  11. 2、若JPA项目中只有一个JPA的实现产品,则可以不配置provider节点
  12. -->
  13. <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
  14.  
  15. <!-- 添加持久化类 -->
  16. <class>com.magicode.jpa.helloworld.Customer</class>
  17.  
  18. <properties>
  19. <!-- 连接数据库的基本信息 -->
  20. <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
  21. <property name="javax.persistence.jdbc.url" value="jdbc:mysql:///jpa" />
  22. <property name="javax.persistence.jdbc.user" value="root" />
  23. <property name="javax.persistence.jdbc.password" value="tiger123" />
  24.  
  25. <!-- 配置JPA实现产品的基本属性:配置Hibernate的基本属性 -->
  26. <property name="hibernate.format_sql" value="true" />
  27. <property name="hibernate.show_sql" value="true" />
  28. <property name="hibernate.hbm2ddl.auto" value="update" />
  29.  
  30. </properties>
  31.  
  32. </persistence-unit>
  33. </persistence>

五、编写测试主函数Main.java。一共分为7个步骤进行:

  1. package com.magicode.jpa.helloworld;
  2.  
  3. import javax.persistence.EntityManager;
  4. import javax.persistence.EntityManagerFactory;
  5. import javax.persistence.EntityTransaction;
  6. import javax.persistence.Persistence;
  7.  
  8. public class Main {
  9.  
  10. public static void main(String[] args) {
  11.  
  12. /*
  13. * 1、获取EntityManagerFactory实例
  14. * 利用Persistence类的静态方法,结合persistence.xml中
  15. * persistence-unit标签的name属性值得到
  16. */
  17. EntityManagerFactory emf =
  18. Persistence.createEntityManagerFactory("jpa-1");
  19.  
  20. // 2、获取EntityManager实例
  21. EntityManager em = emf.createEntityManager();
  22.  
  23. // 3、开启事物
  24. EntityTransaction transaction = em.getTransaction();
  25. transaction.begin();
  26.  
  27. // 4、调用EntityManager的persist方法完成持久化过程
  28. Customer customer = new Customer();
  29. customer.setAge(9);
  30. customer.setEmail("Tom@163.com");
  31. customer.setLastName("Tom");
  32. em.persist(customer);
  33.  
  34. // 5、提交事物
  35. transaction.commit();
  36. // 6、关闭EntityManager
  37. em.close();
  38. // 7、关闭EntityManagerFactory
  39. emf.close();
  40.  
  41. }
  42.  
  43. }

  可以看出:EntityManagerFactory 的功能类似于 Hibernate 中的 SessionFactory; EntityManager 的功能类似于 Hibernate 中的Session。

六、运行结果

  运行mian方法,JPA就会自动的连接到数据库jpa中,同时创建一个t_customer数据表。有一个需要注意的地方:需要手动创建一个数据库jpa。JPA会自动帮我们创建数据表,但是它不会自动创建数据库。

  main方法运行以后创建的数据表t_customer,并把一个Customer对象进行了持久化:

  

2、JPA的HelloWorld的更多相关文章

  1. JPA之helloWorld

    在 Eclipse 下创建 JPA 工程 1.在eclipse上安装JPA插件(网上自行百度) 2.new 一个Jpa工程 3:点击下一步,下一步,第一次运行jpa插件会让我们装相关类库如下图,等到再 ...

  2. JPA + SpringData 操作数据库--Helloworld实例

    前言:谈起操作数据库,大致可以分为几个阶段:首先是 JDBC 阶段,初学 JDBC 可能会使用原生的 JDBC 的 API,再然后可能会使用数据库连接池,比如:c3p0.dbcp,还有一些第三方工具, ...

  3. SpringData —— HelloWorld

    SpringData 简介 优点 简化数据库访问,减少数据访问层的开发量. 支持的数据库类型 支持 NoSQL 存储,如 MongoDB,Redis. 支持关系型数据存储技术,如 jdbc,jpa. ...

  4. JPA学习(3)JPA API

    在我们的jpa的helloworld中,我们看到了简单的一个jpa保存操作,下面就来好好学习一下,JPA最主要的几个类 1.基本的几个类: ①:Persistence 类是用于获取 EntityMan ...

  5. JPA学习(2)注解

    上一篇学习了JPA的helloworld,也初略的使用了一些注解,接下来就细细的了解一下有哪些注解,和这些注解的作用 JPA的基本注解: ①@Entity,@Table,@Id,@GeneratedV ...

  6. JPA学习(1)基础认知

    JPA 是什么 Java Persistence API:用于对象持久化的API. Java EE 5.0 平台标准的 ORM 规范,使得应用程序以统一的方式访问持久层: JPA和Hibernate的 ...

  7. 3、JPA一些常用的注解

    常用注解有下面这些: ①:@Entity.@Table.@Id.@GeneratedValue.@Column.@Basic ②:@Transient 用于忽略某个属性,而不对该属性进行持久化操作 ③ ...

  8. JPA + SpringData 操作数据库原来可以这么简单 ---- 深入了解 JPA - 1

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7703679.html ------------------------------------ ...

  9. JPA + SpringData 操作数据库 ---- 深入了解 SpringData

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7735616.html ------------------------------------ ...

随机推荐

  1. linux 文件在磁盘上的表示

    基本构成 分区就是把磁盘像比萨饼一样切成大小一样的扇形, 当然分区大小不一样扇形的大小也就不一样 上下一串盘片中,相同半径的磁道所组成的一个圆柱型的环壁,就称为柱面 在柱面组中, 比较重要的两个结构是 ...

  2. FastLoad错误 — RDBMS error 2634

    我们来看一下下面这条语句: BEGIN LOADING stu_flERRORFILES error_1, error_2;   如果此时已经存在error_1或error_2表,那么将会报错,信息如 ...

  3. DBus通讯

    linux下进程间通信的方式主要有Pipe(管道),FIFO(命名管道),信号,共享内存,消息队列,信号灯等,这些方式各有 各得特点,如管道是linux下命令行中常用的,用于父子进程的通信.但是这些通 ...

  4. IOS UIWebView截获html并修改便签内容,宽度自适应

    需求:混合应用UIWebView打开html后,UIWebView有左右滚动条,要去掉左右滚动效果:  方法:通过js截获UIWebView中的html,然后修改html标签内容:  实例代码:  服 ...

  5. Week1 Team Homework #3: 软件工程在北航

    在组内成员的共同努力,我们采访了几个学长学姐,顺利完成任务.反馈信息如下: 平均每周花在这门课上的时间 平均写的代码总行数 学到的最有用的部分 最没用的部分 <软件工程>最应该改进的地方 ...

  6. .NET4安装总进度一直不动的解决办法

    在安装.NET4时遇到上面的进度在动,而安装进度一直停在0,解决办法: 禁止并关闭Window Update服务,重新运行安装程序. 关闭服务:控制面板->管理工具->服务->Win ...

  7. 3240: [Noi2013]矩阵游戏

    Description 婷婷是个喜欢矩阵的小朋友,有一天她想用电脑生成一个巨大的n行m列的矩阵(你不用担心她如何存储).她生成的这个矩阵满足一个神奇的性质:若用F[i][j]来表示矩阵中第i行第j列的 ...

  8. MATLAB——axis

    MATLAB——axis axis中文为“轴”之意,在matlab中用于控制坐标轴的范围和样式(颜色等). axis([XMIN XMAX YMIN YMAX]) 设置当前所绘图像的x轴和y轴的范围. ...

  9. uva 1056

    floyd 算法 用了stl 的map 存名字的时候比较方便 #include <cstdio> #include <cstdlib> #include <cmath&g ...

  10. 总结:Unity3D游戏上线后的流程回顾

    原地址:http://unity3d.9tech.cn/news/2014/0127/39748.html 首先.unity 灯光烘焙 :Unity 3d FBX模型导入.选项Model 不导入资源球 ...