spring data jpa
首先要介绍一下JPA,JPA就是Java Persistence API翻译过来就是java持久化API,它是在sun提出的java持久化规范,这些接口都在javax.persistence包下。JPA的出现最要是为了整合ORM框架,从本质上来说,它其实算是一种规范,而它提供的基本都是接口,而非具体实现,Hibernate就是一个不错的实现例子。它两的关系可以类比jdbc与jdbc驱动.
那么Spring Data JPA与JPA的关系?
Spring Data JPA的作用可以理解为在JPA规范的基础下提供了Repository层的实现,你还可以自由的选择一种符合JPA规范的ORM框架。
虽然ORM框架都实现了JPA规范,但是在不同ORM框架之间切换是需要编写的代码有一些差异,而通过使用Spring Data Jpa能够方便大家在不同的ORM框架中间进行切换而不要更改代码。可以看下图类比。
springboot整合spring data JPA demo
首先是配置文件
spring:
jpa:
show-sql: true
hibernate:
ddl-auto: none
properties:
hibernate.format_sql: true
open-in-view: false
datasource:
url: jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true
username: root
password: root
选择的orm框架是hibernate
一些属性
show_sql :属性用于指定是否在控制台上输出 SQL 语句
ddl-auto:
create:每次运行程序时,都会重新创建表,故而数据会丢失
create-drop:每次运行程序时会先创建表结构,然后待程序结束时清空表
upadte:每次运行程序,没有表时会创建表,如果对象发生改变会更新表结构,原有数据不会清空,只会更新(推荐使用)
validate:运行程序会校验数据与数据库的字段类型是否相同,字段不同会报错
none: 禁用DDL处理
format_sql:格式化sql语句
datasource下就是一些配置数据库的信息
定义实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name="user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id",nullable = false)
private Long id;
@Basic
@Column(name="username",nullable = false)
private String username;
@Basic
@Column(name="userage",nullable = false)
private String userage;
@Basic
@Column(name="userStatus",nullable = false)
private Integer userStatus;
@Basic
@Column(name = "create_Time",nullable = false)
private Date createTime;
}
@Id代表主键
@GeneratedValue用于标注主键的生成策略,通过strategy 属性指定
@GeneratedValue注解的strategy属性提供四种值:
AUTO主键由程序控制, 是默认选项 ,不设置就是这个
IDENTITY 主键由数据库生成, 采用数据库自增长, Oracle不支持这种方式
SEQUENCE 通过数据库的序列产生主键, MYSQL 不支持
Table 提供特定的数据库产生主键, 该方式更有利于数据库的移植
@Entity 注解表明这是一个实体bean类型
@Basic 默认添加,写不写都行
@table 代表对应映射的表
@column代表要映射的表中字段,nullable为是否可为空,在企业级开发中一般不可为空
定义Repository层
public interface UserRepository extends JpaRepository<User,Long> {
User findByUsername(String name);
}
我们只需要继承JpaRepository接口就可以了,其他工作spring data JPA会帮我们完成,自动生成sql。那个类型第一个参数是实体类类类型,第二个参数为主键类型
我们只需要按照spring data JPA的命名规则给方法命名即可!
关键字 | 方法命名 | sql where 字句 |
---|---|---|
And | findByNameAndid | where name= ? and id =? |
Or | findByNameOrSex | where name= ? or sex=? |
Is,Equals | findById,findByIdEquals | where id= ? |
Between | findByIdBetween | where id between ? and ? |
LessThan | findByIdLessThan | where id < ? |
GreaterThan | findByIdGreaterThan | where id > ? |
GreaterThanEquals | findByIdGreaterThanEquals | where id > = ? |
After | findByIdAfter | where id > ? |
Before | findByIdBefore | where id < ? |
IsNull | findByNameIsNull | where name is null |
isNotNull,NotNull | findByNameNotNull | where name is not null |
Like | findByNameLike | where name like ? |
NotLike | findByNameNotLike | where name not like ? |
StartingWith | findByNameStartingWith | where name like ‘?%’ |
EndingWith | findByNameEndingWith | where name like ‘%?’ |
Containing | findByNameContaining | where name like ‘%?%’ |
OrderBy | findByIdOrderByXDesc | where id=? order by x desc |
Not | findByNameNot | where name <> ? |
IgnoreCase | findByNameIgnoreCase | where UPPER(name)=UPPER(?) |
可以看到按照特定的命名方式,spring data JPA就可以自动生成sql语句