JPA能干什么?我在前面一遍文章《初步了解JPA》基本描述了。不過你不需要點(diǎn)擊回去再看。這里簡(jiǎn)單的再提一下JPA的功能,就是:(1)實(shí)現(xiàn)“對(duì)象-關(guān)系”映射;(2)對(duì)象持久化到數(shù)據(jù)庫(kù);(3)對(duì)象查詢。
JPA要怎么用,我們直接入手來跑起一個(gè)JPA的demo,我這里是采用Hibernate的JPA實(shí)現(xiàn)。
(1)創(chuàng)建一個(gè)普通java工程。
(2)導(dǎo)入必要的包。
從Hibernate官方下載一個(gè)基本包,我這里下載后得到的是hibernate-release-5.0.4.Final.zip。解壓后可以文件結(jié)構(gòu)大概如下:

其中l(wèi)ib文件夾就是我們需要導(dǎo)入到項(xiàng)目中的包。簡(jiǎn)單的實(shí)現(xiàn),導(dǎo)入required、jpa、jpa-metamodel-generator文件夾下的所有jar包既可。
另外,不要忘了導(dǎo)入JDBC驅(qū)動(dòng)。我這里用的是MySQL的。從MySQL官網(wǎng)下的mysql-connector-java-5.1.37.zip。解壓導(dǎo)入就行
(3)創(chuàng)建配置文件
JPA有一個(gè)硬性要求,配置文件必須是類路徑下的META-INF目錄下的persistence.xml。在我這里可以看到

文件的內(nèi)容如下:
<?xml version="1.0" encoding="UTF-8"?>
<persistence
version="1.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_1_0.xsd">
<persistence-unit name="test" transaction-type="RESOURCE_LOCAL">
<PRoperties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" />
<property name="hibernate.connection.username" value="root" />
<property name="hibernate.connection.passWord" value="root" />
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/jpa" />
<property name="hibernate.max_fetch_depth" value="3" />
<property name="hibernate.hbm2ddl.auto" value="update" />
</properties>
</persistence-unit>
</persistence>
如果你的數(shù)據(jù)庫(kù)設(shè)置和我不一樣,自己改一下配置文件。相信一看就懂 ^_^
(3)代碼
我這里先寫兩個(gè)類。

TestBasic類內(nèi)容如下:
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;import entity.Person;
public class TestBasic {
public static void main(String[] args) {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");
EntityManager entityManager = factory.createEntityManager();
Person person = new Person();
person.setName("袁");
entityManager.getTransaction().begin();
entityManager.persist(person);
entityManager.getTransaction().commit();
entityManager.close();
factory.close();
}}
Person.java如下:
package entity;
import javax.persistence.Entity;
import javax.persistence.Id;@Entity
public class Person {
@Id
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}}
數(shù)據(jù)庫(kù)中只是建好了jpa庫(kù),里面沒有表。
運(yùn)行這段代碼,就可以看到數(shù)據(jù)庫(kù)中表被建立起來了。表名和類名Person有點(diǎn)類似,是person。并且有數(shù)據(jù)了。

很明顯,可以知道這其實(shí)就是對(duì)數(shù)據(jù)庫(kù)的插入操作。那么怎么查詢呢。
在TestBasic類中改一下代碼。
main方法里這樣寫:
EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");
EntityManager entityManager = factory.createEntityManager();
Person person = entityManager.find(Person.class, 0);//剛才在數(shù)據(jù)庫(kù)里看到,id是0。
System.out.println(person.getName());
entityManager.close();
factory.close();
運(yùn)行代碼你會(huì)看到打印出“袁”。
那么改操作呢:
繼續(xù)改main方法里的代碼:
EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");
EntityManager entityManager = factory.createEntityManager();
entityManager.getTransaction().begin();
Person person = entityManager.find(Person.class, 0);//剛才在數(shù)據(jù)庫(kù)里看到,id是0。
person.setName("鄧");
entityManager.getTransaction().commit();
entityManager.close();
factory.close();
可以看到數(shù)據(jù)里的數(shù)據(jù)變了。

最后一個(gè)操作,刪除數(shù)據(jù)。
main方法中的代碼改成如下:
EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");
EntityManager entityManager = factory.createEntityManager();
entityManager.getTransaction().begin();
Person person = entityManager.find(Person.class, 0);//剛才在數(shù)據(jù)庫(kù)里看到,id是0。
entityManager.remove(person);
entityManager.getTransaction().commit();
entityManager.close();
factory.close();
運(yùn)行這段代碼,發(fā)現(xiàn)數(shù)據(jù)庫(kù)里的person表沒數(shù)據(jù)了。
JPA的增刪改查的演示操作就此完成了。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注