框架学习之JPA(二)
JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。java
Sun引入新的JPA ORM规范出于两个缘由:其一,简化现有Java EE和Java SE应用开发工做;其二,Sun但愿整合ORM技术,实现天下归一。sql
学习视频:尚硅谷框架jpa学习(有兴趣的同窗留言邮箱)数据库
使用软件:eclipse框架
Java版本:jdk8eclipse
本节目录
2、JPA_基本注解ide
1.基本的六个注解学习
@Entityfetch
@Tablespa
@Idcode
@GeneratedValue
@Column
@Basic
2.@Transient
3.@Temporal
4.用Table生成主键
2、JPA_基本注解
若是@Id注解放在get方法上面,默认找到其set方法而后才映射到数据库中,全部的get方法都会按照这个规则进行
若是@Id注解放在属性名上面,则默认会映射属性,不管会不会有get和set方法,全部的属性都会按照这个规则进行
注:我本身总结的规则,多是错误的
1.基本的六个注解
@Entity
@Table
@Id
@GeneratedValue
@Column
@Basic
1)@Entity
- @Entity标注用于实体类声明语句以前,指出该java类为实体类,将映射到指定的数据库表。
2)@Table
- 当实体类与其映射的数据库表名不一样名时须要使用@Table标注说明,该标注与@Entity并列使用,置于实体类声明语句以前,可写于单独语句行,也可与声明语句同行。若是不加@Table,默认表名为类名。
- @Table标注的经常使用选项name,用于致命数据表的表名
- @Table还有两个选项catalog和schema用于设置表所属的数据库目录或模式,一般为数据库名。uniqueConstraints选项用于设置约束条件,一般不设置。
3)@Id
- @Id标注用于声明一个实体类的属性映射为数据库的主键列。该属性一般置于属性声明语句以前,可与生命语句同行,也能够写在单独行上。
- @Id标注也能够置于属性的getter方法以前。
4)@GeneratedValue
- @GeneratedValue 用于标注主键生成策略,经过strategy属性指定。默认状况下,JPA自动选择一个最适合底层数据库的主键生成策略:SqlServer对应identity,MySQL对应auto或者increment
- 在javax.persistence.GenerationType定义了一下几种可供选择的策略:
- IDENTITY:采用数据库ID自增加的方式来自增主键字段,Oracle不支持这种方式
- AUTO:JPA自动选择合适的策略,是默认选项
- SEQUENCE:经过序列生成主键,经过@SequenceGenerator注解指定序列名,Mysql不支持这种方式
- TABLE:经过表产生主键,框架借由表模拟序列产生主键使用该策略可使应用更易于数据库移植
5)@Basic
- @Basic表示一个简单的属性到数据库表的字段的映射,对于没有任何标注的getXxxx()方法。默认为@Basic
- fetch:表示该属性的读取策略,有EAGER和LAZY两种,分别表示主支抓取和延迟加载,默认为EAGER。
- Optional:表示该属性是否容许为null,默认为true
6)@Column
- 当实体的属性与其映射的数据表的列名不一样时须要使用,@Column注解说明,该属性一般置于实体的属性声明语句以前,还能够与@Id一块儿使用。
- @Column标注的column经常使用属性是name,用于设置映射数据库表的列名,此外,该注解还包含其余多个属性,如:unique,nullable,length等。
- @Column标注的columnDefinition属性:表示该字段在数据库中的实际类型,一般ORM框架能够根据属性类型自动判断数据库中的字段类型,可是对于Date类型仍没法肯定数据库中字段类型到底是Date,Time仍是TimeStamp。此外,String的默认映射类型为VARCHAR,若是要将String类型映射到特定数据库的BLOB或者TEXT字段类型
- @Column标注也能够置于属性的getter方法以前
2.@Transient
- 表示该属性并不是一个到数据库表的字段的映射,ORM框架将忽略该属性
- 若是一个属性并不是数据库表的字段映射,就务必将其标注为@Transient不然ORM框架默认其注解为@Basic
3.@Temporal
- 在核心的Java API中没有定义Date类型的精度(temporal precision)。而在数据库中,表示Date类型的数据有DATE,TIME和TIMESTAMP三种精度(即单纯的日期,时间,或者二者兼备)。在进行属性映射时可使用@Temporal注解来调整精度
4.用Table生成主键
经过其余的表的内容来生成主键ID,使用于全部的数据库,可是这个使用的概率很小
1)建立一个jpa_id_generators表
2)设置主键的标签(主键部分的java代码)
@Id @GeneratedValue(strategy=GenerationType.TABLE,generator="ID_GENERATOR") @TableGenerator(name="ID_GENERATOR", table="jpa_id_generators", pkColumnName="PK_NAME", pkColumnValue="CUSTOMER_ID", valueColumnName="PK_VALUE", allocationSize=100) private Integer id;
3)生成效果
两张表的数据都会进行修改