jpa oracle 传参int类型判空_Spring Data JPA(1)ORM思想和JPA简单使用

ORM

ORM(Object-Relational Mapping) 表示对象关系映射。

简单的说:ORM就是建立实体类和数据库表之间的关系,从而达到操作实体类就相当于操作数据库表的目的。

好处

当实现一个应用程序时(不使用O-R Mapping),我们可能会写特别多数据访问层的代码,

从数据库保存数据、修改数据、删除数据,而这些代码都是重复的。而使用ORM则会大大减少重复性代码。

常见的orm框架有:

Mybatis(ibatis)、Hibernate、Jpa

Hibernate

Hibernate是一个开源的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,

是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以使用面向对象的思维来操纵数据库。

JPA

JPA的全称是Java Persistence API, 即Java 持久化API,是SUN公司推出的一套基于ORM的规范,内部是由一系列的接口和抽象类构成。

JPA通过JDK 5.0注解描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

查询能力:

JPA的查询语言是面向对象而非面向数据库的,它以面向对象的自然语法构造查询语句,可以看成是Hibernate HQL的等价物。

JPA定义了独特的JPQL(Java Persistence Query Language),JPQL是EJB QL的一种扩展,它是针对实体的一种查询语言,操作对象是实体,而不是关系数据库的表,

而且能够支持批量更新和修改、JOIN、GROUP BY、HAVING 等通常只有 SQL 才能够提供的高级查询特性,甚至还能够支持子查询。

JPA和Hibernate的关系

JPA规范本质上就是一种ORM规范,注意不是ORM框架——因为JPA并未提供ORM实现,它只是制订了一些规范,提供了一些编程的API接口,但具体实现则由服务厂商来提供实现。

fd57f46334a44616c17ee0269dd41ee7.png

JPA和Hibernate的关系就像JDBC和JDBC驱动的关系,JPA是规范,Hibernate除了作为ORM框架之外,它也是一种JPA实现。

JPA怎么取代Hibernate呢?JDBC规范可以驱动底层数据库吗?答案是否定的,也就是说,如果使用JPA规范进行数据库操作,底层需要hibernate作为其实现类完成数据持久化工作。

JPA常用注解

@Entity

作用:指定当前类是实体类。

@Table

作用:指定实体类和表之间的对应关系。

属性:

name:指定数据库表的名称

@Id

作用:指定当前字段是主键。

@GeneratedValue

作用:指定主键的生成方式。。

属性:

strategy :指定主键生成策略。

@Column

作用:指定实体类属性和数据库表之间的对应关系

属性:

name:指定数据库表的列名称。

unique:是否唯一

nullable:是否可以为空

inserttable:是否可以插入

updateable:是否可以更新

columnDefinition: 定义建表时创建此列的DDL

secondaryTable: 从表名。如果此列不建在主表上(默认建在主表),该属性定义该列所在从表的名字搭建开发环境[重点]

入门例子

pom.xml中导入hibernate的jar依赖

hibernate-entitymanager

hibernate-c3p0

JPA的核心配置文件

位置:

srcmainresourcesMETA-INFpersistence.xml

内容:

<!--配置持久化单元

配置实体类和数据库表的映射

/**

测试保存

public 

ca4ce5899ea6a3db3ed6cfb9cb94d381.png

运行后输出如下

a537c09a50c882b2b0cd68c18cd6ead1.png

表中插入成功

753956d6b55f830865e34234678e5a9d.png

解决中文

在数据库url中加编码

<property 

b67bf2fdfd204035ab20e3e76e797a2f.png

如果使用jdk9会报异常

java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

产生这个问题的原因主要是使用JDK 9.0 及其以上,JDK9做了巨大改变,可以使用jdk8

如果使用jdk9,需要下载四个jar包

可以下载javax.activation-1.2.0.jar,jaxb-api-2.3.0.jar,jaxb-core-2.3.0.jar,jaxb-impl-2.3.0.jar四个jar包

JAXB API是java EE的API,而java EE的API不再包含对java SE 9的模块中,因此JAXB APIs不再包含在java SE 9的默认类路径中,因此引发了以上报错

主键生成策略

生成规则由@GeneratedValue设定,JPA提供的四种标准用法为TABLE,SEQUENCE,IDENTITY,AUTO

IDENTITY:主键由数据库自动生成(主要是自动增长型)

用法:

@Id  

SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。

用法:

@Id  

//@SequenceGenerator源码中的定义

@Target

AUTO:主键由程序控制

用法:

@Id  
    

TABLE:使用一个特定的数据库表格来保存主键

用法:

@Id  
    

//@TableGenerator的定义:

@Target

//这里应用表tb_generator,定义为 :

CREATE 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值