注: 本人是参照网上的相关文章内容写成
1.不用说,先到http://openjpa.apache.org下载OpenJPA的相关包.
2.Animal.java
package com.openjpa.entity;
import javax.persistence.Basic;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.SequenceGenerator;
/**
* Animal 用于表征系统中的Animal对象,他有两个属性<br>
* id - 编号,编号将由Oracle数据库自动生成<br>
* name - Animal的名称
*/
/* Entity注释表示该类是持久化类,的name属性是该实体在查询中对应的唯一名称,默认是类名 */
@Entity
public class Animal {
// 名称
@Basic
private String name;
// 编号
/* Id注释表示该字段是标识字段 */
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="SEQ_ANIMAL")
@SequenceGenerator(name="SEQ_ANIMAL", sequenceName="SEQ_ANIMAL")
private int id;
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;
}
}
AnimalDAO.java
package com.openjpa.dao;
import java.util.List;
import com.openjpa.entity.Animal;
/**
* @author king
*
*/
public interface AnimalDAO {
/**
* 增加新的Animal对象
*
* @param animal
* 新的Animal对象
*/
public void persistAnimal(Animal animal);
/**
* 修改Animal对象的信息
*
* @param animal
* 修改后的Animal对象
*/
public void updateAnimal(Animal animal);
/**
* 删除Animal对象
*
* @param id
* 被删除的Animal对象
*/
public void removeAnimal(int id);
/**
* 根据id查找符合条件的Animal
*
* @param id
* animal的编号
* @return 编号为指定id的Animal对象
*/
public Animal getAnimalByPrimaryKey(int id);
/**
* 根据输入的名称字符串模糊查找所有符合条件的Animal对象列表
*
* @param name
* Animal对象名称
* @return 符合条件的Animal对象列表
*/
public List<Animal> findAnimalsByName(String name);
}
AnimalDAOImpl.java
package com.openjpa.impl.ejb3;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import com.openjpa.dao.AnimalDAO;
import com.openjpa.entity.Animal;
/**
* AnimalDAOImpl 演示了如何使用OpenJPA访问数据库的方法和步骤
*
* @author king
*
*/
public class AnimalDAOImpl implements AnimalDAO {
/**
* removeAnimal方法可以从数据库中删除指定编号的Animal对象
*
* @param id
* Animal对象的编号
*/
public void removeAnimal(int id) {
// 获取EntityManagerFactory
EntityManagerFactory factory = Persistence
.createEntityManagerFactory("oracle");
// 获取EntityManager
EntityManager em = factory.createEntityManager();
// 开始事务处理
em.getTransaction().begin();
// 使用Query删除对象
em.createQuery("delete from Animal animal where animal.id=" + id)
.executeUpdate();
// 我们还可以选择通过对象来完成
/*
* // 从EntityManager中查询到符合条件的对象 Animal animal =
* em.find(Animal.class,id); // 调用EntityManager的remove方法删除对象
* em.remove(animal);
*/
// 提交事务
em.getTransaction().commit();
// 关闭EntityManager
em.close();
// 关闭EntityManagerFactory
factory.close();
}
/**
* findAnimalsByName 通过输入的name内容模糊查找符合条件的Animal对象列表
*
* @param name
* Animal对象的name
* @return 符合模糊查找条件的Animal对象列表
*/
public List<Animal> findAnimalsByName(String name) {
// 获取EntityManagerFactory
EntityManagerFactory factory = Persistence
.createEntityManagerFactory("oracle");
// 获取EntityManager
EntityManager em = factory.createEntityManager();
/*
* 通过EntityManager的createQuery方法获取Query对象
* createQuery方法的参数是JPQL查询语句,JPQL语句的语法请参考OpenJPA的帮助文档.
*
* 由于查询不需要事务的支持,因此Query操作的前后没有出现begin、commit方法的调用
*
*/
Query q = em.createQuery("select animal from Animal animal where animal.name like :name");
q.setParameter("name", "%" + name + "%");
List<Animal> l = q.getResultList();
// 关闭EntityManager
em.close();
// 关闭EntityManagerFactory
factory.close();
return l;
}
/**
* getAnimalByPrimaryKey 方法可以查找符合条件的单个Animal对象,如果不存在对应的Animal对象将返回null
*
* @param id
* Animal对象的编号
* @return 唯一符合条件的Animal对象
*
*/
public Animal getAnimalByPrimaryKey(int id) {
// 获取EntityManagerFactory
EntityManagerFactory factory = Persistence
.createEntityManagerFactory("oracle");
// 获取EntityManager
EntityManager em = factory.createEntityManager();
// 查找符合条件的对象
Animal animal = em.find(Animal.class, id);
// 关闭EntityManager
em.close();
// 关闭EntityManagerFactory
factory.close();
return animal;
}
/**
* 将对象持久化到数据库中
*
* @param animal
* 需要被持久化的对象
*/
public void persistAnimal(Animal animal) {
// 获取EntityManagerFactory
EntityManagerFactory factory = Persistence
.createEntityManagerFactory("oracle");
// 获取EntityManager
EntityManager em = factory.createEntityManager();
// 开始事务处理
em.getTransaction().begin();
// 持久化对象
em.persist(animal);
// 提交事务
em.getTransaction().commit();
// 关闭EntityManager
em.close();
// 关闭EntityManagerFactory
factory.close();
}
/*
* (non-Javadoc)
*
* @see org.vivianj.openjpa.AnimalDAO#updateAnimal(org.vivianj.openjpa.entity.Animal)
*/
public void updateAnimal(Animal animal) {
// 获取EntityManagerFactory
EntityManagerFactory factory = Persistence
.createEntityManagerFactory("oracle");
// 获取EntityManager
EntityManager em = factory.createEntityManager();
// 开始事务处理
em.getTransaction().begin();
// 持久化对象
em.merge(animal);
// 提交事务
em.getTransaction().commit();
// 关闭EntityManager
em.close();
// 关闭EntityManagerFactory
factory.close();
}
}
3.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="oracle" transaction-type="RESOURCE_LOCAL"> <provider> org.apache.openjpa.persistence.PersistenceProviderImpl </provider> <class>com.openjpa.entity.Animal</class> <properties> <property name="openjpa.ConnectionURL" value="jdbc:oracle:thin:@192.168.1.8:1521:test"/> <property name="openjpa.ConnectionDriverName" value="oracle.jdbc.OracleDriver"/> <property name="openjpa.ConnectionUserName" value="test"/> <property name="openjpa.ConnectionPassword" value="test"/> <property name="openjpa.Log" value="SQL=TRACE"/> </properties> </persistence-unit> </persistence>
4.本人使用的是Oracle,Animal表的id为自增序列,开始前我们可在数据库中创建好序列:
create sequence seq_animal
minvalue 1
start with 1
increment by 1;
数据库表可以用命令行方式生成:
java org.apache.openjpa.jdbc.meta.MappingTool Animal.java
5.运行TestAnimalDaoImpl.java测试即可见效果:
package test.openjpa;
import java.util.List;
import com.openjpa.entity.Animal;
import com.openjpa.impl.ejb3.AnimalDAOImpl;
public class TestAnimalDaoImpl {
public static void main(String[] args) {
AnimalDAOImpl animalDaoImpl = new AnimalDAOImpl();
//新增
Animal a = new Animal();
a.setName("新增openJPA");
animalDaoImpl.persistAnimal(a);
//查询
List<Animal> animals = animalDaoImpl.findAnimalsByName("open");
for(Animal animal: animals){
System.out.println("name = " + animal.getName());
}
//查询单个
Animal an = animalDaoImpl.getAnimalByPrimaryKey(a.getId());
System.out.println("Aniaml id = " + a.getId() + " , name = " + an.getName());
//删除
animalDaoImpl.removeAnimal(a.getId());
//查询
animals = animalDaoImpl.findAnimalsByName("open");
for(Animal animal: animals){
System.out.println("name = " + animal.getName());
}
}
}