JPA初探01--最简单的案例

 

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的一个最简单的实现,当然了,这里还没有涉及关系的管理,慢慢加。

 

 

你可能感兴趣的:(JPA Demo)