`
conkeyn
  • 浏览: 1529039 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

开发第一个openjpa应用

阅读更多

概述

     openJPA是完全基于sun 公司的JPA规范而开发的,不像Hibernate,TopLink等其他JPA产品还有一套自己的应用规则。JPA是包含于EJB 3.0规范中的,JPA相当于EJB的persistence bean与dao。我在这里就不多废话了,只记录JPA相关的内容。

 

第一个应用

 

首先我们在eclipse中创建一个名为JPA的项目。并加入相应的包文件。这些包文件可以从http://openjpa.apache.org/ 获得。

 

1、在项目的src目录中需要创建一个META-INF目录,此目录是必需的(至少我是这么做的),并且在META-INF目录添加persistence.xml文件,内容如下:

<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_jpa" transaction-type="RESOURCE_LOCAL">


		<!-- ORM 类 -->


		<class>model.Person</class>


		<properties>


			<property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver" />


			<property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:3306/test?characterEncoding=utf8" />


			<property name="openjpa.jdbc.DBDictionary" value="mysql"/>


			<property name="openjpa.ConnectionUserName" value="root"/>


			<property name="openjpa.ConnectionPassword" value="123456"/>


			<property name="openjpa.FetchBatchSize" value="20"/>


			<!-- 配置从java ORM annotation 生成数据库结构,配置此步时,需要把对应的java ORM类复制上面的<class/>标签中。 -->


			<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true,PrimaryKeys=true,Indexes=true,schemaAction=refresh)"/>


		</properties>


	</persistence-unit>


</persistence>

2、在model包先后添加如下文件:Gender.java、Person.java,它们的内容如下:

package model;





public enum Gender {


	WOMAN,


	MAN


}


package model;





import java.util.Date;





import javax.persistence.Column;


import javax.persistence.Entity;


import javax.persistence.EnumType;


import javax.persistence.Enumerated;


import javax.persistence.GeneratedValue;


import javax.persistence.GenerationType;


import javax.persistence.Id;


import javax.persistence.Temporal;


import javax.persistence.TemporalType;





@Entity


public class Person extends BaseObject {





	


	private static final long serialVersionUID = 2970135183705353062L;


	


	@Id


	@GeneratedValue(strategy = GenerationType.IDENTITY)


	private Integer id;


	


	@Column(length = 20, nullable = false)


	private String name;





	@Temporal(TemporalType.DATE)


	@Column(nullable = false)


	private Date birthday;





	@Enumerated(EnumType.STRING)


	@Column(nullable = false,columnDefinition=" enum('man','woman') NOT NULL DEFAULT 'man' ")


	private Gender gender = Gender.MAN;





	public String getName() {


		return name;


	}





	public void setName(String name) {


		this.name = name;


	}





	public Date getBirthday() {


		return birthday;


	}





	public void setBirthday(Date birthday) {


		this.birthday = birthday;


	}





	public Gender getGender() {


		return gender;


	}





	public void setGender(Gender gender) {


		this.gender = gender;


	}





	public Integer getId() {


		return id;


	}





	public void setId(Integer id) {


		this.id = id;


	}





}


 

3、在test包中添加PersonTest.java文件,内容如下:

package test;





import java.util.Date;





import javax.persistence.EntityManager;


import javax.persistence.EntityManagerFactory;


import javax.persistence.Persistence;





import junit.framework.TestCase;


import model.Person;





public class PersonTest extends TestCase {





	public void testSave() {


		EntityManagerFactory factory = Persistence


				.createEntityManagerFactory("mysql_jpa");


		EntityManager em = factory.createEntityManager();


		em.getTransaction().begin();


		Person p = new Person();


		p.setName("林某某");


		p.setBirthday(new Date());


		em.persist(p);


		em.getTransaction().commit();


		em.close();


		factory.close();


	}





	public void testFind() {


		EntityManagerFactory factory = Persistence


				.createEntityManagerFactory("mysql_jpa");


		EntityManager em = factory.createEntityManager();


		String jpql = "select count(p.id) from Person as p where 1=1 and p.name like ?1";


		System.out.println(em.createQuery(jpql).setParameter(1, "%林%").getSingleResult());


		em.close();


		factory.close();


	}


}


 4、右键PersonTest.java -> Run as -> Run configurations,在配置运行配置页中配置如下。

然后在以下VM arguments位置添加AspectJ的参数“-javaagent:${workspace_loc:JPA}/lib/openjpa-2.0.0-beta.jar”,如下图:

 

5、记录创建一个数据库,我是用test为名称。

6、运行Junit,输出消息如下:

 

78  mysql_jpa  INFO   [main] openjpa.Runtime - Starting OpenJPA 2.0.0-beta
156  mysql_jpa  INFO   [main] openjpa.jdbc.JDBC - Using dictionary class "org.apache.openjpa.jdbc.sql.MySQLDictionary".
1140  mysql_jpa  WARN   [main] openjpa.jdbc.Schema - Existing column "gender" on table "person" is incompatible with the same column in the given schema definition. Existing column:
Full Name: person.gender
Type: char
Size: 5
Default: man
Not Null: true
Given column:
Full Name: Person.gender
Type: varchar
Size: 255
Default: null
Not Null: true

16  mysql_jpa  INFO   [main] openjpa.Runtime - Starting OpenJPA 2.0.0-beta
16  mysql_jpa  INFO   [main] openjpa.jdbc.JDBC - Using dictionary class "org.apache.openjpa.jdbc.sql.MySQLDictionary".
78  mysql_jpa  WARN   [main] openjpa.jdbc.Schema - Existing column "gender" on table "person" is incompatible with the same column in the given schema definition. Existing column:
Full Name: person.gender
Type: char
Size: 5
Default: man
Not Null: true
Given column:
Full Name: Person.gender
Type: varchar
Size: 255
Default: null
Not Null: true

328  mysql_jpa  INFO   [main] openjpa.Runtime - Query "select count(p.id) from Person as p where 1=1 and p.name like ?1" is removed from cache excluded permanentlybecause this query returns a single value rather than a list. A query that returns single value can not be cached. .
5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

案例下载

  • 大小: 26.7 KB
  • 大小: 59.3 KB
  • 大小: 91.2 KB
分享到:
评论

相关推荐

    openjpa 源码 下载 帮助开发人员调试

    OpenJPA,全称Open Java Persistence API,是Apache软件基金会的一个开源项目,它实现了Java持久化API(Java Persistence API,JPA),为Java开发者提供了一种标准的方式来管理和持久化应用程序中的对象。...

    openjpa jar

    综上所述,Apache OpenJPA 2.2.0是Java开发者处理数据持久化问题的一个强大工具,它提供了一套全面的API和特性,有助于简化数据访问层的开发工作,并与其他Java EE组件良好协同。下载并使用提供的"apache-openjpa-...

    Apache OpenJPA 是 Jakarta Persistence API 3.0 规范的实现

    4. **缓存管理**:OpenJPA 包含了第一级和第二级缓存,可以提高数据读取效率,减少对数据库的访问。 5. **事务管理**:OpenJPA 提供了事务控制功能,符合 JTA(Java Transaction API)标准,支持不同级别的事务隔离...

    第十三章 开发JPA应用.pdf

    ### 第十三章 开发JPA应用 #### 13.1 JPA简介 **13.1.1 JPA概述** Java Persistence API (JPA) 是由Sun Microsystems为Java平台设计的一种标准对象关系映射(ORM)解决方案。JPA旨在为Java开发人员提供一种统一的...

    Java EE 6企业级应用开发教程:第10章 JPA.ppt

    【Java EE 6企业级应用开发教程:第10章 JPA】 Java Persistence API (JPA) 是Java EE 6中用于对象关系映射(ORM)的重要组件,它提供了一个标准的API,使得开发人员可以方便地将Java对象持久化到关系数据库中,...

    尚硅谷 jpa

    - **JPA 实现者**:除了 Hibernate 外,还有其他几个实现 JPA 的工具,例如 TopLink 和 OpenJPA。 #### 三、JPA 的优势 - **标准化**:由于 JPA 提供了统一的 API,这意味着基于 JPA 开发的应用可以在不同的 JPA ...

    helloworld-programmatic-2.0-m11.zip

    1. **OpenJPA**:OpenJPA是一个完整的ORM解决方案,它实现了JPA规范,允许开发者将Java对象模型映射到关系数据库,从而避免了传统的JDBC繁琐的SQL操作。OpenJPA提供了缓存管理、事务处理、查询优化等功能。 2. **...

    MyEclipse 6 Java EE 开发中文手册

    #### 第三章:开发第一个Java应用程序 **3.1 手工编写与运行Java程序** - **编写Java代码**:使用文本编辑器(如Notepad++)编写简单的Java程序。 - **编译Java程序**:通过命令行使用javac命令编译Java源代码。 -...

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

    `org.apache.openjpa`是Apache OpenJPA,一个开源的Java持久化项目,实现了Java Persistence API (JPA)。Spring通过OpenJPA支持ORM(对象关系映射),使得Java对象可以直接在数据库中存储和检索。 `org.apache....

    axelor-open-platform:用于业务应用程序开发的开源Java框架

    在描述中提到的"快速入门",是指为新用户提供的快速入门指南,通常包含如何安装、配置开发环境以及运行第一个示例应用等内容。这是开始使用Axelor Open Platform的第一步,通过这个过程,开发者可以快速理解框架的...

    Enterprise OSGi in Action

    第一部分:编程超越“Hello World” 1. OSGi与企业应用——为什么现在? - 介绍OSGi在企业Java应用中的作用和重要性。 - 讨论为什么现在是采用OSGi技术来构建企业应用的恰当时机。 2. 开发一个简单的基于OSGi的Web...

    TongWeb6.0用户使用手册.pdf

    Java EE 6 Web Profile是Java EE 6的一个子集,主要关注于Web应用的开发。相比于之前的版本,它引入了多项新特性,包括简化API、注解驱动的配置、支持RESTful Web服务等,这些都使得开发者能够更加专注于业务逻辑的...

    MyEclipse 6 java EE 开发中文手册

    3. **开发第一个Java应用程序** 4. **Eclipse基础概念与配置使用** 5. **利用MyEclipse Database Explorer进行数据库管理** ### 1. MyEclipse作为Java EE开发工具的概述 - **MyEclipse**是一款基于Eclipse平台的...

    J2EE实例源码

    在这个压缩包中,"第1章"可能是一个项目实例的开端,涵盖了基本的架构设置、数据库连接配置、用户登录模块的实现等内容。通过研究这些源代码,开发者可以学习如何在实际项目中应用上述技术,理解J2EE的组件协作方式...

    springboot034基于Springboot在线商城系统设计与开发毕业源码案例设计.zip

    SpringBoot是一个简化Spring应用初始搭建以及开发过程的框架,它预设了许多常见的配置,使得开发者可以更快地开始编写业务代码。作为毕业设计,这个项目可能是为了检验学生对SpringBoot的理解,以及在实际场景中解决...

    JSP基于SSM的IT培训课程销售购物网可升级SpringBoot毕业源码案例设计.zip

    它集成了大量常用的第三方库配置,如数据源、JPA、定时任务、缓存、消息、安保等,开发者只需少量配置即可创建一个独立运行的Spring应用。在原SSM项目的基础上升级到SpringBoot,可以进一步提升应用的启动速度,简化...

    JavaEE砺锋二阶段文件资源

    "砺锋"可能是一个训练机构或项目的名字,其第二阶段的学习着重于实践和深化JavaEE技术的理解。在这个阶段,你可能会接触到一系列的课程、代码示例、练习题以及可能的项目实战,这些都是为了帮助你更好地掌握企业级...

    JPA:关于JPA的一切

    - JPA是一个标准,具体的实现有Hibernate, EclipseLink, OpenJPA等。 - Hibernate是最广泛使用的JPA实现,拥有丰富的功能和优秀的性能。 综上所述,JPA通过提供一套完整的ORM解决方案,使得Java开发者可以更加...

Global site tag (gtag.js) - Google Analytics