`
lxy19791111
  • 浏览: 480884 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

非容器环境运行OpenJPA应用

    博客分类:
  • JPA
阅读更多

注: 本人是参照网上的相关文章内容写成

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());
		}
		
	}

}

 

分享到:
评论

相关推荐

    openjpa范例及实例工程

    默认情况下,当应用程序第一次获取实体标识时,OpenJPA 框架从数据库中一次性获取 50 个连续的实体标识缓存起来,当下一次应用程序需要获取实体标识时,OpenJPA 将首先检测缓存中是否存在实体标识,如果存在,Open...

    OpenJPA 2.2.1 API (CHM格式)

    OpenJPA 可以作为独立的持久层框架发挥作用,也可以轻松的与其它 Java EE 应用框架或者符合 EJB 3.0 标准的容器集成。  除了对 JPA 标准的支持之外,OpenJPA 还提供了非常多的特性和工具支持让企业应用开发变得更加...

    Apache OpenJPA 2.1 User's Guide

    - **非 EE 环境下的使用**:对于不在 Java EE 容器中的应用,需要手动创建 `EntityManagerFactory` 和 `EntityManager` 实例。 #### 七、EntityManagerFactory 和 EntityManager - **EntityManagerFactory**:用于...

    openjpa-manual

    ### OpenJPA-Manual 关键知识点解析 #### 一、OpenJPA介绍 **1.1 关于本文档** 本文档旨在提供一个全面且深入的指南,帮助开发人员理解和掌握Java Persistence API(JPA)的核心概念及其在Apache OpenJPA中的实现...

    通过 WebSphere Application Server V6.1 利用 OpenJPA

    这个博客作者"Lxy19791111"通过一个实际的项目,展示了如何设置、配置和运行OpenJPA应用程序。博主分享了他们的经验,为开发者提供了一条快速上手OpenJPA的路径。 【标签】: 1. **源码**: 提供的OpenJPASample示例...

    Spring中使用OpenJPA

    Spring通过其强大的IoC(Inversion of Control)容器管理和配置OpenJPA,而OpenJPA则负责处理数据库操作,如对象关系映射(ORM)和数据持久化。在Spring中配置OpenJPA主要包括以下几个步骤: 1. **添加依赖**:在...

    OpenJPA Guide

    - **非EE使用**: 对于不在Java EE环境中运行的应用程序,需要显式配置持久性单元。 #### 六、EntityManagerFactory **获取EntityManagerFactory** - 创建EntityManagerFactory对象,它是持久性上下文的基础。 - **...

    用JPA时需要的jar包

    JPA由EJB 3.0软件专家组开发,作为JSR-220实现的一部分。但它不囿于EJB 3.0,你可以在Web应用、甚至桌面应用中使用。JPA的宗旨是为POJO提供持久化...目前Hibernate 3.2、TopLink 10.1.3以及OpenJPA都提供了JPA的实现。

    ejb3.0 jpa

    JPA(Java Persistence API)作为Java EE 5.0平台标准的ORM规范,将得到所有Java EE服务器的支持。Sun这次吸取了之前EJB规范惨痛失败的经历,在充分...目前Hibernate 3.2、TopLink 10.1.3以及OpenJpa都提供了JPA的实现。

    JPA_Basic

    当前,包括Hibernate 3.2、TopLink 10.1.3及OpenJPA在内的多种ORM框架已支持JPA。 #### 二、JPA的关键技术 JPA的核心技术覆盖三个主要方面: 1. **ORM映射元数据**:支持XML和JDK 5.0注解形式,用于描述对象与...

    JPA(Java Persistence API) 是JavaEE5.0 平台标准的ORM规范

    ### JPA(Java Persistence API) 是JavaEE5.0 平台标准的ORM规范 #### 概述 ...随着更多ORM框架(如Hibernate、TopLink、OpenJPA等)支持JPA规范,JPA已经成为Java开发者在进行数据库操作时的首选方案之一。

    TongWeb6.0用户使用手册.pdf

    - **容器层**:负责提供基本的运行环境和支持,如Web容器和EJB容器。 - **服务层**:提供了诸如安全管理、事务管理、消息队列等高级服务。 - **应用层**:用户的应用程序运行在此层之上,可以利用容器和服务层提供的...

    openliberty:Open Liberty是用于构建云原生应用程序和微服务的灵活服务器运行时

    Open Liberty是IBM开发的一款轻量级、高性能的Java服务器运行时,它专为构建云原生应用程序和微服务而设计。Open Liberty的核心优势在于其灵活性和可扩展性,使得开发者能够根据项目需求选择并仅加载所需的功能模块...

    TongWeb6.1用户使用手册.pdf

    东方通科技的TongWeb6.1是一款符合Java EE 6 Full Profile标准的应用服务器,能够提供高性能、高可靠性的应用运行环境。本手册将详细介绍TongWeb6.1的安装、应用管理、Web容器、JDBC配置、EJB3.1以及JPA的相关操作和...

    spring依赖包,spring自行整合的市面上几乎和spring有关的jar包

    在Spring Boot应用中,Tomcat常作为内置的Servlet容器,负责部署和运行Spring MVC应用。 `org.beanshell`是Bsh(BeanShell)的包名,这是一个小型、动态的Java脚本环境。Spring可能使用BeanShell来进行一些简单的...

    开源springboot开发平台源码(open-capacity-platform).zip

    7. **Docker化部署**:考虑到开源平台通常会支持多种部署方式,Open-Capacity-Platform可能包含Dockerfile,以便于使用Docker进行容器化部署,提高应用的可移植性和一致性。 8. **RESTful API设计**:现代开发平台...

Global site tag (gtag.js) - Google Analytics