`
jiangduxi
  • 浏览: 458878 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JPA学习之二(入门篇)

阅读更多
  简单总结下,JPA的入门。在学习JPA的时候运用参考Hibernate的知识来进行学习。

开发环境及其配置:
引用

  Eclipse3.5
  依赖包:
     antlr-2.7.6.jar
    c3p0-0.9.1.jar
    cglib-2.2.jar
    commons-collections-3.1.jar
    dom4j-1.6.1.jar
    ehcache-1.5.0.jar
    hibernate3.jar
    hibernate-annotations.jar
    hibernate-entirymanager.jar
    hibernate-jpa-2.0-api-1.0.0.Final.jar
    infinispan-core-4.0.0.FINAL.jar
    javassist-3.9.0.GA.jar
    jbosscache-core-3.2.1.GA.jar
    jta-1.1.jar
    oscache-2.1.jar
    proxool-0.8.3.jar
    slf4j-api-1.5.8.jar
    slf4j-nop-1.5.2.jar(注意这个包,一定要)
    swarmcache-1.0RC2.jar
数据库驱动包:
   mysql-connector-java-5.1.6-bin.jar
在src目录下建立META-INF,并且在该目录下建立一个persistence.xml文件

以上基本上就配置好开发环境了。
下面看看persistence.xml的文件
<persistence 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_1_0.xsd"
   version="1.0">
   <persistence-unit name="test" transaction-type="RESOURCE_LOCAL" >
      <properties>
	      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
	      <property name="hibernate.hbm2ddl.auto" value="update"/>
	      <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/> 
		<property name="hibernate.connection.url" value="jdbc:mysql://localhost/hibernate"/> 
		<property name="hibernate.connection.user" value="root"/> 
		<property name="hibernate.connection.password" value="123456"/> 
      </properties>
   </persistence-unit>
</persistence>

如果之前学过Hibernate的话,Properties里面的内容应该很清楚的,如果不清楚看了以上内容应该也很清楚。

这个 <persistence-unit name="test" transaction-type="RESOURCE_LOCAL" >就是体现JPA的东西了。什么意思呢?name这个先不说,待会看程序中的引用在来介绍。
transaction-type是事物类型。事物类型包括全局类型和本地类型。在不牵涉多个不同数据库的时候,一般使用本地事物。
下面给出一个Domain类
mport java.util.Date;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Lob;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

@Entity //申明是一个实体,也就是实体
@Table(name="test_Person") //申明实体对应数据表的名字
public class Person {

	private Integer id;
	private String name;
	private Date birthday;
	private Gender gender = Gender.MAN; //设置默认值
	private String info;//大文本
	private Byte[] file; //字节数据
	private String imagepath; //该字段不持久化
	
	
	

	public Person(){}
	public Person(String name){
		this.name = name;

	}
	
	@Id
	@GeneratedValue(strategy=GenerationType.AUTO)
	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	@Temporal(TemporalType.DATE)
	public Date getBirthday() {
		return birthday;
	}

	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	

	@Column(length=10,nullable=false)
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	@Transient //不在数据表中生成一个imagepath字段
	public String getImagepath() {
		return imagepath;
	}
	public void setImagepath(String imagepath) {
		this.imagepath = imagepath;
	}

	@Lob 
	@Basic(fetch=FetchType.LAZY)//进行懒加载
	public Byte[] getFile() {
		return file;
	}
	public void setFile(Byte[] file) {
		this.file = file;
	}

	@Lob
	public String getInfo() {
		return info;
	}
	public void setInfo(String info) {
		this.info = info;
	}
}

在实体类中@xx表示的是标签。
下面 看看test类
import java.util.List;

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

import org.junit.BeforeClass;
import org.junit.Test;

import cn.itcast.domain.Person;

public class PersonTest {

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		
	}
	
  @Test public void save(){
	   EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");//这里就是获取<persistence-unit name="test" >的name值
	   //-->sessionFactory ---> session --> begin事务
  	   EntityManager em = factory.createEntityManager();	  
  	   em.getTransaction().begin();//开始事务
 
	   em.persist(new Person("dave"));
	   em.getTransaction().commit();
	   em.close();
	   factory.close();
   }
  
   
  @Test public void getPerson(){
	   EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");//这里就是获取<persistence-unit name="test" >的name值

	   EntityManager em = factory.createEntityManager();
	   Person person = em.find(Person.class,1);
System.out.println(person.getName());
	   em.close();
	   factory.close();
   
   }
   
  
   @Test public void getPerson2(){
	   EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");");//这里就是获取<persistence-unit name="test" >的name值

	   EntityManager em = factory.createEntityManager();
	   Person person = em.getReference(Person.class,1); //延迟加载
System.out.println(person.getName());
	   em.close();
	   factory.close();
   
   }
   
   
        //新建状态
	    //托管状态 
	    //游离状态
	    //删除状态
   @Test public void UpdatePerson(){
	   EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");
  	   EntityManager em = factory.createEntityManager();	  
  	   em.getTransaction().begin();//开始事务
  	 Person person = em.find(Person.class,1);
	   person.setName("江都西");
	   em.getTransaction().commit();
	   em.close();
	   factory.close(); 
   }
   
   
   @Test public void UpdatePerson2(){
	   EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");
  	   EntityManager em = factory.createEntityManager();	  
  	   em.getTransaction().begin();//开始事务
  	   Person person = em.find(Person.class,1);
  	   
  	   em.clear();//把实体管理器中的所有实体变为游离状态
  	 person.setName("蒋笃淅");
	   em.merge(person); 
	   em.getTransaction().commit();
	   em.close();
	   factory.close(); 
   }
   
   
   @Test public void Delete(){
	   EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");
  	   EntityManager em = factory.createEntityManager();	  
  	   em.getTransaction().begin();//开始事务
  	   Person person = em.find(Person.class,1);
  	   em.remove(person);
	   em.getTransaction().commit();
	   em.close();
	   factory.close(); 
   }
   
   
   @Test public void query(){
	    EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");
	      EntityManager em = factory.createEntityManager();
	      Query query = em.createQuery("select o from Person o where o.id=?1");
	      query.setParameter(1, 2);
	     List<Person> person = query.getResultList();
	     for(Person p:person){
	 System.out.println(p.getName());
	     }
	    em.close();
	    factory.close(); 
	   }
	   
	   @Test public void deletequery(){
	    EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");
	      EntityManager em = factory.createEntityManager();
	    em.getTransaction().begin();//开始事务
	      Query query = em.createQuery("Delete  from Person o where o.id=?1");
	      query.setParameter(1, 3);
	       query.executeUpdate();
	      em.getTransaction().commit();
	    em.close();
	    factory.close(); 
	   }
	   
	   @Test public void queryUpdate(){
	    EntityManagerFactory factory = Persistence.createEntityManagerFactory("test");
	      EntityManager em = factory.createEntityManager();
	     em.getTransaction().begin();//开始事务
	      Query query = em.createQuery("Update Person o set o.name=:name where o.id=:id");
	      query.setParameter("name", "蒋笃淅");
	      query.setParameter("id", 3);
	       query.executeUpdate();
	    em.getTransaction().commit();
	    em.close();
	    factory.close(); 
	   } 
}

以上基本上能够构建一个JPA开发环境并且基本的操作能够了解。至于配置一对多,多对一,多对多等将在后续给出学习比较和实现。
分享到:
评论

相关推荐

    JPA入门(二)

    **JPA入门(二)** Java Persistence API(JPA)是Java平台上的一个标准,用于管理关系数据库中的数据。它是Java EE和Java SE环境中的一种ORM(对象关系映射)解决方案,使得开发人员可以使用面向对象的编程模型来...

    jpa相关资源收集

    这篇博客《JPA从入门到精通》的作者Kingpingping在iteye.com上分享了他的学习心得和经验,虽然具体的博客内容无法在这里详述,但我们可以根据JPA的基本概念和常见知识点进行深入探讨。 1. **JPA核心概念** - **...

    spring boot入门篇demo+ppt

    在"spring boot入门篇demo+ppt"中,我们可以期待学习以下核心知识点: 1. **Spring Boot基础知识**:了解Spring Boot的基本概念,包括其设计目标、主要特性以及与其他Spring框架的关系。 2. **起步依赖(Starter)...

    SpringBoot(入门篇)资料.rar

    在入门篇的学习中,我们会涉及以下几个核心知识点: 1. **自动配置**:SpringBoot的核心特性之一就是自动配置,它根据项目依赖来自动设置Bean。例如,如果你引入了数据访问相关的库,SpringBoot会自动配置数据源和...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    本书可作为《轻量级java ee企业应用实战》的姊妹篇,介绍了Java EE规范的三大主要规范JSF(JavaServer Faces)、EJB 3(Enterprise JavaBeans 3)和JPA(Java Persistence API),并以ejb 3+jpa为基础来构建Java EE...

    spring-data-jpa-guide:spring-data-jpa-guide,Spring Data JPA实现,SpringDataJpa解决方案

    Spring Data JPA 晋级提升篇:复杂场景实战用法与优化 Session与CompletableFuture的使用遇到的一些坑 SpringDataJpa之Hibernate5.0的Entity判断Dirty的过程 SpringDataJPA之Hibernate加载过程 高级用法学习资料: ...

    play_入门学习手册

    框架入门学习手册》 Play!框架是一款全栈式的Java Web应用框架,它提供了MVC架构、对象持久化、Groovy模板引擎等一整套构建现代Web应用的工具。作为一款纯Java框架,Play!允许开发者在不改变原有开发工具和类库的...

    最经典的hibernate教程_从入门到精通(全四篇)

    在【入门阶段】,你将学习到: 1. Hibernate概述:了解ORM的概念,以及Hibernate如何解决传统JDBC编程中的问题。 2. 安装与配置:设置开发环境,包括下载Hibernate库,配置Hibernate的配置文件(hibernate.cfg.xml)...

    Java学习材料(449篇)

    这个压缩包中的449篇文章,将为学习者提供一个全面而系统的Java学习路径,从入门到精通,逐步提升编程技能。每个主题都可能包含实例代码、解析和实践建议,帮助读者理论结合实践,真正掌握Java编程。对于那些希望在...

    《Java Web开发教程——入门与提高篇(JSP+Servlet)》附赠电子资料——框架基础及实例

    根据提供的文档信息,我们可以深入探讨该附赠电子资料中涵盖的主要知识点和技术框架,特别是针对Struts2、JSF、Hibernate、iBATIS以及JPA等内容。 ### 1. Java Web开发基础 #### 1.1 JSP (Java Server Pages) JSP...

    springboot学习记录

    入门篇(Basics) SpringBoot(一)_快速实战搭建项目 SpringBoot(二)_项目属性配置 SpringBoot(三)_controller的使用 SpringBoot(四)_SpringDataJPA的使用 SpringBoot(五)_表单验证 SpringBoot(六)_AOP统一处理请求 ...

    Spring Boot实战入门篇视频课程

    通过大量的实战编码进行讲解,课程以...第二章:springboot核心功能第三章:热部署的几种模式第四章:Web开发的各种技术第五章:数据访问层:spring data jpa、jdbctemplate、mybatis、redis第六章:异常相关的处理

    cxf入门学习

    这篇博文链接(由于实际链接不可用,此处不再提供具体内容)可能涵盖了CXF的基本概念、环境配置、快速入门示例等内容。 【标签】:“源码”意味着该压缩包可能包含CXF的部分源代码,供学习者查看和理解其内部工作...

    Java.Web整合开发王者归来.part1(共3部分)

    第1篇为入门篇,内容包括Java Web开发 概述等;第2篇为基础篇,内容包括Servlet技术、JSP技术、会话跟踪、过 滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的 使用、如何自定义标签、资源国际化...

    Java.Web整合开发王者归来.part2.rar (共3部分)

    第1篇为入门篇,内容包括Java Web开发 概述等;第2篇为基础篇,内容包括Servlet技术、JSP技术、会话跟踪、过 滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的 使用、如何自定义标签、资源国际化...

    Java.Web整合开发王者归来.part3.rar (共3部分)

    第1篇为入门篇,内容包括Java Web开发 概述等;第2篇为基础篇,内容包括Servlet技术、JSP技术、会话跟踪、过 滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的 使用、如何自定义标签、资源国际化...

    Springboot开发学习路径目录大纲.zip

    二、进阶篇 1. **Spring Boot Web 开发**:学习如何使用 Spring Boot 构建 RESTful API,理解 Controller、Model、View 模式。 2. **Thymeleaf 或者 Freemarker**:学习一种模板引擎,用于生成动态 HTML 页面。 3. *...

    Java.Web整合开发王者归来.part04.rar

    第1篇为入门篇,内容包括Java Web开发概述等;第2篇为基础篇,内容包括Servlet技术、JSP技术、会话跟踪、过滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、...

    Java.Web整合开发王者归来.part02.rar

    第1篇为入门篇,内容包括Java Web开发概述等;第2篇为基础篇,内容包括Servlet技术、JSP技术、会话跟踪、过滤器Filter、监听器Listener等;第3篇为高级篇,内容包括JSTL标签库的使用、如何自定义标签、资源国际化、...

Global site tag (gtag.js) - Google Analytics