JPA的入门案例

一.案例需求

执行保存操作。

二.逻辑

1.环境配置

1.创建maven工厂导入依赖

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

3.创建实体类对象,并与数据库进行注解映射

2.jpa执行流程

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

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

3.开启事务

4.执行sql语句【增删改查】

5.提交事务

6.关闭资源

三.范例

1.pom.xml

<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>

2.jpa核心文档

(1)创建目录和文档

图片

(2)使用xml约束模板

图片

图片

(3)文件模板

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="2.0">
    <!--配置持久化单元
      name:持久化单元名称
      transaction-type:事务类型
         RESOURCE_LOCAL:本地事务管理
         JTA:分布式事务管理 -->
    <persistence-unit name="myJpa" transaction-type="RESOURCE_LOCAL">
        <!--配置JPA规范的服务提供商 -->
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <!-- 配置包扫描路径 -->
        <class>pojo.Customer</class>
        <properties>
            <!-- 数据库驱动 -->
            <property name="javax.persistence.jdbc.driver"
                      value="com.mysql.jdbc.Driver" />
            <!-- 数据库地址 -->
            <property name="javax.persistence.jdbc.url"
                      value="jdbc:mysql://localhost:3306/db6" />
            <!-- 数据库用户名 -->
            <property name="javax.persistence.jdbc.user"
                      value="root" />
            <!-- 数据库密码 -->
            <property name="javax.persistence.jdbc.password"
                      value="root" />
            <!--jpa提供者的可选配置:
            我们的JPA规范的提供者为hibernate,所以jpa的核心配置中兼容hibernate的配 -->
            <!-- 2.1配置显示hibernate的自动生成sql语句 -->
            <property name="hibernate.show_sql" value="true" />
            <!-- 2.2使用格式化sql语句打印到控制台 -->
            <property name="hibernate.format_sql" value="false" />
            <!--
                hibernate.hbm2ddl.auto自动创建数据库
                create是程序运行时创建数据库表。【先删除后创建】
                update是程序运行时创建表。【如果有表,则不会创建表】
                none是不会创建表
            -->
            <property name="hibernate.hbm2ddl.auto" value="update" />
        </properties>
    </persistence-unit>
</persistence>

(4)范例

图片

图片

3.实体类

(1)代码块

import javax.persistence.*;
import java.io.Serializable;
@Entity
@Table(name = "cst_customer")
public class Customer implements Serializable {
    @Id
    /*
    GeneratedValue声明主键的自增加模式
        IDENTITY:是底层数据库必须支持自动增长
        SEQUENCE:是底层数据库必须支持序列
        TABLE:jpa提供的一种机制,通过一张数据库表的形式完成主键增长
        AUTO:自动选择类型IDENTITY或SEQUENCE
    */
    @GeneratedValue(strategy = GenerationType.TABLE)
    @Column(name="cust_id")
    private Long custId;
    @Column(name="cust_name") //指定和表中cust_name字段的映射关系
    private String custName;
    @Column(name="cust_source")//指定和表中cust_source字段的映射关系
    private String custSource;
    @Column(name="cust_industry")//指定和表中cust_industry字段的映射关系
    private String custIndustry;
    @Column(name="cust_level")//指定和表中cust_level字段的映射关系
    private String custLevel;
    @Column(name="cust_address")//指定和表中cust_address字段的映射关系
    private String custAddress;
    @Column(name="cust_phone")//指定和表中cust_phone字段的映射关系
    private String custPhone;
    @Override
    public String toString() {
        return "Customer{" +
                "custId=" + custId +
                ", custName='" + custName + '\'' +
                ", custSource='" + custSource + '\'' +
                ", custIndustry='" + custIndustry + '\'' +
                ", custLevel='" + custLevel + '\'' +
                ", custAddress='" + custAddress + '\'' +
                ", custPhone='" + 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;
    }
}

(2)范例

图片

4.测试类

(1)代码块

import org.junit.Test;
import pojo.Customer;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
public class CustomerTest {
    /**
     * 测试jpa的保存
     */
    @Test
    public void test1(){
        /*
            jpa的操作步骤
                1.加载配置文件创建工厂(实体管理工厂)对象
                    作用:创建工厂
                2.通过工厂获取实体管理器
                    作用:获取EntityManager对象
                    EntityManager对象内部维护了很多内容。
                        (1)维护了数据库信息
                        (2)维护缓存信息
                        (3)维护了所以实体类对象
                        (4)在创建EntityManager对象通过配置文件创建数据库表中映射的实体类对象
                    总结:创建EntityManager对象比较浪费资源.
                    特点:线程安全。
                3.开启事务
                4.执行sql语句【增删改查】
                    persist:保存方法
                    merge:修改方法
                    remove:删除方法
                    find/getReference:查询方法【根据id】
                5.提交事务
                6.关闭资源
         */
        //1.加载配置文件创建工厂(实体管理工厂)对象
        //参数是持久化单元名称
        EntityManagerFactory factory = Persistence.createEntityManagerFactory("myJpa");
        //2.通过工厂获取实体管理器
        EntityManager entityManager = factory.createEntityManager();
        //3.获取事务对象,并开启事务
        EntityTransaction tx = entityManager.getTransaction();
        tx.begin();
        //4.执行sql语句【保存操作】
        //4.1创建对象
        Customer customer = new Customer();
        customer.setCustName("aaa");
        customer.setCustIndustry("辽宁大连");
        //4.2保存操作
        entityManager.persist(customer);
        //5.事务提交
        tx.commit();
        //6.关闭资源
        entityManager.close();
        factory.close();
    }
}

(2)范例

图片

图片

图片

四.源码

day01.rar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值