SSH进阶(四)Hibernate----JPA

ORM--JPA

JPA是持久层的规范。Hibernate是对JPA的一种实现。主要就是ORM部分使用注解替换了配置。

JPA全称为Java Persistence API ,Java持久化API是Sun公司在Java EE 5规范中提出的Java持久化接口。JPA吸取了目前Java持久化技术的优点,旨在规范、简化Java对象的持久化工作。使用JPA持久化对象,并不是依赖于某一个ORM框架。

JPA和Hibernate的关系

JPA 是规范:JPA 本质上就是一种 ORM 规范

Hibernate 是实现:Hibernate 除了作为 ORM 框架之外,它也是一种 JPA 实现.

ORM映射文件之前使用的是配置方式,这里可以通过JPA规范,把ORM映射使用注解来替代。

Hibernate的注解方式(HibernateJPA)

JPA 的供应商:Hibernate、OpenJPA、TopLink

JPA特点:

  1. 标准化:
  2. 简单易用
  3. 媲美JDBC
  4. 支持面向对象

开发流程:

第一步:创建Web项目,导入依赖

必须创建Web项目

同时放入模板文件

第二步:配置JPA核心配置文件

核心配置persistence.xml(名称是固定的), 在这个文件中配置持久化单元

  1. JPA 规范要求目录结构:在META-INF中
  2. 需要指定跟哪个数据库进行交互;
  3. 需要指定 JPA 使用哪个持久化的框架以及配置该框架的基本属性

以下就是配置文件的代码:

<?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-2" transaction-type="RESOURCE_LOCAL">  

        <!-- 指定JPA 的实现厂商 -->

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

        <!-- 属性,主要有数据源和对应的扩展属性 -->

        <properties>

            <!-- 数据源 -->

            <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver">

</property>

            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/qf?characterEncoding=utf-8">

</property>

            <property name="hibernate.connection.username" value="root"></property

            <property name="hibernate.connection.password" value=""></property>

            <!-- 扩展属性 必须指向数据库的方言-->

            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL55Dialect">

</property>

            <!-- 自动创建表:一般不需要 因为映射实体是由数据库当中的表生成的,所以表已经存在,若是用配置文件去生成表,则会用到这条语句-->

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

            <!-- 显示SQL -->

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

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

        </properties>

        <!--  注册实体, -->

        <!--<class></class>-->

    </persistence-unit>  

</persistence> 

 

第三步:创建实体类和映射的注解

创建实体类, 使用 annotation 来描述实体类跟数据库表之间的映射关系.

JPA 基本注解:

  1. @Entity 标注用于实体类声明语句之前,指出该Java 类为实体类,将映射到指定的数据库表。
  2. @Table 映射表格
    1. 常和@Entity配合使用。
    2. Name可选,的表示表名称,默认表名和实体名一致。
  3. @Id 映射生成主键:通常置于属性声明语句之前,也可置于属性的getter方法之前。必须有,定义了映射到数据库表的主键属性
  4. @GeneratedValue 用于标注主键的生成策略,通过 strategy 属性指定。 (strategy=GenerationType.AUTO)主键策略:
    • IDENTITY:采用数据库 ID自增长的方式来自增主键字段
    1. AUTO: JPA自动选择合适的策略,是默认选项;
    2. SEQUENCE:通过序列产生主键
  1. @Column 映射表格列 (可选):常用属性是 name,用于设置映射数据库表的列名。

 

 具体完成的也是三个方面,就像之前提及的,表和实体类的映射,行和对象的映射,属性和字段的映射;下面来看具体的操作:

类和表:

行和对象的映射

属性和字段

 

创建完成之后,把创建好的实体类在核心配置文件当中去注册,若是有多个,则注册多个;

在class里面放入类的全名称即可;

第四步:开发DAO测试

初始化表测试:

首次我们需要去加载配置文件,与之前不同的是加载的方式不同 

 

public void initTable(){

   //加载配置,得到工厂

   EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("myjpa");

   entityManagerFactory.close();

}

这里的entityManagerFactory就相当于之前的工厂。

具体的步骤有大致五个步骤:

  1. 加载配置文件,得到工厂

EntityManagerFactory jpa = Persistence.createEntityManagerFactory("JPA");

 

  1. 有工厂得到实体类管理对象
EntityManager entityManager = jpa.createEntityManager();//相当于Session

 

3.由实体类管理对象得到事务,并开启事务

       EntityTransaction transaction = entityManager.getTransaction();

transaction.begin();

 

  1. 用实体类管理对象,进行具体的操作

CRDU操作

  增:
javaUser javaUser1=new javaUser();

javaUser1.setName("www");

javaUser1.setPassword("1324567");

entityManager.persist(javaUser1);

System.out.println("添加成功"); 
   删:
删除是先得到对象,再将整个对象删除
javaUser javaUser1 = entityManager.find(javaUser.class, 4);
entityManager.remove(javaUser1);
改:
同样,改也是显得到对象,再去设置属性,然后更改
MyComputer myComputer = entityManager.find(MyComputer.class, 1L);

myComputer.setComDesc("中国梦");

entityManager.merge(myComputer);
    查:
        当然查是最简单的,只需要传入想要的类,以及想要得到的主键就可以得到;
javaUser javaUser1 = entityManager.find(javaUser.class, id);

 

  1. 提交事务
transaction.commit();

 

  1. 关闭连接

当然此处应该关闭两个。一个就是实体管理对象,一个就是产生实体管理对象的工厂类;

entityManager.close();
entityManagerFactory.close();

 

以上就是对JPA的一个简单的介绍,下一篇回味大家带来SSH的整合,敬请期待!

 

猜你喜欢

转载自blog.csdn.net/qq_42112846/article/details/81139134