这一节写一个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的代码:

 package com.magicode.jpa.helloworld;

 import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table; /**
* @Entity 用于注明该类是一个实体类
* @Table(name="t_customer") 表明该实体类映射到数据库的 t_customer 表
*/
@Table(name="t_customer")
@Entity
public class Customer { private Integer id;
private String lastName; private String email;
private int age; /**
* @GeneratedValue(strategy=GenerationType.AUTO) 指明主键生成策略为AUTO
* @Id 表明实体类的主键
*/
@GeneratedValue(strategy=GenerationType.AUTO)
@Id
public Integer getId() {
return id;
} /**
* @Column 指明lastName属性映射到表的 LAST_NAME 列中
* 同时还可以指定其长度、能否为null等数据限定条件
*/
@Column(name="LAST_NAME", length=50, nullable=false)
public String getLastName() {
return lastName;
} public String getEmail() {
return email;
} public int getAge() {
return age;
} public void setId(Integer id) {
this.id = id;
} public void setLastName(String lastName) {
this.lastName = lastName;
} public void setEmail(String email) {
this.email = email;
} public void setAge(int age) {
this.age = age;
} }

四、修改配置文件persistence.xml

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

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

 package com.magicode.jpa.helloworld;

 import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence; public class Main { public static void main(String[] args) { /*
* 1、获取EntityManagerFactory实例
* 利用Persistence类的静态方法,结合persistence.xml中
* persistence-unit标签的name属性值得到
*/
EntityManagerFactory emf =
Persistence.createEntityManagerFactory("jpa-1"); // 2、获取EntityManager实例
EntityManager em = emf.createEntityManager(); // 3、开启事物
EntityTransaction transaction = em.getTransaction();
transaction.begin(); // 4、调用EntityManager的persist方法完成持久化过程
Customer customer = new Customer();
customer.setAge(9);
customer.setEmail("Tom@163.com");
customer.setLastName("Tom");
em.persist(customer); // 5、提交事物
transaction.commit();
// 6、关闭EntityManager
em.close();
// 7、关闭EntityManagerFactory
emf.close(); } }

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

六、运行结果

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

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

  

最新文章

  1. RabbitMQ 声明Queue时的参数们的Power
  2. LVM增大和减小ext4、xfs分区
  3. java list中的对象去重原理
  4. msconfig设置调试开启 关闭 操作注册表项是
  5. UVa 11181 条件概率
  6. 任意阶魔方阵(幻方)的算法及C语言实现
  7. [原]Unity3D深入浅出 - 认识开发环境中的Layers面板
  8. BZOJ 4027 [HEOI 2015] 兔子与樱花 解题报告
  9. 【转】Eclipse使用git最简易流程
  10. [转] C++虚函数与虚函数表
  11. OpenStack协同并发 eventlet
  12. 初识ege图形库
  13. SQL Server MYSQL 对外键建立索引的必要性
  14. 支撑Pinterest日均1000+次试验的A/B测试平台揭秘
  15. 学习HTML5一周的收获1
  16. 1856: [Scoi2010]字符串
  17. 0721JS
  18. Jquery UI 中的datepicker() ,获取日期后的回调函数onClose()
  19. python的内置模块random随机模块方法详解以及使用案例(五位数随机验证码的实现)
  20. [转]你如何面对—LNMP高并发时502

热门文章

  1. 利用Jmeter做接口测试
  2. 从零开始学ios开发(五):IOS控件(2),Slider
  3. using 语句中使用的类型必须可隐式转换为“System.IDisposable”
  4. [原]项目进阶 之 持续构建环境搭建(三)Maven环境搭建
  5. UML 小结(6)- UML九种图的比较与学习
  6. android开发设置dialog的高宽
  7. cadence16.6 中orcad导出网表时ERROR (ORCAP-5004)
  8. UML类图关系-转
  9. python 发邮件 utf-8
  10. 【转】Dancing Links题集