JPA(二):HellWord工程

使用JPA持久化对象的操作步骤:

1)创建persistence.xml,在这个文件中配置持久化单元:

--- 需要指定跟哪个数据库进行交互;

--- 需要指定JPA使用哪个持久化的框架以及配置该框架的基本属性。

2)创建实体类,使用annotation来描述实体类跟数据库表之间的映射关系。

3)使用JPA API完成数据增加、删除、修改和查询擦操作:

--- 创建EntityManagerFactory(对应hibernate中的SessionFactory)

--- 创建EntityManager(对应hibernate中的Session)

4)JPA规范要求在类路径的MATA-INF目录下放置persistence.xml,文件的名字是固定的。

演示HelloWord工程:

1)创建jpa project

之后点击“Finish”按钮完成工程创建。

工程创建好后,会发现在src下的META-INF文件夹下包含一个persistence.xml文件,该文件是用来配置jpa相关信息的。

2)导入依赖包:

a、从hibernate官网下载hibernate开发包:hibernate-release-5.3.0.Final.zip,把解压后的文件中的数据拷贝到工程下新建的lib文件夹中:

备注:把上图中选中的两个文件夹下的所有包拷贝到lib中

b、导入mysql驱动包:

c、右键lib文件夹下所有jar文件,弹出菜单中选择Build Path-> Add to Build Path

3)在src下添加Person实体类

package com.dxsoft.jpa.helloword;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "jpa_person")
public class Person {
    private Integer id;
    private String fullName;
    private int age;

    public Person() {

    }

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

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

    @Column(name = "full_name")
    public String getFullName() {
        return fullName;
    }

    public void setFullName(String fullName) {
        this.fullName = fullName;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person [id=" + id + ", fullName=" + fullName + ", age=" + age + "]";
    }

}

备注:

1)@Id注解为唯一主键;

2)@GeneratedValue(strategy = GenerationType.AUTO)注解自增,并制定自增方式。JPA提供了四种主键生成策略,其被定义在枚举类GenerationType中,包括GenerationType.TABLE,GenerationType.SEQUENCE,GenerationType.IDENTITY和GenerationType.AUTO;

3)@Column(name="")可以重新定义数据库对应字段的名字,如果类中定义属性字段和数据不一样时需要定义,否则可省略。

4)修改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="Jpa-helloword"
        transaction-type="RESOURCE_LOCAL">
        <!-- 配置使用什么 ORM 产品来作为 JPA 的实现 -->
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <!-- 添加持久化类 -->
        <class>com.dxsoft.jpa.helloword.Person</class>
        <properties>
            <!-- 数据库的相关配置 -->
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://127.0.0.1:3306/jpa" />
            <property name="javax.persistence.jdbc.user" value="root" />
            <property name="javax.persistence.jdbc.password" value="root" />
            <!-- 指定方言
            MySQL                org.hibernate.dialect.MySQLDialect
            MySQL with InnoDB    org.hibernate.dialect.MySQLInnoDBDialect
            MySQL with MyISAM    org.hibernate.dialect.MySQLMyISAMDialect
            MySQL5                org.hibernate.dialect.MySQL5Dialect
            MySQL5 with InnoDB    org.hibernate.dialect.MySQL5InnoDBDialect
            -->
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
            <property name="hibernate.show_sql" value="true" />
            <property name="hibernate.format_sql" value="true" />
            <!--
            create      :每次加载hibernate时都会删除上一次的生成的表,然后根据你的model类再重新来生成新表,哪怕两次没有任何改变也要这样执行,这就是导致数据库表数据丢失的一个重要原因。<br>
            create-drop :每次加载hibernate时根据model类生成表,但是sessionFactory一关闭,表就自动删除。<br>
            update      :最常用的属性,第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。<br>
            validate    :每次加载hibernate时,验证创建数据库表结构,只会和数据库中的表进行比较,不会创建新表,但是会插入新值。 <br>
            -->
            <property name="hibernate.hbm2ddl.auto" value="update" />
        </properties>
    </persistence-unit>
</persistence>

5)添加测试类:

package com.dxsoft.jpa.helloword;

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

public class Client {
    public static void main(String[] args) {
        // 1.创建EntityManagerFactory
        String persistenceUnitName = "Jpa-helloword";
        EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(persistenceUnitName);
        // 2.创建EntityManager
        EntityManager entityManager = entityManagerFactory.createEntityManager();
        // 3.开始事务
        EntityTransaction entityTransaction = entityManager.getTransaction();
        entityTransaction.begin();
        // 4.进行持久化操作
        Person person = new Person();
        person.setAge(31);
        person.setFullName("tommmy duan");

        entityManager.persist(person);
        // 5.提交事务
        entityTransaction.commit();

        // 6.关闭EntityManager
        entityManager.close();
        // 7.关闭EnityManagerFactory
        entityManagerFactory.close();

        System.out.println("complete..");
    }
}

执行打印信息如下:

INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.[email protected]1950e8a6] for (non-JTA) DDL execution was not in auto-commit mode; the Connection ‘local transaction‘ will be committed and the Connection will be set into auto-commit mode.
Hibernate: 

    create table hibernate_sequence (
       next_val bigint
    ) engine=InnoDB
Hibernate: 

    insert into hibernate_sequence values ( 1 )
Hibernate: 

    create table jpa_person (
       id integer not null,
        age integer not null,
        full_name varchar(255),
        primary key (id)
    ) engine=InnoDB
Wed May 23 15:41:34 CST 2018 WARN: Establishing SSL connection without server‘s identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn‘t set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to ‘false‘. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
Hibernate:
    select
        next_val as id_val
    from
        hibernate_sequence for update

Hibernate:
    update
        hibernate_sequence
    set
        next_val= ?
    where
        next_val=?
Hibernate:
    insert
    into
        jpa_person
        (age, full_name, id)
    values
        (?, ?, ?)
五月 23, 2018 3:41:34 下午 org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl stop
INFO: HHH10001008: Cleaning up connection pool [jdbc:mysql://127.0.0.1:3306/jpa]
complete..

原文地址:https://www.cnblogs.com/yy3b2007com/p/9078123.html

时间: 2024-10-28 21:30:37

JPA(二):HellWord工程的相关文章

Android转载二:工程目录详解

REF:http://blog.csdn.net/dianfusoft/article/details/7422540       可以看出这个工程由src,gen,Android2.3.3 jar包,assets,bin,res,AndroidManifest.xml,proguard.cfg,project.properties这几个文件(夹)组成,具体作用如下所示: 下面分层次详解几个重要的文件(夹) ● src文件夹 展开这个文件夹如下所示 可以看出,这个文件夹主要用来存放源文件 ●ge

Zigbee系列 学习笔记二(工程文件分析)

以下为转载内容,因为学习Zigbee,稍作整理了一下,希望作者不要怪罪. 一.下载ZStack-CC2530.2.5.1a 网址http://download.csdn.net/detail/thanksgining/8328925 下载后: 二.安装ZStack-CC2530.2.5.1a 安装后: Components:顾名思义这个是库文件,里面放了一些ZDO,driver,hal,zcl等库代码 Documents:这个不用说大家都知道是放TI的开发文档的,你能够把这些文档一个个看懂,你对

Orleans学习总结(二)--创建工程

通过第一篇Orleans学习总结(一)--入门认识我们大致知道知道是干嘛的了,下面我们来动手造一个传说中的神秘的高并发集群Orleans程序. 一.创建四个C#工程 1.IGrain工程,用来定义各种业务逻辑对象的接口的工程 1)创建一个Class Library工程 2)安装Olreans依赖PM> Install-Package Microsoft.Orleans.OrleansCodeGenerator.Build或者右键Refrerence->Manage NuGet Packages

Android入门(二):Android工程目录结构

首先我们来看看Android工程的目录结构,如下图: 下面我们来看看每个文件夹都是用来做什么的? 1.src:这个不用多说,它就是保存Java源文件的目录: 2.gen:该文件夹用来保存自动生成的R.java文件: 3.Android***:Android应用程序所依赖的包: 4.assets:存放资源文件(如mp3.video.图片等),不会在R.java中生成id: 5.bin:存放生成的目标.apk文件和Dalvik的可执行性文件.dex: 6.res:存放Android工程的各种资源文件

&lt;Spring Data JPA&gt;二 Spring Data Jpa

1.pom依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4

Theos 工程

一.tweak 工程 1.创建步骤 a) terminal cd 到想要存放项目的目录下 b) 按图步骤完成即可 二.工程文件描述 1.control 记录 deb 包管理系统所需的基本信息. 2.appInfo.plist 描述 tweak 的作用范围,以下可混合使用 a)  bubdles,tweak 控制的应用 bundle id b) classed, tweak 控制的 class c) executables tweak 控制的 注意:如果 Filter 下的类别超过一个,需要加上

restclient 访问 springmvc java工程接口

一.tomcat和nginx 配置 /etc/nginx/conf.d/default.conf location /nsx{ proxy_pass http://nsx; proxy_connect_timeout 30s; proxy_read_timeout 30s; proxy_send_timeout 30s; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } upstream nsx{ ip

1. MyBatis系列:第一个MyBatis工程

目录 1.准备就绪 开发环境 工程目录结构 数据表结构 2.工程代码 MyBatisConfig.xml 配置文件 User 实体模型类 User.xml 映射文件 单元测试 3.附录 4.相关资料 1.准备就绪 开发环境 Eclipse Java EE: Luna Release (4.4.0) JDK: java v 1.8.x MyBatis:3.2.8 MySQL:5.6.15 MyBatis 3.2.8 依赖的 jar 包可以在  http://mvnrepository.com/ar

cocos2d-x 3.2 启动过程分析 - win32 与 android 平台(二)

上篇文章试着分析了 cocos2d-x 3.2 在 win32平台下的启动过程.今天我们继续探寻,看看 Android 平台下,引擎又是如何启动的. 预备知识: 1. 对 jni ( java 调用 c++ 动态库) 技术略微了解 2. 大致了解 Android 应用的开发过程. (不用太多) 一.入口 有过 Android 开发经验的朋友应该都清楚,普通的 Android 应用,其入口都是 Application 或它的子类类型,再看需要界面与否选择实现 Activity 或者 Service