最近刚刚接触到openjpa,所以网上找了一堆材料,写了个小demo体验一下openjpa。
先从创建一个简单的Student类并持久化到mysql数据库开始。
坏境准备:jdk6+openjpa(相关jar包(openjpa主目录下和lib下的))+mysql相关的驱动jar+mysql数据库
1.在d盘创建一个目录openjpademo01
2.进入该目录编写Student.java实体类,代码如下
package org.dean.openjpa.entity;
import javax.persistence.Basic;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Student{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Basic
private String name;
public int getId(){
return this.id;
}
public void setId(int id){
this.id = id;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
}
3.在d:\openjpademo01目录下新建META-INF,并进入META-INF文件夹编写persistence.xml(内容如下):
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="1.0">
<persistence-unit name="mysql" transaction-type="RESOURCE_LOCAL">
<provider>
org.apache.openjpa.persistence.PersistenceProviderImpl
</provider>
<class>org.dean.openjpa.entity.Student</class>
<properties>
<property name="openjpa.ConnectionURL"
value="jdbc:mysql://localhost/test"/>
<property name="openjpa.ConnectionDriverName"
value="com.mysql.jdbc.Driver"/>
<property name="openjpa.ConnectionUserName"
value="root"/>
<property name="openjpa.ConnectionPassword"
value="root"/>
</properties>
</persistence-unit>
</persistence>
4.进入windows命令行,进入到d:\openjpademo01目录下,在命令行贴上(openjpa及连接mysql数据库用到大jar包)
set classpath=set classpath=.;D:\openjpa\lib\commons-beanutils-1.8.3.jar;D:\openjpa\lib\commons-collections-3.2.1.jar;D:\openjpa\lib\commons-dbcp-1.4.jar;D:\openjpa\lib\geronimo-jms_1.1_spec-1.1.1.jar;D:\openjpa\lib\geronimo-jpa_2.0_spec-1.1.jar;D:\openjpa\lib\geronimo-jta_1.1_spec-1.1.1.jar;D:\openjpa\lib\geronimo-validation_1.0_spec-1.1.jar;D:\openjpa\lib\org.apache.bval.bundle-0.3-incubating.jar;D:\openjpa\lib\serp-1.14.1.jar;D:\openjpa\openjpa-all-2.3.0.jar;D:\openjpa\openjpa-2.3.0.jar;D:\openjpademo\mysql-connector-java-5.1.7-bin.jar;
5.编译实体类Student.java
javac -d . Student.java
注明:openjpa提供了强大的数据库建表映射工具,可以通过增强org.dean.openjpa.entity.Student类以后再使用mappingTool工具建立student表:
增强Student类的命令:
java org.apache.openjpa.enhance.PCEnhancer org.dean.openjpa.entity.Student
通过Student类在建立student表的命令
java org.apache.openjpa.jdbc.meta.MappingTool org.dean.openjpa.entity.Student
这个时候:
mysql -uroot -proot
use test;
show tables;
你会发现数据库中居然自动有一张student表(之前test数据库是没有表的)
6.编写Main.java类如下(尝试向数据库中存入一student的信息):
package org.dean.openjpa.test;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.dean.openjpa.entity.Student;
public class Main{
public static void main(String[] args){
EntityManagerFactory factory = Persistence
.createEntityManagerFactory("mysql");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
Student student = new Student();
student.setName("tom");
em.persist(student);
em.getTransaction().commit();
em.close();
factory.close();
}
}
javac -d . Mina.java
java org.dean.openjpa.test.Main
然后你再去查询student表你会发现有一条记录
mysql> select * from student;
+----+------+
| id | name |
+----+------+
| 1 | tom |
+----+------+
1 row in set (0.00 sec)
=================根据id查询Student对象=======================
Main.java代码如下:
package org.dean.openjpa.test;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.dean.openjpa.entity.Student;
public class Main{
public static void main(String[] args){
EntityManagerFactory factory = Persistence
.createEntityManagerFactory("mysql");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
Student student = em.find(Student.class, 2);
System.out.println("id : 2, name : " + student.getName());
em.getTransaction().commit();
em.close();
factory.close();
}
}
====查询出Student的list集合=========
修改Main.java代码如下:
package org.dean.openjpa.test;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.dean.openjpa.entity.Student;
import javax.persistence.Query;
import java.util.List;
public class Main{
public static void main(String[] args){
EntityManagerFactory factory = Persistence
.createEntityManagerFactory("mysql");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
Query query = em
.createQuery("select student from Student student");
List<Student> students = query.getResultList();
for(Student student : students){
System.out.println("id: " + student.getId() + ", name : " + student.getName());
}
em.getTransaction().commit();
em.close();
factory.close();
}
}
================更新id=3的Student信息====
Main.java代码如下:
package org.dean.openjpa.test;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.dean.openjpa.entity.Student;
import javax.persistence.Query;
import java.util.List;
public class Main{
public static void main(String[] args){
EntityManagerFactory factory = Persistence
.createEntityManagerFactory("mysql");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
Student student = new Student();
student.setId(3);
student.setName("eric");
em.merge(student);
em.getTransaction().commit();
em.close();
factory.close();
}
}
================删除id是3的Student===============
Main.java 代码如下:
package org.dean.openjpa.test;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.dean.openjpa.entity.Student;
import javax.persistence.Query;
import java.util.List;
public class Main{
public static void main(String[] args){
EntityManagerFactory factory = Persistence
.createEntityManagerFactory("mysql");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
int id = 3;
em.createQuery("delete from Student student where student.id=" + id)
.executeUpdate();
em.getTransaction().commit();
em.close();
factory.close();
}
}