从JDBC到JPA (2)

JPA 是什么?

JPA全称Java Persistence API,是一组用于将数据存入数据库的类和方法的集合。JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

  1. Java Persistence API(Java 持久层 API):用于对象持久化的 API
  2. 作用:使得应用程序以统一的方式访问持久层
  3. JPA 与 Hibernate是什么关系呢:
    1)JPA 是 Hibernate 的一个抽象,就像 JDBC 和 JDBC 驱动的关系
    2)JPA 是一种 ORM 规范,是 Hibernate 功能的一个子集 (既然 JPA 是规范,Hibernate 对 JPA 进行了扩展,那么说 JPA 是 Hibernate 的一个子集不为过)
    3)Hibernate 是 JPA 的一个实现
JPA的简单使用

先了解一下实体类相关注释

 * @Table  当实体类与映射的数据库表名不同名时需要使用 @Table 注解,该注解与 @Entity 注解并列使用
 * 若表名和类型相同时,省略@Table,比如类Users 和表 users;
 * 若不相同时,必须有@Table,并设置name,为该类对应的表名。@Table(name="users")
 * 
 * @Entity 修饰实体类,指明该类将映射到指定的数据表
 * 
 * @Id 标识该属性为主键,一般标注在该属性的 getter 方法上
 * 
 * @Transient 标注该属性不做与表的映射(原因:可能表中没有该属性对应的字段)
 * 
 * @Basic 默认所有属性都有该注解(主键需要单独使用@Id),所以可以省略,也可以放在属性或getter方法上。
 * 
 * @Column 类中属性名和表中对应字段名不相同时,会使用该注解,指明在类中对应的字段
 * 			@Column(name="对应的表中字段名")
 * 
 * @Temporal :向数据库映射日期(Date)属性时用来调整映射的精度。Date 类型的数据有 DATE, TIME, 和 TIMESTAMP 三种精度(即单纯的日期,时间精确到秒,或者两者兼备)
 * 
 * @GeneratedValue 用于标注主键的生成策略,通过strategy 属性指定。默认情况下,JPA 自动选择一个最适合底层数据库的主键生成策略:SqlServer对应identity,MySQL 对应 auto increment。 

实体类创建

package com.xm.jpa;

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="r_customers")
@Entity
public class Customer {
    
    private Integer id;
    
    private String name;
    
    private String email;
    
    private Integer age;

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

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

    @Column(name="nickname") //若字段与属性名不一致时填写
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public Integer getAge() {
        return age;
    }

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

    @Override
    public String toString() {
        return "Customer [id=" + id + ", name=" + name + ", email=" + email + ", age=" + age + "]";
    }
   
}

JPA的配置文件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" transaction-type="RESOURCE_LOCAL">
		<!-- 配置jpa ORM产品 -->
		<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
		
		<!-- 添加对应的持久化类 -->
		<class>com.xm.jpa.Customer</class>
		
		<properties>
			<!-- jpa中连接数据库 -->
			<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
			<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/customer?useUnicode=true&characterEncoding=utf-8" />
			<property name="javax.persistence.jdbc.user" value="root" />
			<property name="javax.persistence.jdbc.password" value="123456"></property>
			
			<!-- jpa中配置hibernate基本属性 -->
			<property name="hibernate.show_sql" value="true" />
			<property name="hibernate.format_sql" value="true" />
		</properties>
 
	</persistence-unit>
</persistence>

测试类

package com.xm.jpa;

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

public class Main {
    
    public static void main(String[] args) {
        
        //1.创建 EntityManagerFactory
        String persistenceUnitName = "jpa";
        EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(persistenceUnitName);
        
        //2.创建 EntityManager
        EntityManager entityManager = entityManagerFactory.createEntityManager();
        
        //4.开启事务
        EntityTransaction transaction = entityManager.getTransaction();
        transaction.begin();
        
        //5.进行持久化操作
        Customer customer = new Customer();
        customer.setName("xm");
        customer.setEmail("xmaa@gmail.com");
        customer.setAge(18);
        
        entityManager.persist(customer);
        
        //6.提交事务
        transaction.commit();
        
        //7.关闭 EntityManager
        entityManager.close();
        
        //8.关闭 EntityManagerFactory
        entityManagerFactory.close();
        
    }
    
}

以上就是jpa的一个简单使用,还有很多复杂操作就以后再研究吧。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值