关闭

JPA介绍及persistence.xml配置介绍

标签: javajpa
893人阅读 评论(0) 收藏 举报
分类:
    JPA 全称是:Java Persistence API 是由EJB 3.0软件专家组开发,其宗旨是为POJO提供持久

 化标准规范,了解JPA 从 persistence.xml 开始。它的作用是用来配置实体映射及数据库信息.

它默认情况下需要放在META-INF 文件夹下面

我们先来看一下它的几个重要标签:

persistence-unit

这是持久化单元,在persistence.xml中是允许配置多个持久化单元的。如果配置了多个

持久化单元 那么在 注入实体管理的时候需要指定一下持久化单元的名称。

介绍下该标签的两个属性:

*name* 属性:给这个持久化单元取一个名字。

transaction-type 属性: 这个属性默认值是 JTA (该值标识支持分布式事务)还有一个值是 RESOURCE_LOCAL (该值就很显然标识是本地事务了)

OK 往persistence-unit标签里面走:

provider:标识当前JPA 的供应商(如:org.hibernate.jpa.HibernatePersistenceProvider)

class :列出JPA实体类(即带有@Entity注解的实体)

shared-cache-mode :缓存持久化单元中实体的模式(全部ALL,标识的缓存ENABLE_SELECTIVE,

不缓存NONE,标识不缓存DISABLE_SELECTIVE)

jar-file :如果希望列出整个jar中的实体。可以配置该jar文件

jta-data-source :通过JNDI方式注入 DataSource 信息

properties : 可以在此标签下面配置数据库连接属性和供应商的属性信息。(以下使用Hibernate举例)

<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
<property name="hibernate.max_fetch_depth" value="2"/>
<property name="hibernate.generate_statistics" value="false"/>
<property name="hibernate.format_sql" value="false"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="javax.persistence.jdbc.url"value="jdbc:mysql://127.0.0.1:3306/test"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="123"/>
</properties>

有了这个文件后。就可以测试一下啦。(相关的jar需要准备一下,最后会为大家贴上maven的依赖)

快速建一个测试类Demo1 。在main里面开写:

    //这里我 选择 使用一个叫 PU 的持久化单元
     //因为在persistence.xml 的  里面我们配置了 hibernate自动建表。
    //所以到这里,数据库就有表啦
    EntityManagerFactory  factory  =  Persistence.createEntityManagerFactory("PU");

    EntityManager entityManager = factory.createEntityManager();

    //我们来个简单的查询
    //UserProfile 是我建的 用户表

    Query  query = entityManager.createQuery("FROM UserProfile o");
    List profile = query.getResultList();
    System.out.println(profile.size());

    //再来增加
    //下面来来个一连串操作吧, 展示一下 事务
    //那么先开一个事务吧

    entityManager.getTransaction().begin();

    UserProfile user = new UserProfile();

    user.setEmail("123@test.com");
    user.setUsername("test1");

    //set了几个属性,我们来保持他
    entityManager.persist(user);

    //保持好了后 我们来修改一下他的 值
    user.setUsername("test2");

    //可以这样进行修改, 
    //entityManager.merge(user);
    //但我们使用的hibernate,它其他做了一些封装,也就是在一个事务里面只要调用了属性的set方法, 
    //即使不调用merge方法,在最后也会生成update语句
    //在调用persist 的方法后,id字段就会被 自动注入值
    //getReference 方法会生成一个代理对象,在get某个属性的时候才会得到值。

    entityManager.remove(
        entityManager.getReference(UserProfile.class,user.getId()));

    //一个简单的使用就结束拉
    entityManager.getTransaction().commit(); 

那么第一部分就到这里,希望对您了解JPA起到了帮助,下一篇带大家了解JPA的实体注解的使用。

maven依赖:

<dependency>
    <groupid>org.hibernate</groupid>
    <artifactid>hibernate-entitymanager</artifactid>
    <version>5.0.3.Final</version>
</dependency>

<dependency>
    <groupid>org.hibernate</groupid>
    <artifactid>hibernate-validator</artifactid>
    <version>5.2.2.Final</version>
</dependency>
2
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:8510次
    • 积分:173
    • 等级:
    • 排名:千里之外
    • 原创:9篇
    • 转载:0篇
    • 译文:0篇
    • 评论:1条
    文章分类