JPA入门程序以及介绍

1.什么是JPA

jpa全称(Java Persistence API)既java持久化API,Java EE 5.0 平台标准的 ORM 规范,使得应用程序以统一的方式访问持久层。

那么也就是说JPA其实是一组orm规范,并不是orm框架,像我们平时用过的hibernate,其实就是符合jpa规范的一个orm框架。有点像JDBC,与JDBC驱动,的关系。目前Hibernate 3.2+、TopLink 10.1+ 以及 OpenJPA 都提供了 JPA 的实现。
画一张图来更形象的说明他们的关系如下图所示:
在这里插入图片描述
下面来记录一下JPA的入门程序。这里使用的jpa实现是hibernate
(1)准备工作建立maven工程,导入所需的maven依赖

 <!--导入相关依赖-->
    <dependencies>
        <!--引入hibernate依赖-->
        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.3.6.Final</version>
        </dependency>
        <!--引入jpa依赖-->
        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.4.0.Final</version>
        </dependency>

        <!--引入hibernate-jpa-->
        <!-- https://mvnrepository.com/artifact/org.hibernate.javax.persistence/hibernate-jpa-2.1-api -->
        <dependency>
            <groupId>org.hibernate.javax.persistence</groupId>
            <artifactId>hibernate-jpa-2.1-api</artifactId>
            <version>1.0.0.Final</version>
        </dependency>
        <!--数据库驱动包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.32</version>
        </dependency>
        <!--测试相关包-->
        <!--测试包-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

在资源路径下建立一个META-INF文件夹,加入配置文件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">
		<!--
		配置使用什么 ORM 产品来作为 JPA 的实现
		1. 实际上配置的是  javax.persistence.spi.PersistenceProvider 接口的实现类
		2. 若 JPA 项目中只有一个 JPA 的实现产品, 则也可以不配置该节点.
		-->
		<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
		<!--添加持久化类-->
		<class>com.kuake.Student</class>
		<!--配置数据库信息-->
		<properties>
			<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
			<property name="javax.persistence.jdbc.url" value="jdbc:mysql:///jpa"/>
			<property name="javax.persistence.jdbc.user" value="root"/>
			<property name="javax.persistence.jdbc.password" value="root"/>

			<!-- 配置 JPA 实现产品的基本属性. 配置 hibernate 的基本属性 -->
			<!--格式化sql-->
			<property name="hibernate.format_sql" value="true"/>
			<!--在控制台打印sql-->
			<property name="hibernate.show_sql" value="true"/>
			<!--自动建表-->
			<property name="hibernate.hbm2ddl.auto" value="update"/>
		</properties>
	</persistence-unit>
</persistence>

(2)编写持久化的类

@Table(name = "jsp_student")//建表名称
public class Student {

    private Integer id;
    private String  name;
    private Integer age;
    private String email;

    @Id //主键
    @GeneratedValue(strategy = GenerationType.AUTO)//主键生成策略
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }
	//列的名字
    @Column(name = "username")
    public String getName() {
        return name;
    }

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

    public Integer getAge() {
        return age;
    }

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

    public String getEmail() {
        return email;
    }

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

  • @Entity表示这是一个实体类与数据库对应
  • @Table()指定表名
  • @Column指定对应属性在数据库的列名,(如果不设置,默认就是该字段名)

(3)编写测试类

public class DemoTest {
    @Test
    public void test(){
        //创建EntityManagerFactory
        EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("jpa");

        //创建EntityManager对象
        EntityManager entityManager = entityManagerFactory.createEntityManager();

        // 获得并且开启事物
        EntityTransaction transaction = entityManager.getTransaction();
        transaction.begin();

        //持久化操作
        Student student = new Student();
        student.setAge(12);
        student.setEmail("123@qq.com");
        student.setName("jack");

        entityManager.persist(student);
        //提交事务
        transaction.commit();

        //关闭EntityManager对象
        entityManager.close();

        //关闭EntityManagerFactory
        entityManagerFactory.close();
    }
}

输出:
*加粗样式在这里插入图片描述
观察一下控制台,发现执行了一条创建表语句,跟插入数据语句
然后查看数据库:
在这里插入图片描述
表创建成功,数据也成功插入了,表名就是我们@Table()所设置的表面。然后除去我们@Column(name = "username")标注的列名外,默认值都是我们持久类的字段名。

总结一下:
  • jpa是一种规范,不是一种框架,如hibernate就是基于jpa规范的一种实现
    jap的hellowold步骤:
    1.创建 EntityManagerFactory
    2.获得 EntityManager对象
    3.获得并且开启事务
    4.持久化操作
    5.提交事务
    6.关闭EntityManager对象
    7.关闭EntityManagerFactory
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值