JPA入门--(二)JPA入门案例:实现客户的保存操作

jpa入门案例:实现客户的保存操作

一.  首先新建一个空项目,命名为:ORM。

JPA入门--(二)JPA入门案例:实现客户的保存操作

JPA入门--(二)JPA入门案例:实现客户的保存操作

二.创建一个maven项目。

JPA入门--(二)JPA入门案例:实现客户的保存操作

JPA入门--(二)JPA入门案例:实现客户的保存操作

JPA入门--(二)JPA入门案例:实现客户的保存操作

三.创建数据库表和客户实体类:

(1)创建数据库和数据表:

/*创建客户表*/

CREATE TABLE t_customer (

      cust_id bigint(32) NOT NULL AUTO_INCREMENT COMMENT '客户编号(主键)',

      cust_name varchar(32) NOT NULL COMMENT '客户名称(公司名称)',

      cust_source varchar(32) DEFAULT NULL COMMENT '客户信息来源',

      cust_industry varchar(32) DEFAULT NULL COMMENT '客户所属行业',

      cust_level varchar(32) DEFAULT NULL COMMENT '客户级别',

      cust_address varchar(128) DEFAULT NULL COMMENT '客户联系地址',

      cust_phone varchar(64) DEFAULT NULL COMMENT '客户联系电话',

      PRIMARY KEY (`cust_id`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

(2)创建客户实体类:

package com.hlx.domain;

  

import java.io.Serializable;

  

public class Customer1 implements Serializable {

  

    private Long custId;

    private String custName;

    private String custSource;

    private String custIndustry;

    private String custLevel;

    private String custAddress;

    private String custPhone;

  

    public Long getCustId() {

        return custId;

    }

    public void setCustId(Long custId) {

        this.custId = custId;

    }

    public String getCustName() {

        return custName;

    }

    public void setCustName(String custName) {

        this.custName = custName;

    }

    public String getCustSource() {

        return custSource;

    }

    public void setCustSource(String custSource) {

        this.custSource = custSource;

    }

    public String getCustIndustry() {

        return custIndustry;

    }

    public void setCustIndustry(String custIndustry) {

        this.custIndustry = custIndustry;

    }

    public String getCustLevel() {

        return custLevel;

    }

    public void setCustLevel(String custLevel) {

        this.custLevel = custLevel;

    }

    public String getCustAddress() {

        return custAddress;

    }

    public void setCustAddress(String custAddress) {

        this.custAddress = custAddress;

    }

    public String getCustPhone() {

        return custPhone;

    }

    public void setCustPhone(String custPhone) {

        this.custPhone = custPhone;

    }

}

四.引入坐标:

<?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.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>
4.0.0</modelVersion>

    <groupId>
com.hlx</groupId>
    <artifactId>
jpa-01</artifactId>
    <version>
1.0-SNAPSHOT</version>

    <properties>
        <project.build.sourceEncoding>
UTF-8</project.build.sourceEncoding>
        <project.hibernate.version>
5.0.7.Final</project.hibernate.version>
    </properties>

    <dependencies>
       
<!-- junit -->
       
<dependency>
            <groupId>
junit</groupId>
            <artifactId>
junit</artifactId>
            <version>
4.12</version>
            <scope>
test</scope>
        </dependency>

       
<!-- hibernate对jpa的支持包 -->
       
<dependency>
            <groupId>
org.hibernate</groupId>
            <artifactId>
hibernate-entitymanager</artifactId>
            <version>
${project.hibernate.version}</version>
        </dependency>

       
<!-- c3p0 -->
       
<dependency>
            <groupId>
org.hibernate</groupId>
            <artifactId>
hibernate-c3p0</artifactId>
            <version>
${project.hibernate.version}</version>
        </dependency>

       
<!-- log日志 -->
       
<dependency>
            <groupId>
log4j</groupId>
            <artifactId>
log4j</artifactId>
            <version>
1.2.17</version>
        </dependency>

       
<!-- Mysql and MariaDB -->
       
<dependency>
            <groupId>
mysql</groupId>
            <artifactId>
mysql-connector-java</artifactId>
            <version>
5.1.6</version>
        </dependency>
    </dependencies>


</project>

 

五.配置jpa的核心配置文件

1. 在资源文件夹下新建一个META-INF目录,并在该目录下创建一个文件,名为persistence.xml。

JPA入门--(二)JPA入门案例:实现客户的保存操作

2. 根据IDEA自带的persistence.xml模板引入相关约束。

JPA入门--(二)JPA入门案例:实现客户的保存操作

JPA入门--(二)JPA入门案例:实现客户的保存操作

3. persistence.xml文件约束导入

<?xml version="1.0" encoding="UTF-8"?>

<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">

    

</persistence>

4. 对核心配置文件进行相关配置的编写

配置配置persistence-unit节点(必选)
 持久化单元:
    name持久化单元名称
    transaction-type事务管理的方式
        JPA分布式事务管理(如不同表分布到不同数据库)
        RESOURCE_LOCAL本地事务管理(目前所有表都存在于一个数据库中,所以这些事务用的是本地事务管理)

(1)配置jpa实现方式(必选)

<!-- jpa实现方式配置【必选】 -->
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

【注】IDEA中查找类路径全名的方法(本例中查找HibernatePersistenceProvider类):

双击shift键,弹出如下搜索框,查找HibernatePersistenceProvider。

JPA入门--(二)JPA入门案例:实现客户的保存操作

然后点击进入该类,右键选择Copy Reference。

JPA入门--(二)JPA入门案例:实现客户的保存操作

(2)配置数据库信息(必选)

<!--
   
数据库信息:
        用户名:javax.persistence.jdbc.user
        密码:javax.persistence.jdbc.passwd
        驱动:javax.persistence.jdbc.driver
        数据库地址:javax.persistence.jdbc.url
-->

<property name="javax.persistence.jdbc.user" value="root"/>
<property
name="javax.persistence.jdbc.passwd" value="123456"/>
<property
name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property
name="javax.persistence.jdbc.url" value="jdbc:mysql:///jpa_hibernate01"/>

(3)配置jpa实现方的配置信息(可选)

<!--  配置jpa实现方的配置信息【可选】
        显示sql:hibernate.show_sql
        自动创建数据库表:hibernate.hbm2ddl.auto
            create:程序运行时创建数据库表(若有表,先删除表再创建)
            update:程序运行时创建表(若有表则不会创建)
            none:不会创建表
-->

<property name="hibernate.show_sql" value="true"/>
<property
name="hibernate.hbm2ddl.auto" value="update"/>

(4)编写完的xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>

<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">

    <!-- 配置persistence-unit节点

        持久化单元:

            name:持久化单元名称

            transaction-type:事务管理的方式

                JPA:分布式事务管理(如不同表分布到不同数据库)

                RESOURCE_LOCAL:本地事务管理(目前所有表都存在于一个数据库中,所以这些事务用的是本地事务管理)

    -->

    <persistence-unit name="myJPA" transaction-type="RESOURCE_LOCAL">

        <!-- jpa实现方式配置【必选】 -->

        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

  

        <!--  数据库信息配置【必选】 -->

        <properties>

            <!--

                数据库信息:

                    用户名:javax.persistence.jdbc.user

                    密码:javax.persistence.jdbc.passwd

                    驱动:javax.persistence.jdbc.driver

                    数据库地址:javax.persistence.jdbc.url

            -->

            <property name="javax.persistence.jdbc.user" value="root"/>

            <property name="javax.persistence.jdbc.passwd" value="123456"/>

            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>

            <property name="javax.persistence.jdbc.url" value="jdbc:mysql:///jpa_hibernate01"/>

  

            <!--  配置jpa实现方的配置信息【可选】 

                    显示sql:hibernate.show_sql

                    自动创建数据库表:hibernate.hbm2ddl.auto

                        create:程序运行时创建数据库表(若有表,先删除表再创建)

                        update:程序运行时创建表(若有表则不会创建)

                        none:不会创建表

            -->

            <property name="hibernate.show_sql" value="true"/>

            <property name="hibernate.hbm2ddl.auto" value="update"/>

        </properties>

  

    </persistence-unit>

</persistence>

六.编写测试类进行测试

1. 在项目的test目录下的java目录下新建一个测试类JPATest.java。

JPA入门--(二)JPA入门案例:实现客户的保存操作

2. 编写测试类JPATest.java

package com.hlx.test;

  

import com.hlx.domain.Customer;

import org.junit.Test;

  

import javax.persistence.EntityManager;

import javax.persistence.EntityManagerFactory;

import javax.persistence.EntityTransaction;

import javax.persistence.Persistence;

  

public class JPATest {

    /**

     * 测试jpa的保存

     *      案例:保存一个客户到数据库中

     *  jpa操作步骤:

     *      1. 加载配置文件,创建工厂(实体管理器工厂)对象

     *      2. 通过实体管理类工厂获取实体管理器

     *      3. 获取事务对象,开启事务

     *      4. 完成增删改查操作

     *      5. 提交事务(回滚事务)

     *      6. 释放资源

     */

    @Test

    public void testSave(){

        // 1. 加载配置文件,创建工厂(实体管理器工厂)对象

        EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJPA");

  

        // 2. 通过实体管理类工厂获取实体管理器

        EntityManager manager = factory.createEntityManager();

  

        // 3. 获取事务对象,开启事务

        EntityTransaction transaction = manager.getTransaction();

        transaction.begin();

  

        // 4. 完成增删改查操作

        // 例:保存一个客户到数据库中

        // 例:保存一个客户到数据库中

          Customer customer = new Customer();

          customer.setCustName("Li Ming");

          customer.setCustIndustry("edu");

          customer.setCustLevel("*****");

          customer.setCustAddress("England");

          customer.setCustPhone("13898986767");

        manager.persist(customer)// 保存操作

  

        // 5. 提交事务(回滚事务)

        transaction.commit();

  

        // 6. 释放资源

        manager.close();

        factory.close();

    }

 

}

3. 先查看数据表,表中没有任何记录。

JPA入门--(二)JPA入门案例:实现客户的保存操作

4. 运行测试类:

JPA入门--(二)JPA入门案例:实现客户的保存操作

5. 控制台输出信息:

log4j:WARN No appenders could be found for logger (org.jboss.logging).

log4j:WARN Please initialize the log4j system properly.

log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

Hibernate: insert into t_customer (cust_address, cust_industry, cust_level, cust_name, cust_phone, cust_source) values (?, ?, ?, ?, ?, ?)

 

Process finished with exit code 0

6. 查看数据表,数据已成功插入:

JPA入门--(二)JPA入门案例:实现客户的保存操作