概述
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,全称Open Java Persistence API,是Apache软件基金会的一个开源项目,它实现了Java持久化API(Java Persistence API,JPA),为Java开发者提供了一种标准的方式来管理和持久化应用程序中的对象。...
综上所述,Apache OpenJPA 2.2.0是Java开发者处理数据持久化问题的一个强大工具,它提供了一套全面的API和特性,有助于简化数据访问层的开发工作,并与其他Java EE组件良好协同。下载并使用提供的"apache-openjpa-...
4. **缓存管理**:OpenJPA 包含了第一级和第二级缓存,可以提高数据读取效率,减少对数据库的访问。 5. **事务管理**:OpenJPA 提供了事务控制功能,符合 JTA(Java Transaction API)标准,支持不同级别的事务隔离...
### 第十三章 开发JPA应用 #### 13.1 JPA简介 **13.1.1 JPA概述** Java Persistence API (JPA) 是由Sun Microsystems为Java平台设计的一种标准对象关系映射(ORM)解决方案。JPA旨在为Java开发人员提供一种统一的...
【Java EE 6企业级应用开发教程:第10章 JPA】 Java Persistence API (JPA) 是Java EE 6中用于对象关系映射(ORM)的重要组件,它提供了一个标准的API,使得开发人员可以方便地将Java对象持久化到关系数据库中,...
- **JPA 实现者**:除了 Hibernate 外,还有其他几个实现 JPA 的工具,例如 TopLink 和 OpenJPA。 #### 三、JPA 的优势 - **标准化**:由于 JPA 提供了统一的 API,这意味着基于 JPA 开发的应用可以在不同的 JPA ...
1. **OpenJPA**:OpenJPA是一个完整的ORM解决方案,它实现了JPA规范,允许开发者将Java对象模型映射到关系数据库,从而避免了传统的JDBC繁琐的SQL操作。OpenJPA提供了缓存管理、事务处理、查询优化等功能。 2. **...
#### 第三章:开发第一个Java应用程序 **3.1 手工编写与运行Java程序** - **编写Java代码**:使用文本编辑器(如Notepad++)编写简单的Java程序。 - **编译Java程序**:通过命令行使用javac命令编译Java源代码。 -...
`org.apache.openjpa`是Apache OpenJPA,一个开源的Java持久化项目,实现了Java Persistence API (JPA)。Spring通过OpenJPA支持ORM(对象关系映射),使得Java对象可以直接在数据库中存储和检索。 `org.apache....
在描述中提到的"快速入门",是指为新用户提供的快速入门指南,通常包含如何安装、配置开发环境以及运行第一个示例应用等内容。这是开始使用Axelor Open Platform的第一步,通过这个过程,开发者可以快速理解框架的...
第一部分:编程超越“Hello World” 1. OSGi与企业应用——为什么现在? - 介绍OSGi在企业Java应用中的作用和重要性。 - 讨论为什么现在是采用OSGi技术来构建企业应用的恰当时机。 2. 开发一个简单的基于OSGi的Web...
Java EE 6 Web Profile是Java EE 6的一个子集,主要关注于Web应用的开发。相比于之前的版本,它引入了多项新特性,包括简化API、注解驱动的配置、支持RESTful Web服务等,这些都使得开发者能够更加专注于业务逻辑的...
3. **开发第一个Java应用程序** 4. **Eclipse基础概念与配置使用** 5. **利用MyEclipse Database Explorer进行数据库管理** ### 1. MyEclipse作为Java EE开发工具的概述 - **MyEclipse**是一款基于Eclipse平台的...
在这个压缩包中,"第1章"可能是一个项目实例的开端,涵盖了基本的架构设置、数据库连接配置、用户登录模块的实现等内容。通过研究这些源代码,开发者可以学习如何在实际项目中应用上述技术,理解J2EE的组件协作方式...
SpringBoot是一个简化Spring应用初始搭建以及开发过程的框架,它预设了许多常见的配置,使得开发者可以更快地开始编写业务代码。作为毕业设计,这个项目可能是为了检验学生对SpringBoot的理解,以及在实际场景中解决...
它集成了大量常用的第三方库配置,如数据源、JPA、定时任务、缓存、消息、安保等,开发者只需少量配置即可创建一个独立运行的Spring应用。在原SSM项目的基础上升级到SpringBoot,可以进一步提升应用的启动速度,简化...
"砺锋"可能是一个训练机构或项目的名字,其第二阶段的学习着重于实践和深化JavaEE技术的理解。在这个阶段,你可能会接触到一系列的课程、代码示例、练习题以及可能的项目实战,这些都是为了帮助你更好地掌握企业级...
- JPA是一个标准,具体的实现有Hibernate, EclipseLink, OpenJPA等。 - Hibernate是最广泛使用的JPA实现,拥有丰富的功能和优秀的性能。 综上所述,JPA通过提供一套完整的ORM解决方案,使得Java开发者可以更加...