JPA (Java Persistence API) 是 Sun 官方提出的 Java 持久化规范。它为 Java 开发人员提供了一种对象/关联映射工具来管理 Java 应用中的关系数据。他的出现主要是为了简化现有的持久化开发工作和整合 ORM 技术,结束现在 Hibernate,TopLink,JDO 等 ORM 框架各自为营的凌乱局面。JPA 在充分吸收了现有 Hibernate,TopLink,JDO 等ORM框架的基础上发展而来的,具有易于使用,伸缩性强等优点。从上面的解释中我们可以了解到JPA 是一套规范,而类似 Hibernate,TopLink,JDO 这些产品是实现了 JPA 规范。了解了什么是 JPA,我们来看看本文的主角——spring data jpa
Spring 基于 ORM 框架、JPA 规范的基础上封装的一套 JPA 应用框架,底层使用了 Hibernate 的 JPA 技术实现,可使开发者用极简的代码即可实现对数据的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率。什么意思呢?如果用过Hibernate或者MyBatis的话,就会知道对象关系映射(ORM)框架有多么方便。但是Spring Data JPA框架功能更进一步,为我们做了 一个数据持久层框架几乎能做的任何事情
它需要域类来管理以及域类的 id类型作为类型参数。该接口主要用作标记接口,以捕获要使用的类型并帮助您发现扩展该接口的接口。该CrudRepository接口为正在管理的实体类提供复杂的 CRUD 功能。
是一个类注解,用来注解该类是一个实体类用来进行和数据库中的表建立关联关系,首次启动项目的时候,默认会在数据中生成一个同实体类相同名字的表(table),也可以通过注解中的 name 属性来修改表(table)名称, 如@Entity(name=“user”) , 这样数据库中表的名称则是 user 。该注解十分重要,如果没有该注解首次启动项目的时候你会发现数据库没有生成对应的表。
注解也是一个类注解,该注解可以用来修改表的名字,该注解完全可以忽略掉不用,@Entity 注解已具备该注解的功能。
类的属性注解,该注解表明该属性字段是一个主键,该属性必须具备,不可缺少。
该注解通常和 @Id 主键注解一起使用,用来定义主键的呈现形式,该注解通常有多种使用策略,先总结如下:
GenerationType.IDENTITY :该注解由数据库自动生成,主键自增型,在 mysql 数据库中使用最频繁,oracle 不支持。
GenerationType.AUTO:主键由程序控制,默认的主键生成策略,oracle 默认是序列化的方式,mysql 默认是主键自增的方式。
GenerationType.SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列,Oracle支持,Mysql不支持。
GenerationType.TABLE:使用一个特定的数据库表格来保存主键,较少使用。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
spring: datasource: name: mybdb type: com.alibaba.druid.pool.DruidDataSource url: jdbc:mysql://localhost:3306/exam001?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8 username: root password: root driver-class-name: com.mysql.cj.jdbc.Driver jpa: show-sql: true #控制台打印sql properties: hibernate: dialect: org.hibernate.dialect.MySQL5InnoDBDialect #这是数据库的方言配置 hbm2ddl: auto: create #启动是创建表,不建议使用(建议创建表之后改为update)
@EnableJpaRepositories("repositroy类所在的包")
@Data @Entity(name = "student") //指定表名 public class Student { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) //主键自增 private Integer id ; @Column(nullable = false, unique = true) private String username; @Column(nullable = false, unique = true) private String userPwd; }
注意:JpaRepository<T,id> id 的类型根据实体类的id类型来判断
public interface StudentRespositroy extends JpaRepository<Student, Integer > { }
@Transactional public interface StudentRespositroy extends JpaRepository<Student, String> { @Query(value = "select s from student s") List<Student> selAll(); }
原文:https://www.cnblogs.com/anqiao/p/14838612.html