• 台湾妹美性网|台湾妹美性网官方网站》》》》》》

  • 发布时间:2016-01-20 11:55 | 作者:yc | 来源:互联网 | 浏览:1200 次
  • 台湾妹美性网|台湾妹美性网官方网站》》》》》》

    persistence.xml

    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">

    org.hibernate.ejb.HibernatePersistence

    com.jpa.beans.Customer

    Customer.java实体类

    @Table(name="jpa_customer")

    @Entity

    public class Customer {

    @Column(name="id")

    @GeneratedValue(strategy=GenerationType.AUTO)

    @Id

    private Integer id;

    @Column(name="last_name")

    private String lastName;

    private String email;

    private int age;

    //省掉落getter stter

    }

    Main.java

    public class Main {

    public static void main(String[] args) {

    // 1.创立EntityManagerFactory

    String persistenceUnitName = "Jpa";//对应persistence.xml中的persistence-unit的name特征

    EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory(persistenceUnitName);

    // 2.创立EntityManager

    EntityManager entityManager = entityManagerFactory .createEntityManager();

    // 3.洞开营业

    EntityTransaction entityTransaction = entityManager.getTransaction();

    entityTransaction.begin();

    // 3.历久化操作

    台湾妹美性网|台湾妹美性网官方网站》》》》》》

    Customer customer = new Customer();

    customer.setAge(22);

    customer.setEmail("");

    customer.setLastName("Shang");

    entityManager.persist(customer);

    // 5.提交营业

    entityTransaction.commit();

    // 6.封闭EntityManager

    entityManager.close();

    // 7.封闭EntityManagerFactory

    entityManagerFactory.close();

    }

    }

    JPA 根本评释

    @Entity 标明用于实体类声明句子之前,指出该Java 类为实体类,将映射到指定的数据库表

    650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" alt="*" style="font-family:'微软雅黑', 'Microsoft YaHei';border:1px solid rgb(221,221,221);background-position:50% 50%;background-repeat:no-repeat;" />Java Persistence AP明仕亜州I:用于方针历久化的 API

    650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" alt="*" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" />Java EE 5.0 渠道标准的 ORM 标准,使得运用法度榜样以同等的法子拜访历久层

    JPA 是hibernate的一个笼统(就像JDBC和JDBC驱动的联系):

    –JPA 是标准:JPA 本色上等于一种ORM 标准,不是ORM 构造 —— 因为 JPA 并未提供 ORM 完结,它仅仅制订了一些标准,提供了一些编程的 API 接口,但具体完结则由ORM 厂商提供完结

    –Hibernate 是完结:Hibernate 除了作为 ORM 构造以外,它也是一种 JPA 完结从功能上来说, JPA 是 Hibernate 功能的一个子集

    JPA 的方针之一是拟定一个能够由许多供货商完结的 API,现在Hibernate 3.2+、TopLink10.1+ 以及OpenJPA都提供了 JPA 的完结

    Hibernate–JPA 的始作俑者等于Hibernate 的作者–Hibernate 从 3.2 起头兼容 JPA

    OpenJPA–OpenJPA 是Apache 安排提供的开源项目

    TopLink–TopLink曾经需求收费,现在开源了

    JPA的上风

    标准化: 提供相同的 API,这确保了依据JPA 开拓的公司运用能够颠末少数的修正就能够在不相同的 JPA 构造下运转

    大略易用,集成便利:JPA 的重要方针之一等于提供愈加大略的编程模型,在 JPA 构造下创立实体和创立 Java类相同大略,只需求运用javax.persistence.Entity进行注释;JPA 的构造和接口也都十分大略,

    可比美JDBC的查询才能: JPA的查询言语是面向方针的,JPA界说了合营的JPQL,并且能够支撑批量更新和修正、JOIN、GROUP BY、HAVING 等一样平常只要 SQL 才能够提供的高级查询特点,甚至还能够支撑子查询

    支撑面向方针的高级特点: JPA 中能够支撑面向方针的高级特点,如类之间的一连、多态和类之间的繁杂联系,最大年夜极限的运用面向方针的模型

    JPA 包括 3方面的技能

    ORM映射元数据:JPA 支撑 XML 和JDK 5.0 评释两种元数据的法子,元数据描画方针和表之间的映射联系,构造据此将实体方针历久化到数据库表中

    JPA 的 API:用来操作实体方针,实行CRUD操作,构造在后台完结统统的事情,开拓者从繁琐的 JDBC和 SQL代码中开脱出来

    查询言语(JPQL):这是历久化操作中很主要的一个方面,颠末面向方针而非面向数据库的查询言语查询数据,防止法度榜样和具体的SQL 缜密耦合

    项目目录构造如图

    650) this.width=650;" src="/html/uploads/allimg/160120/1155131X4-1.jpg" title="QQ截图3330.jpg" alt="wKiom1YwsqXDZ6m4AABmrDrwVLA224.jpg" />

    台湾妹美性网|台湾妹美性网官方网站》》》》》》

    lib下需求增添Hibernate required目录及jpa目录下的jar,还有MySQL的驱动如声明一个实体类 Customer,它将映射到数据库中的 customer 表上

    @Table

    当实体类与其映射的数据库表名不相同名时需求运用 @Table 标明说明,该标明与 @Entity 标明并排运用,置于实体类声明句子之前,可写于独自句子行,微信支付老虎机也可与声明句子同业

    @Table 标明的常用选项是 name,用于指明数据库的表名

    @Table标明还有一个两个选项 catalog 和 schema 用于设置表所属的数据库目录或形式,一样平常为数据库名uniqueConstraints选项用于设置约束前提,一样平常不须设置

    @Id 标明用于声明一个实体类的特征映射为数据库的主键列该特征一样平常置于特征声明句子之前,可与声明句子同业,也可写在独自行上

    @Id标明也可置于特征的getter法子之前

    @GeneratedValue 用于标明主键的天生计谋,颠末 strategy 特征指定默许环境下,JPA 主动遴选一个最得当底层数据库的主键天生计谋:SqlServer对应 identity,MySQL 对应 auto increment

    在 javax.persistence.GenerationType中界说了以下几种可供遴选的计谋:

    –IDENTITY:选用数据库 ID自增添的法子来自增主键字段,Oracle 不支撑这种法子;

    –AUTO: JPA主动遴选合适的计谋,是默许选项;

    –SEQUENCE:颠末序列发生主键,颠末 @SequenceGenerator评释指定序列名,MySql不支撑这种法子

    –TABLE:颠末表发生主键,构造借由表仿照序列发生主键,运用该计谋能够使运用更易于数据库移植

    @Basic 注解一个大略的特征到数据库表的字段的映射,关于没有任何标明的getXxxx() 法子,默许即为@Basic

    fetch: 注解该特征的读取计谋,有 EAGER 和 LAZY 两种,分袂注解主支抓取和推迟加载,默许为 EAGER.

    optional:注解该特征是不是准许为null, 默许为true

    @Column

    当实体的特征与其映射的数据库表的列不相同名时需求运用@Column 标明说明,该特征一样平常置于实体的特征声明句子之前,还可与 @Id 标明一同运用

    @Column 标明的常用特征是 name,用于设置映射数据库表的列名此外,该标明还包括其它多个特征,如:unique、nullable、length等

    @Column 标明的 columnDefinition特征: 注解该字段在数据库中的实践类型.一样平常 ORM 构造能够依据特征类型主动判别数据库中字段的类型,可是关于Date类型仍无法判毕命据库中字段类型究竟是DATE,TIME仍是TIMESTAMP.此外,String的默许映射类型为VARCHAR, 要是要将 String 类型映射到特定命据库的 BLOB 或TEXT 字段类型.

    @Column标明也可置于特征的getter法子之前

    @Transient

    注解该特征并非一个到数据库表的字段的映射,ORM构造将纰漏该特征.

    要是一个特征并非数据库表的字段映射,就必须将其标明为@Transient,不然,ORM构造默许其评释为@Basic

    @Temporal

    在中间的 Java API 中并没有界说Date 类型的精度(temporal precision).而在数据库中,注解Date 类型的数据有 DATE, TIME, 和 TIMESTAMP 三种精度(即纯真的日期,时候,或许两者 兼备). 在进行特征映射时可运用@Temporal评释来调剂精度.

  • 相关内容

友情链接: