JPA入门:HELLOWORLD

准备jar包:

|---antlr-2.7.7.jar
|---dom4j-1.6.1.jar
|---hibernate-commons-annotations-4.0.5.Final.jar
|---hibernate-core-4.3.11.Final.jar
|---hibernate-entitymanager-4.3.11.Final.jar
|---hibernate-jpa-2.1-api-1.0.0.Final.jar
|---jandex-1.1.0.Final.jar
|---javassist-3.18.1-GA.jar
|---jboss-logging-3.1.3.GA.jar
|---jboss-logging-annotations-1.2.0.Beta1.jar
|---jboss-transaction-api_1.2_spec-1.0.0.Final.jar
|---mysql-connector-java-8.0.11.jar

项目结构如图:

项目结构

实例采用hibernate的JPA实现。
JPA项目中persistence.xml文件必须放在META-INF目录下。[整合spring文件后,persistence.xml文件可以抽取出来或不需要]

配置文件persistence.xml内容结构如下:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="jpa" transaction-type="RESOURCE_LOCAL">

        <!-- 配置什么ORM产品,来作为JPA的实现 
             实际上是配置 javax.persistence.spi.PersistenceProvider接口的实现类
             若JPA项目中只有一个JPA的实现产品,则可以不用配置该节点。
        -->
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>com.heiketu.entity.Customer</class>
        <properties>
            <!-- 数据库相关连接设置 -->
            <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql:///test?serverTimezone=GMT%2B8"/>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value="admin"/>

            <!-- 配置JPA实现产品的基本属性: hibernate基本配置 -->
            <property name="hibernate.format_sql" value="true"/>
            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
            <!-- <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/> -->

        </properties>
    </persistence-unit>
</persistence>

配置文件中内容与hibernate的核心配置文件内容大致相似。

接下来新建一个实体类:

package com.heiketu.entity;

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

@Table(name="CUSTOMER")
@Entity
public class Customer {
    //标注ID的则视为主键
    @Id
    //配置生成主键策略
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;
    private String name;
    private String address;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }

    @Column(name="name",length=20,nullable=false)
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
}

这里采用了java的jdk5.0开始支持的annotation注解,使用了JPA元注解。

测试代码如下:

    /**
     * 使用JPA的几个步骤:
     * 1. 创建EntityManagerFactory
     * 2. 创建EntityManager
     * 3. 开启事务
     * 4. 持久化操作
     * 5. 提交事务
     * 6. 关闭事务
     * 7. 关闭EntityManager
     * 8. 关闭EntityManagerFactory
     */
    String persistenceUnitName = "jpa";
    EntityManagerFactory entiyManagerFactory = Persistence.createEntityManagerFactory(persistenceUnitName);
    EntityManager entityManager = entiyManagerFactory.createEntityManager();

    EntityTransaction transaction = entityManager.getTransaction();
    //开启事务
    transaction.begin();

    Customer customer = new Customer();
    customer.setName("中国门");
    customer.setAddress("万里云");
    entityManager.persist(customer);
    //提交事务
    transaction.commit();
    entityManager.close();
    entiyManagerFactory.close();

总结:
使用JPA有如下步骤:
- 创建EntityManagerFactory
- 创建EntityManager
- 开启事务
- 持久化操作[自己的业务持久化操作]
- 提交事务
- 关闭事务
- 关闭EntityManager
- 关闭EntityManagerFactory

对元注解粗略解释如下:

注解名解释
Table对应数据库的表.
Entity表示该类为实体类对应数据库的一张数据表
Id表示该属性对应数据表的主键字段
GeneratedValue配合Id注解使用,表示主键的生成策略[strategy有以下几中选项:AUTO(程序自动选择生成策略)、IDENTITY(MySQL数据库支持,但Oracle不支持)、SEQUENCE(Oracle支持的序列,MySQL不支持)、TABLE(采用第三张表来组合成自增长主键)]
Column在属性的get方法中使用,表示该列对应数据表中的一个字段。该属性有较多属性来支持对应的数据库字段的特性[例如:长度、对应的字段名、唯一约束等等]
Base默认JPA给字段添加的注解,如果没有添加任何注解会自动采用Base注解方案。JPA会自动对应数据表中的列
Transient表示该字段不持久化至数据库中,也不会在数据表中生成对应的列。
Temporal一般配合Java的Date类型字段使用。生成对应的日期类型几种形式:Date[只有年月日]、TIME[只有时分秒]、TIMESTAMP[时间戳:生成年月日时分秒]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值