`
forge
  • 浏览: 23141 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一.初识JPA2.0

    博客分类:
  • JPA
阅读更多

JPA概述
JPA是独立于SQL ,基于JDBC之上的抽象层。所有类和注解都在javax.persistence包中。


JPA主要组件:
1.ORM,对象和数据库数据之间的映射
2.An entity manager API执行数据库相关操作,CRUD(Create, Read, Update, Delete)
3.JPQL(The Java Persistence Query Language) 用面向对象的查询语言查询数据
4.事务和锁机制
5.回调(Callbacks)和监听器(listeners)定制持久化生命周期逻辑


JPA2.0新特征:
1.基本数据类型(String, Integer, etc.)的集合和嵌入对象的集合可以映射到不同的表中。之前,你仅能映射实体的集合。
2.Map支持被扩展(Map映射),maps的keys和values可以是基本类型,实体,嵌入对象。
3.加入@OrderColumn注解维护持久化排序。
4.关系映射中父对象被移除,子对象被移除(Orphan removal的支持)。
5.悲观锁的支持。
6.引进新的Criteria API,基于面向对象方式的查询。
7.JPQL语法支持case expressions。
8.嵌入对象可以嵌入其他嵌入对象,并与之关系映射。
9.dot(.)导航语法被扩展,处理关系映射中嵌入对象,嵌入对象的嵌入对象。
10.新的缓存API被加入。
11.persistence.xml文件中一些属性被标准化,增加程序的可移植性。

 

我们先看一个简单的例子。

我的运行环境是 eclipse+mvn


1. maven 插件中添加附件archetype-catalog.zip中的 local Archetype

 

 

2. 创建 maven project Filter weld ,选择 Artifact Id jboss-javaee6-webapp, archetype 可以快速创建 JavaEE6 项目,更多信息: http://seamframework.org/Documentation/CDIQuickstartForMavenUsers

 

 

3 . 填写 maven 坐标

 

 

4. 我们现在删除一些我们现在不需要的代码,删除org.example.myproject.controller,org.example.myproject.data,org.example.myproject.rest包,删除org.example.myproject.model.Member类,org.example.myproject.test.MemberRegistrationTest测试类。



5. 好了,现在我们需要创建我们自己的实体类

package org.example.myproject.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.NamedQuery;

@Entity
@NamedQuery(name="findAllBooks",query="select b from Book b")
public class Book {
	@Id @GeneratedValue
	private Long id;
	@Column(nullable=false)
	private String title;
	private Float price;
	@Column(length=2000)
	private String description;
	private String isbn;
	private Integer nbOfPage;
	private Boolean illustrations;
	
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getTitle() {
		return title;
	}
	public void setTitle(String title) {
		this.title = title;
	}
	public Float getPrice() {
		return price;
	}
	public void setPrice(Float price) {
		this.price = price;
	}
	public String getDescription() {
		return description;
	}
	public void setDescription(String description) {
		this.description = description;
	}
	public String getIsbn() {
		return isbn;
	}
	public void setIsbn(String isbn) {
		this.isbn = isbn;
	}
	public Integer getNbOfPage() {
		return nbOfPage;
	}
	public void setNbOfPage(Integer nbOfPage) {
		this.nbOfPage = nbOfPage;
	}
	public Boolean getIllustrations() {
		return illustrations;
	}
	public void setIllustrations(Boolean illustrations) {
		this.illustrations = illustrations;
	}
	
}
 

还有我们的测试代码:

package org.example.myproject.test;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

import java.sql.SQLException;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;

import org.example.myproject.model.Book;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

public class BookTest {
	private static EntityManagerFactory emf;
	private static EntityManager em;
	private static EntityTransaction tx;

	@BeforeClass
	public static void initEntityManager() throws Exception {
		emf = Persistence.createEntityManagerFactory("primary");
		em = emf.createEntityManager();
	}

	@AfterClass
	public static void closeEntityManager() throws SQLException {
		em.close();
		emf.close();
	}

	@Before
	public void initTransaction() {
		tx = em.getTransaction();
	}

	@Test
	public void shouldCreateABook() throws Exception {
		// Creates an instance of book
		assertNotNull("EMF should not be null", emf);
		Book book = new Book();
		book.setTitle("The Hitchhiker's Guide to the Galaxy");
		book.setPrice(12.5F);
		book.setDescription("Science fiction comedy book");
		book.setIsbn("1-84023-742-2");
		book.setNbOfPage(354);
		book.setIllustrations(false);
		// Persists the book to the database
		tx.begin();
		em.persist(book);
		tx.commit();
		assertNotNull("ID should not be null", book.getId());
		// Retrieves all the books from the database
		List<Book> books = em.createNamedQuery("findAllBooks").getResultList();
		assertEquals(1, books.size());
	}
}

 

 

6. 我们现在要修改 persistence.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://java.sun.com/xml/ns/persistence
        http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="primary">
        <!-- You can force a non-default JPA provider using one of these declarations -->
        <!--
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> -->
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>org.example.myproject.model.Book</class>

        <!-- jdbc/__default is the default data source in GlassFish -->
        <!-- A matching data source is added to JBoss AS by deploying the project file default-ds.xml 
        <jta-data-source>jdbc/__default</jta-data-source>-->
        <properties>
            <!-- Properties for Hibernate (default provider for JBoss AS) -->
            <property name="hibernate.hbm2ddl.auto" value="create" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="false" />

            <!-- Properties for EclipseLink (default provider for GlassFish) -->
            <property name="eclipselink.ddl-generation" value="drop-and-create-tables" />
            <property name="eclipselink.logging.level" value="FINE" />
            
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
			<property name="javax.persistence.jdbc.url"
				value="jdbc:mysql://localhost:3306/javaee6" />
			<property name="javax.persistence.jdbc.user" value="root" />
			<property name="javax.persistence.jdbc.password" value="" />
        </properties>
    </persistence-unit>
</persistence>

 

src/main/resources 下的 META-INF 目录 ( 包含 persistence.xml) 复制到 src/test/resources

目录下

记得要创建数据库 javaee6 ,改写你自己的用户名密码


7. 下一步就是要修改 pom.xml 了,添加依赖包坐标

		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-commons-annotations</artifactId>
			<version>3.2.0.Final</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-core</artifactId>
			<version>3.6.0.Final</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-entitymanager</artifactId>
			<version>3.6.0.Final</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.5.6</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.16</version>
			<scope>test</scope>
		</dependency>

 并修改profile id为default的跳过测试配置值为false

 

					<plugin>
						<artifactId>maven-surefire-plugin</artifactId>
						<version>2.4.3</version>
						<configuration>
							<skip>false</skip>
						</configuration>
					</plugin>

 

8. 运行 maven test 。就可以看到数据库中已经多了一张 book 表,并插入了值。

 

 

  • 大小: 56.9 KB
  • 大小: 39.3 KB
  • 大小: 32.7 KB
分享到:
评论
1 楼 拓子轩 2016-06-22  

相关推荐

    JPA 2.0jar包及JPA2.0源代码

    在这个`persistence-2.0-all.zip`压缩包中,包含了JPA 2.0的核心库`javax.persistence_2.0.0.jar`,源代码,JavaDoc文档,以及一个schema文件,这些都是开发者深入了解和使用JPA 2.0的重要资源。 **JPA 2.0 的核心...

    jpa2.0 英文手册

    - JPA 2.0:指的是Java Persistence API的2.0版本,这是一个Java持久化规范,定义了如何将Java对象映射到数据库表中的数据,以及如何管理这些映射。JPA是作为Java EE的一部分而定义的,但也可以在Java SE环境中使用...

    JPA2.0高级教程

    JPA2.0作为JPA的一个重大版本更新,在原有基础上增加了许多新功能和改进,使得数据持久化变得更加简单高效。 - **新特性**: - **支持JSR-303验证注解**:允许在实体类上直接使用JSR-303的验证注解,如`@NotNull`...

    jpa2.0 规范文档.zip

    Java persistence api, jpa 2.0最终版使用规范, 资源是压缩包, 下载后解压缩文件,然后重命名persistence-2_0-final-spec文件,添加后缀 .pdf 原始文件的类型时pdf的

    jpa2.0jar包

    JPA 2.0是这个标准的一个版本,引入了更多特性和改进,使得ORM更加灵活和高效。 **JPA的基本概念** 1. **实体(Entity)**: 在JPA中,实体代表数据库中的表,它们是应用程序中的业务对象。实体类通常会使用`@...

    Spring Data JPA 2.0 标准模板

    **Spring Data JPA 2.0 标准模板详解** Spring Data JPA 是 Spring 框架的一个子项目,它简化了数据访问层的开发,提供了对 Java Persistence API(JPA)的高度抽象和自动化。在 Spring Data JPA 2.0 版本中,它...

    jpa 2.0 jar 包 下载

    jpa 2.0 jar 包 下载 jpa 2.0 jar 包 下载 jpa 2.0 jar 包 下载

    spring3.0.5与JPA2.0(hibernate3.6)的集成详细说明

    JPA 2.0作为ORM框架,提供了一种统一的API来管理Java对象与数据库之间的映射。它在JPA 1.0的基础上增加了更多的功能,如 Criteria API、JPQL(Java Persistence Query Language)增强、多租户支持等,提高了开发者的...

    JPA2.0 javax.persistence src 源码

    JPA 2.0是该规范的一个重要版本,它在JPA 1.0的基础上引入了许多增强功能,提高了开发人员的生产力和数据库操作的灵活性。`javax.persistence`包是JPA的核心API,包含了一系列接口和注解,用于定义实体、查询语言...

    2018.02.Spring Boot 2.0 Cookbook 2nd

    《2018.02.Spring Boot 2.0 Cookbook 2nd》是一本专注于Spring Boot 2.0开发的实战指南,旨在帮助开发者更好地理解和应用这一强大的Java框架。Spring Boot以其快速启动、简化配置以及丰富的生态系统,在企业级开发中...

    hibernate-jpa-2.0-api-1.0.1.Final-sources.jar

    hibernate-jpa-2.0-api-1.0.1.Final-sources.jar hibernate jpa 源代码

    openjpa2.0英文版API

    **OpenJPA 2.0** 是一款基于 Java Persistence API (JPA) 的开源持久层框架,用于实现对象关系映射(ORM)。它提供了一种标准化的方式将 Java 对象与数据库表进行映射,并支持对数据进行查询和更新操作。OpenJPA 2.0...

    hibernate-jpa-2.0-api-1.0.1.Final.jar

    hibernate-jpa-2.0-api-1.0.1.Final.jar

    JPA2.0-Spring2.x-Struts2注解

    主要讲述JPA2.0规范,Struct2 Spring注解等技术

    JSF1.2+JPA2.0+Spring3.1整合开发

    **JSF 1.2 + JPA 2.0 + Spring 3.1 整合开发详解** 在Java企业级应用开发中,JSF(JavaServer Faces)、JPA(Java Persistence API)和Spring框架的结合使用是常见的技术栈。本文将深入探讨如何将这三个组件整合在...

    Spring3+Struts2+JPA2.0

    标题 "Spring3+Struts2+JPA2.0" 提到的是一个经典的Java企业级应用开发框架组合,主要用于构建高效、可维护性高的Web应用程序。这个组合将Spring的依赖注入和事务管理、Struts2的MVC架构以及JPA(Java Persistence ...

    com.springsource.org.apache.openjpa-1.1.0.jar

    jar包,官方版本,自测可用

    com.springsource.org.apache.openjpa.jdbc-sources-1.0.2.jar

    jar包,官方版本,自测可用

    JPA2.0(hibernate-3.5.2实现)jar文件整理上传

    antlr-2.7.6.jar, cglib-2.2.jar, commons-collections-3.1.jar, ...hibernate-jpa-2.0-api-1.0.0.Final.jar, javassist-3.9.0.GA.jar, jta-1.1.jar, slf4j-api-1.6.1.jar, slf4j-log4j12-1.6.1.jar

Global site tag (gtag.js) - Google Analytics