文章目录

  • JPA技术
  • 常用注解
    • Springboot整合JPA
      • 1.引入JPA依赖
      • 2.配置
      • 3.启动类
      • 4.实体类
      • 5.定义接口和数据库交互(dao)
      • 6.JPA中使用原生态的SQL语句
      • 7.TestDemo
      • 8.JPA的懒加载

JPA技术

JPA 数据持久化的ORM全自动框架。ORM 框架(对象——关系映射)

常用注解

这里的一些注解解释如下:

  • @Entity 是一个类注解,用来注解该类是一个实体类用来进行和数据库中的表建立关联关系,首次启动项目的时候,默认会在数据中生成一个同实体类相同名字的表(table),也可以通过注解中的 name 属性来修改表(table)名称, 如@Entity(name=“user”) , 这样数据库中表的名称则是 user 。该注解十分重要,如果没有该注解首次启动项目的时候你会发现数据库没有生成对应的表。

  • @Table 注解也是一个类注解,该注解可以用来修改表的名字,该注解完全可以忽略掉不用,@Entity 注解已具备该注解的功能。

  • @Id 类的属性注解,该注解表明该属性字段是一个主键,该属性必须具备,不可缺少。

  • @GeneratedValue 该注解通常和 @Id 主键注解一起使用,用来定义主键的呈现形式,该注解通常有多种使用策略,先总结如下:

  • @GeneratedValue(strategy= GenerationType.IDENTITY) 该注解由数据库自动生成,主键自增型,在 mysql 数据库中使用最频繁,oracle 不支持。

  • @GeneratedValue(strategy= GenerationType.AUTO) 主键由程序控制,默认的主键生成策略,oracle 默认是序列化的方式,mysql 默认是主键自增的方式。

  • @GeneratedValue(strategy= GenerationType.SEQUENCE) 根据底层数据库的序列来生成主键,条件是数据库支持序列,Oracle支持,Mysql不支持。

  • @GeneratedValue(strategy= GenerationType.TABLE) 使用一个特定的数据库表格来保存主键,较少使用。

Springboot整合JPA

1.引入JPA依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

2.配置

文件位置resources——config包——application.yml
1.启动数据库 ,新建一个数据库 mybatis_db
2.自定义端口号:8099
3.配置数据源:mybatis_db
4.json时间处理
5.jpa基本设置

server:port: 8099#数据源配置
spring:datasource:druid:    //配置数据源 druid  数据库名:mybatis_db url: jdbc:mysql://localhost:3306/mybatis_db?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=trueusername: rootpassword: 1234driver-class-name: com.mysql.cj.jdbc.Driver#json时间处理jackson:date-format: yyyy-MM-dd HH:mm:sstime-zone: GMT+8jpa:hibernate:ddl-auto: update   //自动更新show-sql: true    //日志中显示sql语句logging:level:com.dyit.springboot: debug

3.启动类

@SpringBootApplication
public class Main {public static void main(String[] args) {SpringApplication.run(Main.class);}
}

4.实体类

映射数据库的表

@Entity
@Table(name = "Person_tab")  //表
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Person {@Id   //主键@GeneratedValue(strategy = GenerationType.IDENTITY)//根据数据库的主键策略 主键自增@Column(name="person_id")  //行 行名private Integer id;@Column(name="person_name")private String name;@Column(name="person_gender")private String gender;@Column(name="person_age")private Integer age;@Column(name="person_phone")private String phone;
}

5.定义接口和数据库交互(dao)

dao 与数据库交互的接口,用来处理数据库增删改查

@Repository注解
作为DAO对象(数据访问对象,Data Access Objects),这些类可以直接对数据库进行crud操作。

@Repository
public interface IAccountDao extends JpaRepository<Account,Integer> {Account findByUsername(String username);@Query(value = "SELECT account_username FROM account_tab",nativeQuery = true)String[] selectAllUsernames();
}


6.JPA中使用原生态的SQL语句

@Query注解 对数据库进行操作

value : 取值,要么使用原生SQL,要么使用JPQL
nativeQuery:表示是否采用原生SQL,设为true。诸如select * from tableName

@Repository
public interface IPublisherDao extends JpaRepository<Publisher,Integer> {@Query(value = "SELECT * FROM publisher_tab WHERE publisher_name=?1 AND publisher_loc=?2",nativeQuery = true)Publisher findByNamexAndLocx(String name,String loc);
}

持久层(Persistence Layer),即实现数据持久化应用领域的一个逻辑层面,将数据使用者和数据实体相关联。

7.TestDemo

  • 添加居民信息
    residentsDao.save(residents)相当于把新创建的residents居民对象添加到数据库中,这就是持久化过程,在这个过程中主键也会自动添加

@Service
对Service层的注解,Service也叫服务层,被称为服务,可以理解就是对一个或多个DAO进行的再次封装,封装成一个服务,所以这里也就不会是一个原子操作了,需要事物控制。
service层具体要调用已经定义的dao层接口,封装service层业务逻辑有利于通用的业务逻辑的独立性和重复利用性。程序显得非常简洁。
这里调用了居民表的dao接口,使用@Autowired注解自动注入,同时新增一个居民信息,账户表也新增一个账户,调用loginDao接口

@Transactional表示事务的注解 (当前事务指的就是当前对数据库操作的一系列指令)。在执行完用户操作,自动comit

8.JPA的懒加载

JPA在进行多表查询时,采用懒加载,先加载一张表内容,再从另外一张表根据字段查询

#查询图书表中所有信息,先查图书表再根据出版社id查询出版社信息Hibernate: select book0_.book_id as book_id1_0_, book0_.book_isbn as book_isb2_0_, book0_.book_publisher as book_pub4_0_, book0_.book_title as book_tit3_0_ from book_tab book0_
Hibernate: select publisher0_.publisher_id as publishe1_1_0_, publisher0_.publisher_loc as publishe2_1_0_, publisher0_.publisher_name as publishe3_1_0_ from publisher_tab publisher0_ where publisher0_.publisher_id=?
Hibernate: select publisher0_.publisher_id as publishe1_1_0_, publisher0_.publisher_loc as publishe2_1_0_, publisher0_.publisher_name as publishe3_1_0_ from publisher_tab publisher0_ where publisher0_.publisher_id=?
Hibernate: select publisher0_.publisher_id as publishe1_1_0_, publisher0_.publisher_loc as publishe2_1_0_, publisher0_.publisher_name as publishe3_1_0_ from publisher_tab publisher0_ where publisher0_.publisher_id=?

Springboot整合JPA相关推荐

  1. (二)SpringBoot 整合 JPA

    一.JPA简介 JPA(java persistence api)并不是一个框架,而是一组规范.Hibernate.TopLink.OpenJPA都实现了JPA规范,不过Hinernate最成功).所 ...

  2. Springboot整合JPA多数据源(Oracle+Mysql)

    Springboot整合JPA多数据源 1. Maven 2. 基本配置 2.1 DataSource 3. 多数据源配置 3.1 JpaConfigOracle 3.2 JpaConfigMysql ...

  3. springboot整合JPA+MYSQL+queryDSL数据增删改查

    Spring Boot Jpa 是 Spring 基于 ORM 框架.Jpa 规范的基础上封装的一套 Jpa 应用框架,可使开发者用极简的代码即可实现对数据的访问和操作.它提供了包括增删改查等在内的常 ...

  4. SpringBoot整合JPA 数据库自动增加字段问题记录

    Spring整合JPA启动的时候忽然发现,数据增加了两个字段,我当时就很纳闷了,我自己写的有实体有字段,并且跟数据一致,为什么要给我增加两个字段哪? 我的实体如下: 启动的时候就变成这样了 然后就找度 ...

  5. springboot整合jpa+h2

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

  6. 【idea】Springboot整合jpa

    第一步快速搭建springboot项目:在你建立的工程下创建 Module 选择Spring initializr创建. 第二步:修改包名.项目名.web项目打成war包.在Type处选择: Mave ...

  7. springboot整合jpa之连接MySql实现crud

    整体思路:搭建springboot一定要注意版本问题,各个jar包之间是否兼容.搭建可以从上往下进行,是一个从Controller层和Service层-->Dao层的一个过程. 1.添加mave ...

  8. 七十三、SpringBoot整合Jpa

    @Author:Runsen 来源:尚硅谷 下面建议读者学习尚硅谷的B站的SpringBoot视频,我是学雷丰阳视频入门的. 具体链接如下:B站尚硅谷SpringBoot教程 这里需要注意的是:jpa ...

  9. SpringBoot整合Jpa配置多数据源

    前言: 最近接手的SpringBoot项目,原项目数据存储在Oracle上,因后期新增功能考虑到数据量等问题,后期新加功能数据存放在Vertica上,项目中数据库这边主要是用Jpa去持久. 环境: S ...

最新文章

  1. [导入]extjs 教程
  2. Linux入门教程:Linux权限管理
  3. 图文:知乎千万级高性能长连接网关是如何搭建的?
  4. 编写 matlab怎么调用 8 点和 16 点的 fft,8点基于DIT的FFT的实现
  5. 《陶哲轩实分析》部分勘误
  6. activexobject对象不能创建_面向对象设计方法(Object oriented)
  7. Jar包部署-指定jsp打包配置
  8. python 列表解析式_python列表解析式,字典解析式,集合解析式和生成器
  9. mmap函数_Linux内存映射mmap原理分析
  10. 射频识别实训总结_个人总结
  11. mvc5 源码解析2-2 mvchandler的执行
  12. Java之品优购课程讲义_day09(2)
  13. python多个条件组合覆盖_白盒测试系列(五)条件组合覆盖
  14. win7安装后系统保留分区无法分配盘符导致无法激活原因
  15. js 时间转东八区_JS时区时间转换详解
  16. “线上食堂”项目报告
  17. C++:实现将华氏度转换为摄氏度
  18. 【VMware】【XShell】从虚拟机下载文件到本地
  19. 「志强课堂」成功的微商是怎么做好推广引流的?
  20. Java程序告诉你A股沪深300哪些股票值得投资

热门文章

  1. Python安装py2neo库
  2. deepin安装navicat12 premium (破解版)替换商店的11版
  3. 2023前端二面react面试题(边面边更)
  4. 火狐浏览器httpRequest插件
  5. Saber软件和其它软件的接口
  6. ios客户端学习笔记(七):iOS客户端的UI设计
  7. 一文讲透图像分割经典网络:FCN、Unet、DeepLabV3+、Vnet、Unet++
  8. QGIS|如何制作行政区划四色图
  9. 数据结构(C语言第2版) 课后习题答案之 第六章 图
  10. 中国科学院大学计算机研究所推免,国科大“推免面试直通车”首入上海交大校园...