框架学习之JPA(二)

JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

Sun引入新的JPA ORM规范出于两个原因:其一,简化现有Java EE和Java SE应用开发工作;其二,Sun希望整合ORM技术,实现天下归一。

学习视频:尚硅谷框架jpa学习(有兴趣的同学留言邮箱)

使用软件:eclipse

Java版本:jdk8

本节目录

二、JPA_基本注解

1.基本的六个注解

@Entity

@Table

@Id

@GeneratedValue

@Column

@Basic

2.@Transient

3.@Temporal

4.用Table生成主键

二、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)生成效果

两张表的数据都会进行修改

JPA学习(二、JPA_基本注解)的更多相关文章

  1. Spring Boot 项目学习 (二) MySql + MyBatis 注解 + 分页控件 配置

    0 引言 本文主要在Spring Boot 基础项目的基础上,添加 Mysql .MyBatis(注解方式)与 分页控件 的配置,用于协助完成数据库操作. 1 创建数据表 这个过程就暂时省略了. 2 ...

  2. JPA学习(五、JPA_二级缓存)

    框架学习之JPA(五) JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中 ...

  3. JPA学习(四、JPA_映射关联关系)

    框架学习之JPA(四) JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中 ...

  4. 一步步学习 Spring Data 系列之JPA(二)

    继上一篇文章对Spring Data JPA更深( )一步剖析. 上一篇只是简单的介绍了Spring Data JPA的简单使用,而往往在项目中这一点功能并不能满足我们的需求.这是当然的,在业务中查询 ...

  5. java自定义注解学习(二)_注解详解

    上篇文章,我们简单的实现了一个自定义注解,相信大家对自定义注解有了个简单的认识,这篇,这样介绍下注解中的元注解和内置注解 整体图示 内置注解 @Override 重写覆盖 这个注解大家应该经常用到,主 ...

  6. JPA学习(三、JPA_API)

    框架学习之JPA(三) JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中 ...

  7. JPA学习---第一节:JPA详解

    一.详解 JPA JPA(Java Persistence API)是Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据.他的出现主要是 ...

  8. Spring学习---JPA学习笔记

    用了一段时间的Spring,到现在也只是处于会用的状态,对于深入一点的东西都不太了解.所以决定开始深入学习Spring. 本文主要记录JPA学习.在学习JPA之前,需要了解一些ORM的概念. ORM概 ...

  9. SpringCloud学习(二):微服务入门实战项目搭建

    一.开始使用Spring Cloud实战微服务 1.SpringCloud是什么? 云计算的解决方案?不是 SpringCloud是一个在SpringBoot的基础上构建的一个快速构建分布式系统的工具 ...

随机推荐

  1. scrapy 启动

    虚拟环境安装好了之后,scrapy 框架安装好了以后: workon article_spider   (项目名称) scrapy startproject  Article Spider 工程目录 ...

  2. C语言Ⅰ作业12—学期总结

    一.我学到的内容 二.我的收获 作业链接 收获 C语言Ⅰ博客作业01 认识了PTA编程,博客园,Markdown基本语法1,Markdown基本语法2 C语言Ⅰ博客作业02 PTA系统常见问题解答 C ...

  3. [转帖]教你如何修改运行中的docker容器的端口映射

    教你如何修改运行中的docker容器的端口映射   在docker run创建并运行容器的时候,可以通过-p指定端口映射规则.但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改.当dock ...

  4. mysql for update 高并发 死锁研究

    mysql for update语句     https://www.cnblogs.com/jtlgb/p/8359266.html For update带来的思考 http://www.cnblo ...

  5. idea工具

    1. 使用IntelliJ IDEA 配置JDK(入门)   https://blog.csdn.net/nobb111/article/details/77116259 2. idea 调试快捷键  ...

  6. java实现顺序队列

    package queue; import java.util.Scanner; public class ArrayQueueLoop { public static void main(Strin ...

  7. mysql之general log 日志

    开启 general log 将所有到达MySQL Server的SQL语句记录下来. 一般不会开启开功能,因为log的量会非常庞大.但个别情况下可能会临时的开一会儿general log以供排障使用 ...

  8. 如何在一个线程环境中使用一个线程非安全的java类

    在开发过程中 当我们拿到一个线程非安全的java类的时候,我们可以额外创建这个类的管理类 并在管理类中控制同步 比如 一个非线程安全的Pair类 package test.thread.sx.test ...

  9. css 空心圆

    用css实现一个空心圆,并始终放置在浏览器窗口左下角        div{                position:fixed;                bottom:0;      ...

  10. c# 模拟post登录

    使用模拟登录大致可以分为两步 一.post登录获取cookis public CookieContainer GetCookie(string url,string account,string pa ...