JPA一个最简单的Demo
首先,环境准备
JDK1.7 、Eclipse 、MYSQL
【第一步:找jar包】
由于JPA的实现由很多,在这里使用的是hibernate对JPA的实现,所以所有的jar包都是使用的hibernate的,所以需要到hibernate官网下载所有的hibernate的jar包。
网址:http://hibernate.org/
这里我下载的文件是:hibernate-release-4.3.5.Final.zip
解压以后呢,在该解压的文件夹中找齐以下的jar包:
(具体jar包看附件)
【第二步:准备JPA的配置文件】
在项目中的src下创建一个文件夹:META-INF
在META-INF下面创建XML文件:persistence.xml
在persistence.xml文件中加入以下的内容:
<?xml version="1.0" encoding="UTF-8"?> <persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd" version="2.1"> <persistence-unit name="JPA" transaction-type="RESOURCE_LOCAL"> <!-- 供应商 --> <provider>org.hibernate.ejb.HibernatePersistence</provider> <properties> <!-- 参数:数据库驱动名、地址、用户、密码、方言、显示执行SQL语句 --> <property name="hibernate.connection.driver_class" value="org.gjt.mm.mysql.Driver"/> <property name="hibernate.connection.url" value="jdbc:mysql://127.0.0.1:3306/world"/> <property name="hibernate.connection.username" value="root"/> <property name="hibernate.connection.password" value="root"/> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> <property name="hibernate.show_sql" value="true"/> <!-- 其他设置 --> <property name="minPoolSize" value="5"/> <property name="initialPoolSize" value="10"/> <property name="idleConnectionTestPeriod" value="120"/> <property name="acquireIncrement" value="10"/> <property name="checkoutTimeout" value="3600"/> <property name="numHelperThreads" value="4"/> <property name="maxStatements" value="400"/> <property name="maxStatementsPerConnection" value="20"/> <property name="maxIdleTime" value="180"/> <property name="acquireRetryAttempts" value="30"/> <property name="maxPoolSize" value="200"/> </properties> </persistence-unit> </persistence>
注意:上面的配置的内容,特别是数据库的路径,用户名和密码需要更具自己的情况配置
【第三步:在数据库中创建测试表格,city,看附件2014-10-16_113529.png】
【第四步:创建对应的实体类即Java文件CityBean.java】
package bean;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
/**
*
* @author 青山
* @date 2014年10月16日
* @file name: CityBean.java
* Columns:ID Name CountryCode District Population
*/
@Entity //@Entity将JavaBean标示为实体
@Table(name="city") //@Table该实体类对应的数据库中的表的名称
public class CityBean {
@Id //Id标示该字段为主键
@Column(name="id")//Column标示该属性对应数据库中的哪个字段
private int cityId;
@Column(name="Name")
private String cityName;
@Column(name="CountryCode")
private String countryCode;
@Column(name="District")
private String district;
@Column(name="Population")
private long population;
public int getCityId() {
return cityId;
}
public void setCityId(int cityId) {
this.cityId = cityId;
}
public String getCityName() {
return cityName;
}
public void setCityName(String cityName) {
this.cityName = cityName;
}
public String getCountryCode() {
return countryCode;
}
public void setCountryCode(String countryCode) {
this.countryCode = countryCode;
}
public String getDistrict() {
return district;
}
public void setDistrict(String district) {
this.district = district;
}
public long getPopulation() {
return population;
}
public void setPopulation(long population) {
this.population = population;
}
public String toString(){
return this.cityId+" "+this.cityName+" "+this.countryCode+" "+this.district+" "+this.population;
}
}
【第五步:使用工厂模式编写测试使用的管理类】
package util;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
/**
*
* @author 青山
* @date 2014年10月16日
* @file name: JPAManagerFactory.java
*/
public class JPAManagerFactory {
/**
* 这个类其实最主要的就下面两句代码
EntityManagerFactory fac = Persistence.createEntityManagerFactory("JPA");
EntityManager manager = fac.createEntityManager();
*/
private static JPAManagerFactory factory;
private static EntityManagerFactory emfactory;
/*
* 私有的构造方法
*/
private JPAManagerFactory(){
}
public static JPAManagerFactory getMFInstance(){
if(factory==null){
return new JPAManagerFactory();
}else{
return factory;
}
}
public EntityManager getManager(){
if(emfactory==null){
emfactory = Persistence.createEntityManagerFactory("JPA");
}
return emfactory.createEntityManager();
}
public void closeFactory(){
if(emfactory!=null){
emfactory.close();
}
}
}
【第六步:测试】
package com.jpa.test;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import util.JPAManagerFactory;
import bean.CityBean;
/**
*
* @author 青山
* @date 2014年10月16日
* @file name: CityBeanTest.java
*/
public class CityBeanTest {
public static void main(String[] args) {
EntityManager manager = JPAManagerFactory.getMFInstance().getManager();
//获取事务
EntityTransaction t = manager.getTransaction();
//开启事务
t.begin();
// 通过主键查找一个指定的对象
CityBean c1 = manager.find(CityBean.class, 1);
System.out.println("find: "+c1.toString());
//添加一个对象到数据库
CityBean c2 = new CityBean();
c2.setCityId(10001);
c2.setCityName("HongKong");
c2.setCountryCode(c1.getCountryCode());
c2.setDistrict(c1.getDistrict());
manager.persist(c2);
System.out.println("add: "+c2.toString());
//修改一个数据
CityBean c3 = manager.find(CityBean.class, 10001);
c3.setCityName("ShangHai");
c3.setPopulation(2000000);
manager.persist(c3);//如果该数据存在就进行更新,如果不存在就进行插入
manager.refresh(c3);//并非更新数据,而是重新从数据库中把数据拿出来并放入c3
System.out.println("update: "+c3.toString());
//删除一个数据
manager.remove(c3);
//提交
t.commit();
manager.close();
JPAManagerFactory.getMFInstance().closeFactory();
}
}
对于初学的人来说,我想先有个直观的例子是非常重要的。网上找了一些例子,然后结合自己的理解写了上面的JPA的一个最简单的实现,当然了,这里还没有涉及关系的管理,慢慢加。