`

在Java SE环境下使用JPA1.0(2)

    博客分类:
  • J2EE
阅读更多
2)   创建配置文件persistence.xml       在项目src文件夹下创建一个META-INF文件夹(有就不用创建了), META-INF文件夹下建一个persistence.xml文件, 内容为:
<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="1.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_1_0.xsd"> 
    <!-- transaction-type 可选值有: JTA、RESOURCE_LOCAL ; 
    在Java EE 环境下默认值为JTA, 在Java SE 环境下默认值为RESOURCE_LOCAL; 
    如果值为JTA的话, 则必须要指定<jta-data-source>的值 --> 
    <persistence-unit name="piscesPU" transaction-type="RESOURCE_LOCAL"> 
        <description>这是piscesPU持久化单元的一个简单描述</description> 
        <!-- 指明javax.persistence.spi.PersistenceProvider 的实现类, 一般来说该节点可以省略 --> 
        <provider>oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider</provider> 
        <!-- 在Java SE环境下必须定义所有的实体Entity类, 也可以用 <mapping-file> 或<jar-file> 节点代替 --> 
        <class>org.pisces.persist.UserInfo</class> 
<class>org.pisces.persist.Address</class> 
        <!-- 
        //可以定义jndi资源代替properties节点中的数据库配置, 
        //但是在调用Persistence.createEntityManagerFactory方法前必须保证此资源已经注入程序中. 
        <jta-data-source>jdbc/persist</jta-data-source> 
        -->   

        <!-- properties节点是用来定义各种JPA实现包所定义的属性配置 -->   
        <!-- 下面列举的是toplink实现包中可以配置的部分属性 --> 
        <properties>             
            <!-- 数据库连接配置, JDBC驱动 --> 
            <property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver"/>   
            <!-- 数据库连接配置,URL --> 
            <property name="toplink.jdbc.url" value="jdbc:mysql://localhost:3306/piscesdb"/> 
            <!-- 数据库连接配置, 用户名 --> 
            <property name="toplink.jdbc.user" value="root"/> 
            <!-- 数据库连接配置, 密码 --> 
            <property name="toplink.jdbc.password" value=""/>   
             
            <!-- 数据库连接池配置, 可写的连接池的最大连接数, 默认为 10 --> 
            <property name="toplink.jdbc.write-connections.max" value="10"/> 
            <!-- 数据库连接池配置, 可写的连接池的最大连接数, 默认为 5 --> 
            <property name="toplink.jdbc.write-connections.min" value="5"/> 
            <!-- 数据库连接池配置, 只读的连接池的最大连接数, 默认为 2 --> 
            <property name="toplink.jdbc.read-connections.max" value="2"/> 
            <!-- 数据库连接池配置, 只读的连接池的最大连接数, 默认为 2 --> 
            <property name="toplink.jdbc.read-connections.min" value="2"/> 
            <!-- 数据库连接池配置, 只读的连接池是否可以共享, 默认为 false --> 
            <property name="toplink.jdbc.read-connections.shared" value="false"/> 
            <!-- 是否绑定所有jdbc属性, 默认为 true --> 
            <property name="toplink.jdbc.bind-parameters" value="true"/> 
             
            <!-- 缓冲配置, 以下三个属性值为默认设置; 
             可以 default改为entity名(@Entity注释中的name属性值)或者类名来指定该entity的缓冲配置, 如: 
            <property name="toplink.cache.size.org.pisces.persist.UserInfo" value="2"/> 
            <property name="toplink.cache.type.org.pisces.persist.UserInfo" value="SoftWeak"/> 
            <property name="toplink.cache.shared.org.pisces.persist.UserInfo" value="true"/> 
            --> 
            <property name="toplink.cache.size.org.pisces.persist.UserInfo" value="2"/> 
            <!-- 缓冲配置, 缓冲大小, 默认为 1000 --> 
            <property name="toplink.cache.size.default" value="1000"/> 
            <!-- 缓冲配置, 缓冲类型, 可选值为{ Weak、SoftWeak、HardWeak、Full、NONE }, 不区分大小, 默认为 SoftWeak --> 
            <property name="toplink.cache.type.default" value="SoftWeak"/> 
            <!-- 缓冲配置, 是否共享缓冲, 默认为 false --> 
            <property name="toplink.cache.shared.default" value="false"/> 
             
            <!-- 日志配置, 日志级别, 默认值为java.util.logging.Level在系统中的值 --> 
            <property name="toplink.logging.level" value="SEVERE"/> 
            <!-- 日志配置, 日志是否记录当前时间, 默认为 true --> 
            <property name="toplink.logging.timestamp" value="true"/> 
            <!-- 日志配置, 日志是否记录当前线程名, 默认为 true --> 
            <property name="toplink.logging.thread" value="true"/> 
            <!-- 日志配置, 日志是否记录当前会话名, 默认为 true --> 
            <property name="toplink.logging.session" value="true"/> 
            <!-- 日志配置, 日志是否记录异常堆栈, 默认为 true --> 
            <property name="toplink.logging.exceptions" value="true"/> 
             
            <!-- 目标数据库类型, 截至目前为止可选值为{ Auto、Oracle、Attunity、Cloudscape、Database、DB2、DB2Mainframe 
             、 DBase、Derby、HSQL、Informix、JavaDB、MySQL4、PostgreSQL、SQLAnyWhere、 SQLServer、Sybase、TimesTen }, 
             不区分大小, 默认为 Auto, 即 TopLink自动匹配对应的数据库类型 --> 
            <property name="toplink.target-database" value="Auto"/> 
             
            <!-- 指定会话名称, 默认为系统自动产生唯一性名称--> 
            <property name="toplink.session-name" value="pisces_session_name"/> 
             
            <!-- 设置是否为weaving, 默认为 true --> 
            <property name="toplink.weaving" value="true"/> 
             
            <!-- 指定目标应用服务器类型, 截至目前为止可选值为{ None、OC4J_10_1_3、SunAS9 }(以后可能会扩展其他值的), 
             在 Java SE环境下值为 None, 不区分大小, 默认为 None --> 
            <property name="toplink.target-server" value="None"/> 
                         
            <!-- 指定实现 oracle.toplink.essentials.tools.sessionconfiguration.DescriptorCustomizer 的类名, 
             toplink.descriptor.customizer.  为前缀, 后面跟entity名(@Entity注释中的name属性值)或者entity类名, 
             该类中的customize方法在执行 了所有的属性(除了 toplink.session.customizer 之外)后运行, 如: 
            <property name="toplink.descriptor.customizer.org.pisces.persist.UserInfo" value="org.pisces.persist.SimpleDescriptorCustomizer"/> 
            <property name="toplink.descriptor.customizer.org.pisces.persist.Address" value="org.pisces.persist.SimpleDescriptorCustomizer"/> 
            --> 
            <!-- 指定实现 oracle.toplink.essentials.tools.sessionconfiguration.SessionCustomizer 的类名, 
            该类中的customize方法在执行了所有的属性后运行, 如: 
            <property name="toplink.session.customizer" value="org.pisces.persist.SimpleSessionCustomizer"/> 
            --> 
        </properties> 
    </persistence-unit> 
</persistence> 
3)   创建Entity的管理类       管理类SimpleManager是用来对实体Entity进行操作管理的. 
/* 
* SimpleManager.java 
*/ 

package org.pisces.persist; 

import java.util.List; 
import javax.persistence.EntityManager; 
import javax.persistence.EntityManagerFactory; 
import javax.persistence.Persistence; 

/** 
* 
* @author kamhung 
*/ 
publicclass SimpleManager { 
     
    private SimpleManager(){ 
        //do nothing 
    } 
     
    /** 
     * 删除用户id=6的数据 
     */ 
    publicstaticvoid delete() { 
        final EntityManagerFactory emf =Persistence.createEntityManagerFactory("piscesPU"); 
        final EntityManager em =emf.createEntityManager(); 
        //找不到数据的话这里会抛异常 
        UserInfo info =em.find(UserInfo.class, 6); 
        try { 
            em.getTransaction().begin(); 
            em.remove(info); 
            em.getTransaction().commit(); 
        } finally { 
            em.close(); 
        } 
    } 
     
    /** 
     * 修改用户id=6的数据 
     */ 
    publicstaticvoid update() { 
        final EntityManagerFactory emf =Persistence.createEntityManagerFactory("piscesPU"); 
        final EntityManager em =emf.createEntityManager(); 
        //找不到数据的话这里会抛异常 
        UserInfo info =em.find(UserInfo.class, 6); 
        info.setUserName("哈哈"); 
        info.getAddress().setStreet("坂田2"); 
        try { 
            em.getTransaction().begin(); 
            //自动将info更新到数据库 
            em.getTransaction().commit(); 
        } finally { 
            em.close(); 
        } 
    } 
     
    /** 
     * 查询所有用户数据 
     */ 
    publicstaticvoid query() { 
        final EntityManagerFactory emf =Persistence.createEntityManagerFactory("piscesPU"); 
        long s =System.currentTimeMillis(); 
        //数据库连接失败这里会抛出异常 
final EntityManager em =emf.createEntityManager(); 
        long e =System.currentTimeMillis(); 
        System.out.println("连接数据库耗时: "+ (e-s) +"毫秒" ); 
        //获取数据 
        @SuppressWarnings("unchecked") 
        List<UserInfo> list =em.createQuery("SELECT a FROM UserInfo a").getResultList(); 
        int i=0; 
        for(UserInfo info : list) { 
            System.out.println("第"+ (++i) +"个值为: "+ info); 
        } 
        em.close(); 
    } 
     
    /** 
     * 创建用户id=6的一条数据, 地址id=6 
     */ 
    publicstaticvoid create() { 
        final EntityManagerFactory emf =Persistence.createEntityManagerFactory("piscesPU"); 
        final EntityManager em =emf.createEntityManager(); 
         
        UserInfo info =new UserInfo(6); 
        info.setSex("male"); 
        info.setUserName("张某某"); 
        info.setBirthday(new java.sql.Timestamp(System.currentTimeMillis())); 
        Address naddr =new Address(6); 
        naddr.setCity("深圳"); 
        naddr.setStreet("坂田"); 
        naddr.setZip("518000"); 
        info.setAddress(naddr); 
         
        try { 
            em.getTransaction().begin(); 
            em.persist(info); 
            em.getTransaction().commit(); 
        } finally { 
            em.close(); 
        } 
    } 
} 

三、运行   1、  编写main函数:
/* 
* Main.java 
*/ 

package org.pisces; 

import org.pisces.persist.SimpleManager; 

/** 
* 
* @author kamhung 
*/ 
publicclass Main { 

    /** 
     * 主函数 
     */ 
    publicstaticvoid main(String[] args) throws Throwable { 
        SimpleManager.query(); 
        SimpleManager.create(); 
        System.out.println("新增一条数据后进行查询"); 
        SimpleManager.query(); 
        SimpleManager.update(); 
        System.out.println("修改一条数据后进行查询"); 
        SimpleManager.query(); 
        SimpleManager.delete(); 
        System.out.println("删除一条数据后进行查询"); 
        SimpleManager.query(); 
    } 
} 

2、 运行结果如下:
run:
连接数据库耗时: 1000毫秒
第1个值为: UserInfo[userid=1, userName='张金雄', sex='male', birthday=null, address=Address[addressid=1, city='深圳', street='坂田市场', zip='518001']]
第2个值为: UserInfo[userid=2, userName='李某某', sex='male', birthday=null, address=Address[addressid=2, city='深圳', street='坂田路口', zip='518002']]
第3个值为: UserInfo[userid=3, userName='王某某', sex='female', birthday=2006-08-1000:00:00.0, address
分享到:
评论

相关推荐

    jpa1.0中文手册

    JPA是一个Java社区规范(Java Community Process JSR 220),用于在Java EE和Java SE环境中管理对象和关系数据库之间的映射,以及管理数据库中的数据持久化操作。JPA为对象/关系映射(ORM)提供了标准化的方法,可以...

    JPA 标注 JPA标签手册

    它提供了一种对象关系映射方法,允许您以标准、可移植的方式声明性地定义如何将Java对象映射到关系数据库表,不仅在Java EE 5应用服务器内部,而且在Java标准版(Java SE)5应用程序外部都能工作。 在使用TopLink ...

    Java Persistence API 2.0-final-spec

    它是Java Enterprise Edition(Java EE)的一部分,同时也适用于Java Standard Edition(Java SE)环境。JPA 2.0是这个API的一个重要版本,引入了许多新特性和改进,旨在提供更强大的数据访问和管理能力。以下是对...

    Java EE 5 SDK

    - **Java Persistence API (JPA) 1.0**:替代了原先的Entity Beans,提供了更简单、灵活的ORM解决方案。 - **JavaServer Faces (JSF) 1.2**:增强的用户界面组件,改进了事件处理和渲染树。 - **Unified ...

    java_ee_sdk-8u1.zip

    3. **JSR 371 - MongoDB Java Driver for Java EE**:提供了在Java EE环境中与MongoDB数据库交互的标准API。 4. **JSR 374 - Java API for JSON Processing (JSON-P) 1.1** 和 **JSR 375 - Java API for JSON ...

    Java EE 7 Development with WildFly

    同时,本书还为开发者提供了从Java SE的安装到通过Eclipse环境开发Java EE 7应用程序的完整过程。 在本书中,读者会了解到Java EE 7的关键技术组件,比如: - JavaServer Faces (JSF) 2.2: 它是一种用于构建基于...

    Java EE 5.0 API文档(chm格式)

    这个版本的API是针对Java SE 5.0平台设计的,包含了诸如Servlet、JSP、EJB、JMS、JPA等关键组件的规范。 首先,Servlet是Java EE中的核心组件,用于处理HTTP请求。在Java EE 5.0中,Servlet 2.5规范引入了改进的...

    Java帮助文档-

    这份文档涵盖了Java SE 7的主要特性和API,包括新的多线程特性、文件系统API(NIO.2)、类型推断(钻石操作符)、动态语言支持( invokedynamic 指令)以及改进的垃圾收集机制。此外,它还详细解释了Java的核心类库...

    java 发展史

    1996年,Sun成立了JavaSoft部门,专注于Java技术产品的开发和支持,发布了JDK 1.0,包含了运行环境JRE和开发环境JDK,包括核心API、集成API等。但那时的库并不完善,尤其是AWT库。 1997年,JDK 1.1发布,引入了JIT...

    QCon 2009 beijing全球企业开发大会ppt:10.Java在企业级开发中的应用

    在Web 2.0的热点背景下,毛新生讨论了WebSphere如何支持脚本语言和敏捷特性,这使得Java平台能够更好地适应快速变化的市场需求。通过引入RESTful服务、脚本语言支持,IBM的平台增强了灵活性和响应速度。 3. **支持...

    java api文档 1.6中文版 1.7 1.8中文版 javaee1.5

    - **JPA (Java Persistence API) 1.0**:统一的持久化框架,支持ORM(对象关系映射)。 - **JSF (JavaServer Faces) 1.2**:Web用户界面组件模型,提供了声明式UI绑定和事件处理。 这些API文档详细介绍了每个类、...

    jre1.6安装版(含32位和64位)

    Java Runtime Environment(JRE)是Java程序运行所需的基础环境,它包含了Java虚拟机(Java ...不过,由于其年代久远,可能不支持最新的安全更新和特性,因此,在安全性要求较高的场景下,建议使用更新的Java版本。

    java常用知识 可以看看

    - **安全性**:Java具有内置的安全机制,能够有效防止恶意代码的执行,适合网络环境下的应用开发。 - **面向对象**:Java是一种完全的面向对象编程语言,支持封装、继承和多态等OOP特性,易于维护和扩展。 ### ...

    Open JDK有3种实现的compact JRE,数字越大,功能越丰富.docx

    2. **Java Standard Edition (Java SE)**:Java的标准版,它是Java Enterprise Edition (Java EE) 和 Java Micro Edition (Java ME) 的基础。Java SE包含了基础类库和运行时环境,是大多数开发者安装部署Java环境的...

    Java EE 6 Overview 新特性

    - **EJB 3.1 Lite**:Java EE 6 中的EJB 3.1 版本进一步简化了企业级组件的开发过程,特别是通过EJB 3.1 Lite 在Web Profile 中的出现,使得开发者能够在不牺牲性能的情况下轻松地集成业务逻辑。 - **Servlet 3.0**...

    编程语言发展史:Java语言的出现和发展

    + 现代化发展(2011年-至今):发布第七个标准版(Java SE 7)、第八个标准版(Java SE 8) 三、Java语言的特点和优势 * 跨平台性:Java语言的编译器将源代码编译成字节码,可以在任何支持Java虚拟机(JVM)的...

    Java EE 6 标准与规范(中文版)

    - **Applet**:尽管不是主流,但在某些场景下仍被使用。 - **客户端应用程序**:包括Swing/AWT等GUI应用。 **1.4 容器** - **Web 容器**:负责托管Servlets、JSP页面等Web组件。 - **EJB 容器**:管理EJB组件的...

    J2EE_5_Libraries

    Java Enterprise Edition (Java EE) 是一个用于开发企业级应用程序的平台,它基于Java Standard Edition (Java SE),并提供了额外的功能和服务,以支持分布式、多层的应用程序。Java EE 5是这个平台的一个重要版本,...

    Addison.Wesley.The.Java.EE.6.Tutorial.Basic.Concepts.4th.Edition.Aug.2010

    1. **Java EE概述**:介绍Java EE 6平台的基本架构和设计理念,包括它如何提供服务以支持Web应用程序的开发,以及与Java SE(标准版)的关系。 2. **Web组件**:讲解Servlet和JSP(JavaServer Pages)的基础知识,...

    J2EE API帮助文档

    - **轻量级EJB**: EJB 3.0的Session Beans和Message-Driven Beans不再需要EJB容器,可以直接运行在普通的Java SE环境中。 - **Web服务增强**: 支持WS-I Basic Profile 1.1,增强了Web服务的互操作性,并引入了WS-...

Global site tag (gtag.js) - Google Analytics