1、什么是jpa?

  • 一堆不想整在这博客里面的理论知识。这些理论玩意儿就应该自行领悟到自己脑海里

1)、JPA & Spring Data JPA

1.1)、JPA

  • JPA是Java Persistence API的简称,中文名Java持久层API,是Sun官方提出的Java持久化规范.

  • 其设计目标主要是为了简化现有的持久化开发工作和整合ORM技术。

  • JPA使用XML文件或注解(JDK 5.0或更高版本)来描述对象-关联表的映射关系,能够将运行期的实体对象持久化到数据库,它为Java开发人员提供了一种ORM工具来管理Java应用中的关系数据。

  • 简单地说,JPA就是为POJO(Plain Ordinary Java Object)提供持久化的标准规范,即将Java的普通对象通过对象关系映射(Object-Relational Mapping,ORM)持久化到数据库中

  • 由于JPA是在充分吸收了现有Hibernate,TopLink,JDO等ORM框架的基础上发展而来的,因而具有易于 使用、伸缩性强等优点。

1.2)、Spring Data JPA

  • Spring Data JPA 是 Spring 基于 Spring Data 框架、在JPA 规范的基础上开发的一个框架,使用 Spring Data JPA 可以极大地简化JPA 的写法,可以在几乎不用写实现的情况下实现对数据库的访问和操作,除了CRUD外,还包括分页和排序等一些常用的功能。

  • Spring Data JPA 还提供了对分页查询、自定义SQL、查询指定N条记录、联表查询等功能的支持

结论:

  • JPA不是一种新的ORM框架,它的出现只是用于规范现有的ORM技术,它不能取代现有的Hibernate、TopLink等框架。相反,在采用JPA开发时,我们将仍将使用到这些ORM框架,只是此时开发出来的应用不再依赖于某个持久化提供商。应用可以在不修改代码的情况下在任何JPA环境下运行,真正做到低耦合,可扩展的程序设计。

2)、Hibernate & JPA

1.1)、、JPA

  • 全称Java Persistence API,通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。

  • JPA的出现有两个原因:

    • 其一,简化现有Java EE和Java SE应用的对象持久化的开发工作;

    • 其二,Sun希望整合对ORM技术,实现持久化领域的统一。

  • JPA提供的技术:

    • 1)ORM映射元数据:JPA支持XML和JDK 5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;

    • 2)JPA 的API:用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。

    • 3)查询语言:通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。

3)、JPA & Hibernate 关系

  • JPA是规范,Hibernate是框架,JPA是持久化规范,而Hibernate实现了JPA

4)、Hibernate VS Mybatis

  • Mybatis:小巧、方便、高效、简单、直接、半自动

  • Hibenate:强大、方便、高效、复杂、绕弯子、全自动

上面这些是用来吹牛逼的,下面的领会就可以了

  • 按老衲的话来说:

    • 都玩过mybatis了,但是mybatis只是一个半自动的dao层框架,即:虽然这个框架可以去和数据库对接,但是:我们程序员还是需要去数据库里面进行操作,这很不好,因为:和老衲同样思想的开发工程师都懒,所以:让老衲只专注于写程序,不用整什么前台、不用整什么数据库建表之类的,可行不?

    • 当然可以,springboot官网帮我们提供了一个东西:jpa,它就可以做到,让老衲这些人更轻松自在

    • 老衲的精华:

      • jpa:全自动dao层框架,是面向对象式的dao层框架,我们只需要在实体类中加入相应的注解,它就可以自动帮我们在链接的数据库中生成数据库、表、字段、数据.....。因此:jpa就是真正的ORM思想的dao层框架

2、玩一下jpa

一开始我的数据库表如下:

3、导入依赖


<!-- 导入jpa需要的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency> <!-- 项目需要的依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency> <dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.75</version>
</dependency> <dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>

4、编写yml文件


spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatis_spring?useUnicode=true&characterEncoding=utf-8
username: root
password: "072413" jpa:
hibernate: # 这里可以不用hibernate,还可以用hikari —— 这个在整合jdbc时见过 ——— 就是当时输出的那句话
ddl-auto: update # 指定为update,每次启动项目检测表结构有变化的时候会新增字段,表不存在时会新建表
# 如果指定create,则每次启动项目都会清空数据并删除表,再新建
# 这里面还可以跟:create-drop/create/none
naming:
# 指定jpa的自动表生成策略,驼峰自动映射为下划线格式
implicit-strategy: org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl # 默认就是这个
# physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
# 注掉的这种是:不用驼峰名字,直接把实体类的大写字母变小写就完了 show-sql: true # 在控制台显示sql语句( 不是真的sql语句,而是相当于:说明 ),默认是false properties.hibernate.dialect: org.hibernate.dialect.MySQL55Dialect # 使用INNODB引擎
database-platform: org.hibernate.dialect.MySQL55Dialect
# 使用JPA创建表时,默认使用的存储引擎是MyISAM,通过指定数据库版本,可以使用InnoDB

5、编写实体类


package cn.xiegongzi.entity; import lombok.Data;
import org.springframework.data.annotation.Id; import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import java.io.Serializable; @Data
// @AllArgsConstructor
// @NoArgsConstructor // 注意:使用jpa时,最好别使用lombok的的无参和有参,因为:lombok其实在它的底层已经把java
// 代码给改变了,因此:这里要是搭配jpa的话,很容易出问题( 是本人测试了几次得出来的结果
// 我把这个lombok的有参、无参注解去掉之后,就得吃了,加上就时不时报一次错,原因我也不知道为什么 ) @Entity // 表明:当前类和数据库中的这个同类名的数据库表形成ORM映射关系
// 要是数据库中没有这个表,那么:根据yml配置的ddl-auto: update 就会自动帮我们生成
// 注:
public class ZiXieQing implements Serializable { @javax.persistence.Id
@Id // 表明这个属性是数据库表中的主键
@GeneratedValue(strategy = GenerationType.IDENTITY) // 表示:自增 默认是auto,即:和数据库中的auto_increment是一样的
private int id; @Column( length = 15 ) // 生成数据库中的列字段,里面的参数不止这些,还可以用其他的,对应数据库列字段的那些操作
// 可以点进源码看一下
private String name; // public ZiXieQing() {
// } public ZiXieQing(int id, String name) {
this.id = id;
this.name = name;
}
}

附:@Column注解中可以支持的属性


@Target({ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Column {
String name() default ""; boolean unique() default false; boolean nullable() default true; boolean insertable() default true; boolean updatable() default true; String columnDefinition() default ""; String table() default ""; int length() default 255; int precision() default 0; int scale() default 0;
}

6、编写mapper


package cn.xiegongzi.mapper; import cn.xiegongzi.entity.ZiXieQing;
import org.springframework.data.jpa.repository.JpaRepository; @Component // 注:这里别用@Mapper这个注解,因为:@mapper是mybatis提供的注解
// JpaRepository相对mybatis来说就是是外部的东西。因此:并不能支持@mapper注解
// @Repository 当然使用这个spring自带的注解也行 @Configuration 这个注解更可以了
public interface ZiXieQingMapper extends JpaRepository<ZiXieQing , Integer> {
// JpaRepository这里面有默认的一些方法,即:增删查改...
// JpaRepository<ZiXieQing , Integer> 本来样子是:JpaRepository<T , ID>
// T 表示:自己编写的实体类 类型
// ID 表示: 实体类中id字段的类型 注:本示例中,实体类中id是int 因为要弄自增就必须为int,不然和数据库映射时对不上
}

附:JpaRepository中提供的方法

7、编写service接口和实现类

8、编写controller

9、启动程序,测试

现在去看一下数据库

生成出来了,完成

12 — springboot集成JPA — 更新完毕的更多相关文章

  1. 13 — springboot集成mybatis-plus — 更新完毕

    1.mybatis-plus需要掌握的知识 1).mybatis-plus是什么? 不写了,老衲一般都是直接进官网 mybatis-plus官网地址:https://baomidou.com/guid ...

  2. 11 — springboot集成swagger — 更新完毕

    1.前言 理论知识滤过,自行百度百科swagger是什么 2.导入依赖 <!-- swagger所需要的依赖--> <dependency> <groupId>io ...

  3. Spring Data JPA系列2:SpringBoot集成JPA详细教程,快速在项目中熟练使用JPA

    大家好,又见面了. 这是Spring Data JPA系列的第2篇,在上一篇<Spring Data JPA系列1:JDBC.ORM.JPA.Spring Data JPA,傻傻分不清楚?给你个 ...

  4. springboot 集成 jpa/hibernate

    pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  5. springboot支付项目之springboot集成jpa

    springboot集成spring-jpa 本文主要内容: 1:spring boot怎么集成spring-jpa以及第一个jpa查询示例 如jpa几个常用注解.lombok注解使用 2:怎么设置i ...

  6. Springboot - 集成 JPA

    1.什么是 JPA? JPA就是Java Persistence API的意思,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. 2. JPA 具有什么优 ...

  7. springboot集成jpa

    spring data jpa简介 spring data jpa是spring基于hibernate及jpa规范封装出来的一套持久层框架.该框架极大的降低了开发者工作量,提升开发效率.提供的关键字可 ...

  8. springboot集成jpa操作mybatis数据库

    数据库如下 CREATE TABLE `jpa`.`Untitled` ( `cust_id` bigint() NOT NULL AUTO_INCREMENT, `cust_address` var ...

  9. springboot集成jpa,在postgresql数据库中创建主键自增表

    依赖文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http:/ ...

随机推荐

  1. vs2015 MSB600 "inf2cat.ext"已退出,代码为2

    使用vs2015编译XDMA驱动过程中,报如下错误: vs2015 MSB600 "inf2cat.ext"已退出,代码为2 在使用Qt编译PCIE码表的过程中,出现C1038:无 ...

  2. dhcpd 启动失败No subnet declaration for wlan0

    今天在调试机器的WIFI热点,好不容易把dhcp编译打包进去,服务启动出现报错No subnet declaration for wlan0,详细信息如下: Internet Systems Cons ...

  3. Luogu P2822 [NOIp2016提高组]组合数问题 | 数学、二维前缀和

    题目链接 思路:组合数就是杨辉三角,那么我们只要构造一个杨辉三角就行了.记得要取模,不然会爆.然后,再用二维前缀和统计各种情况下组合数是k的倍数的方案数.询问时直接O(1)输出即可. #include ...

  4. ansible安装和批量执行命令

    yum install -y ansible 编辑 /etc/ansible/hosts 文件 # This is the default ansible 'hosts' file.## It sho ...

  5. Centos 7 成功安装 dosbox 解决 "error: expected primary-expression before ‘,’ token" 错误

    dosbox-0.74 bug 修复版下载: http://download.csdn.net/detail/yangbodong22011/9663271 注意:这篇博客解决了下面这个问题,如果你也 ...

  6. VIM处理工具与正则表达式

    *本文中/data目录为训练目录 1.在vim中设置TAB缩进为四个字符 打开vim 输入:set tabstop=4 2.复制/etc/rc.d/init.d/functions文件至/tmp/,替 ...

  7. macos command 'clang' failed with exit status 1

    export CC=$(which gcc)export CXX=$(which g++)pip install fbprophet CC=clang pip install gevent

  8. Linux基础三:用户和组

    三.用户和组 1.概念 (1).用户概念: 用户是用来运行某一些进程.拥有某一些文件或目录. 在Linux里面,用户分成三大类:root用户.系统用户.普通用户. 用户是用UID来唯一标识身份的,且r ...

  9. 大爽Python入门教程 2-3 字符串,列表,字典

    大爽Python入门公开课教案 点击查看教程总目录 除了通用的序列方法, 列表和字符串还有些自己的专属方法. 后面介绍有些是英中文对照介绍(英文来自官方文档), 便于大家更深入的去理解其意思. 灵活的 ...

  10. Spark SQL知识点大全与实战

    Spark SQL概述 1.什么是Spark SQL Spark SQL是Spark用于结构化数据(structured data)处理的Spark模块. 与基本的Spark RDD API不同,Sp ...