第一天:

 springdatajpa
day1:orm思想和hibernate以及jpa的概述和jpa的基本操作
day2:springdatajpa的运行原理以及基本操作
day3:多表操作,复杂查询 第一 orm思想
主要目的:操作实体类就相当于操作数据库表
建立两个映射关系:
实体类和表的映射关系
实体类中属性和表中字段的映射关系
不再重点关注:sql语句 实现了ORM思想的框架:mybatis,hibernate 第二 hibernate框架介绍
Hibernate是一个开放源代码的对象关系映射框架,
它对JDBC进行了非常轻量级的对象封装,
它将POJO与数据库表建立映射关系,是一个全自动的orm框架 第三 JPA规范
jpa规范,实现jpa规范,内部是由接口和抽象类组成 第四 jpa的基本操作
案例:是客户的相关操作(增删改查)
客户:就是一家公司
客户表: jpa操作的操作步骤
1.加载配置文件创建实体管理器工厂
Persisitence:静态方法(根据持久化单元名称创建实体管理器工厂)
createEntityMnagerFactory(持久化单元名称)
作用:创建实体管理器工厂 2.根据实体管理器工厂,创建实体管理器
EntityManagerFactory :获取EntityManager对象
方法:createEntityManager
* 内部维护的很多的内容
内部维护了数据库信息,
维护了缓存信息
维护了所有的实体管理器对象
再创建EntityManagerFactory的过程中会根据配置创建数据库表
* EntityManagerFactory的创建过程比较浪费资源
特点:线程安全的对象
多个线程访问同一个EntityManagerFactory不会有线程安全问题
* 如何解决EntityManagerFactory的创建过程浪费资源(耗时)的问题?
思路:创建一个公共的EntityManagerFactory的对象
* 静态代码块的形式创建EntityManagerFactory 3.创建事务对象,开启事务
EntityManager对象:实体类管理器
beginTransaction : 创建事务对象
presist : 保存
merge : 更新
remove : 删除
find/getRefrence : 根据id查询 Transaction 对象 : 事务
begin:开启事务
commit:提交事务
rollback:回滚
4.增删改查操作
5.提交事务
6.释放资源 i.搭建环境的过程
1.创建maven工程导入坐标
2.需要配置jpa的核心配置文件
*位置:配置到类路径下的一个叫做 META-INF 的文件夹下
*命名:persistence.xml
3.编写客户的实体类
4.配置实体类和表,类中属性和表中字段的映射关系
5.保存客户到数据库中
ii.完成基本CRUD案例
persist : 保存
merge : 更新
remove : 删除
find/getRefrence : 根据id查询 iii.jpql查询
sql:查询的是表和表中的字段
jpql:查询的是实体类和类中的属性
* jpql和sql语句的语法相似 1.查询全部
2.分页查询
3.统计查询
4.条件查询
5.排序

  回顾jdbc操作以及引入orm

  jpa

第二天

 orm思想,hibernate,JPA的相关操作

 * SpringDataJpa

 第一 springDataJpa的概述

 第二 springDataJpa的入门操作
案例:客户的基本CRUD
i.搭建环境
创建工程导入坐标
配置spring的配置文件(配置spring Data jpa的整合)
编写实体类(Customer),使用jpa注解配置映射关系
ii.编写一个符合springDataJpa的dao层接口
* 只需要编写dao层接口,不需要编写dao层接口的实现类
* dao层接口规范
1.需要继承两个接口(JpaRepository,JpaSpecificationExecutor)
2.需要提供响应的泛型 *
findOne(id) :根据id查询
save(customer):保存或者更新(依据:传递的实体类对象中,是否包含id属性)
delete(id) :根据id删除
findAll() : 查询全部 第三 springDataJpa的运行过程和原理剖析
1.通过JdkDynamicAopProxy的invoke方法创建了一个动态代理对象
2.SimpleJpaRepository当中封装了JPA的操作(借助JPA的api完成数据库的CRUD)
3.通过hibernate完成数据库操作(封装了jdbc) 第四 复杂查询
i.借助接口中的定义好的方法完成查询
findOne(id):根据id查询
ii.jpql的查询方式
jpql : jpa query language (jpq查询语言)
特点:语法或关键字和sql语句类似
查询的是类和类中的属性 * 需要将JPQL语句配置到接口方法上
1.特有的查询:需要在dao接口上配置方法
2.在新添加的方法上,使用注解的形式配置jpql查询语句
3.注解 : @Query iii.sql语句的查询
1.特有的查询:需要在dao接口上配置方法
2.在新添加的方法上,使用注解的形式配置sql查询语句
3.注解 : @Query
value :jpql语句 | sql语句
nativeQuery :false(使用jpql查询) | true(使用本地查询:sql查询)
是否使用本地查询 iiii.方法名称规则查询

  springDataJpa,jpa,hibernate关系

  动态分析

  springdatajpa的运行过程

第三天

  1 回顾
2 i.springDatajpa,jpa规范,hibernate三者之间的关系
3 code -- > springDatajpa --> jpa规范的API --> hibernate
4 ii.符合springDataJpa规范的dao层接口的编写规则
5 1.需要实现两个接口(JpaRepository,JapSpecificationExecutor)
6 2.提供响应的泛型
7 iii.运行过程
8 * 动态代理的方式:动态代理对象
9 iiii.查询
10
11 第一 Specifications动态查询
12
13 JpaSpecificationExecutor 方法列表
14
15 T findOne(Specification<T> spec); //查询单个对象
16
17 List<T> findAll(Specification<T> spec); //查询列表
18
19 //查询全部,分页
20 //pageable:分页参数
21 //返回值:分页pageBean(page:是springdatajpa提供的)
22 Page<T> findAll(Specification<T> spec, Pageable pageable);
23
24 //查询列表
25 //Sort:排序参数
26 List<T> findAll(Specification<T> spec, Sort sort);
27
28 long count(Specification<T> spec);//统计查询
29
30 * Specification :查询条件
31 自定义我们自己的Specification实现类
32 实现
33 //root:查询的根对象(查询的任何属性都可以从根对象中获取)
34 //CriteriaQuery:顶层查询对象,自定义查询方式(了解:一般不用)
35 //CriteriaBuilder:查询的构造器,封装了很多的查询条件
36 Predicate toPredicate(Root<T> root, CriteriaQuery<?> query, CriteriaBuilder cb); //封装查询条件
37
38 第二 多表之间的关系和操作多表的操作步骤
39
40 表关系
41 一对一
42 一对多:
43 一的一方:主表
44 多的一方:从表
45 外键:需要再从表上新建一列作为外键,他的取值来源于主表的主键
46 多对多:
47 中间表:中间表中最少应该由两个字段组成,这两个字段做为外键指向两张表的主键,又组成了联合主键
48
49 讲师对学员:一对多关系
50
51 实体类中的关系
52 包含关系:可以通过实体类中的包含关系描述表关系
53 继承关系
54
55 分析步骤
56 1.明确表关系
57 2.确定表关系(描述 外键|中间表)
58 3.编写实体类,再实体类中描述表关系(包含关系)
59 4.配置映射关系
60
61 第三 完成多表操作
62
63 i.一对多操作
64 案例:客户和联系人的案例(一对多关系)
65 客户:一家公司
66 联系人:这家公司的员工
67
68 一个客户可以具有多个联系人
69 一个联系人从属于一家公司
70
71 分析步骤
72 1.明确表关系
73 一对多关系
74 2.确定表关系(描述 外键|中间表)
75 主表:客户表
76 从表:联系人表
77 * 再从表上添加外键
78 3.编写实体类,再实体类中描述表关系(包含关系)
79 客户:再客户的实体类中包含一个联系人的集合
80 联系人:在联系人的实体类中包含一个客户的对象
81 4.配置映射关系
82 * 使用jpa注解配置一对多映射关系
83
84 级联:
85 操作一个对象的同时操作他的关联对象
86
87 级联操作:
88 1.需要区分操作主体
89 2.需要在操作主体的实体类上,添加级联属性(需要添加到多表映射关系的注解上)
90 3.cascade(配置级联)
91
92 级联添加,
93 案例:当我保存一个客户的同时保存联系人
94 级联删除
95 案例:当我删除一个客户的同时删除此客户的所有联系人
96
97 ii.多对多操作
98 案例:用户和角色(多对多关系)
99 用户:
100 角色:
101
102 分析步骤
103 1.明确表关系
104 多对多关系
105 2.确定表关系(描述 外键|中间表)
106 中间间表
107 3.编写实体类,再实体类中描述表关系(包含关系)
108 用户:包含角色的集合
109 角色:包含用户的集合
110 4.配置映射关系
111
112 iii.多表的查询
113 1.对象导航查询
114 查询一个对象的同时,通过此对象查询他的关联对象
115
116 案例:客户和联系人
117
118 从一方查询多方
119 * 默认:使用延迟加载(****)
120
121 从多方查询一方
122 * 默认:使用立即加载

Spring Data JPA 大纲归纳的更多相关文章

  1. Spring Boot2 系列教程(二十三)理解 Spring Data Jpa

    有很多读者留言希望松哥能好好聊聊 Spring Data Jpa! 其实这个话题松哥以前零零散散的介绍过,在我的书里也有介绍过,但是在公众号中还没和大伙聊过,因此本文就和大家来仔细聊聊 Spring ...

  2. 快速搭建springmvc+spring data jpa工程

    一.前言 这里简单讲述一下如何快速使用springmvc和spring data jpa搭建后台开发工程,并提供了一个简单的demo作为参考. 二.创建maven工程 http://www.cnblo ...

  3. spring boot(五):spring data jpa的使用

    在上篇文章springboot(二):web综合开发中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jpa 常见用法以及注意事项 使用spr ...

  4. 转:使用 Spring Data JPA 简化 JPA 开发

    从一个简单的 JPA 示例开始 本文主要讲述 Spring Data JPA,但是为了不至于给 JPA 和 Spring 的初学者造成较大的学习曲线,我们首先从 JPA 开始,简单介绍一个 JPA 示 ...

  5. 深入浅出学Spring Data JPA

    第一章:Spring Data JPA入门 Spring Data是什么 Spring Data是一个用于简化数据库访问,并支持云服务的开源框架.其主要目标是使得对数据的访问变得方便快捷,并支持map ...

  6. spring data jpa 调用存储过程

    网上这方面的例子不是很多,研究了一下,列出几个调用的方法. 假如我们有一个mysql的存储过程 CREATE DEFINER=`root`@`localhost` PROCEDURE `plus1in ...

  7. Spring Data JPA 学习记录1 -- 单向1:N关联的一些问题

    开新坑 开新坑了(笑)....公司项目使用的是Spring Data JPA做持久化框架....学习了一段时间以后发现了一点值得注意的小问题.....与大家分享 主要是针对1:N单向关联产生的一系列问 ...

  8. Spring Boot with Spring Data JPA (1) - Concept

    What's Spring Data JPA? According to Pivotal, Spring Data JPA, part of the larger Spring Data family ...

  9. 了解 Spring Data JPA

    前言 自 JPA 伴随 Java EE 5 发布以来,受到了各大厂商及开源社区的追捧,各种商用的和开源的 JPA 框架如雨后春笋般出现,为开发者提供了丰富的选择.它一改之前 EJB 2.x 中实体 B ...

随机推荐

  1. C++ STL partial_sort_copy

    #include <iostream>#include <deque>#include <algorithm>#include <vector> usi ...

  2. mysql连接工具记录

    港优: Sequel pro   

  3. 停止monkey的方法

    注意 Monkey启动后会不断地向被测对象发送随机事件流,直到事件执行完毕或者发生异常时才停止.在Monkey运行过程中,即便断开 与PC的连接,Monkey依然可以在手机上继续运行. 停止Monke ...

  4. sklearn常见分类器(二分类模板)

    # -*- coding: utf-8 -*- import pandas as pd import matplotlib matplotlib.rcParams['font.sans-serif'] ...

  5. DrawRect 内存问题

    DrawRect实现画板将会大量产生内存问题. 具体请看:http://bihongbo.com/2016/01/03/memoryGhostdrawRect/ 可能的原因有两个: 一是在手指绘制的过 ...

  6. C#操作Memcached帮助类

    在VS中安装Memcached,直接在NuGet下搜索Memcached,选择第一个进行安装: 服务端资源下载地址:https://pan.baidu.com/s/1gf3tupl 接下来开始写程序, ...

  7. Guava源码阅读-base-Charsets

    package com.google.common.base; 今天在找base包下的源码阅读时,看到了Charsets,肯定是定义字符集的类,本来就想简单的看一下.(部分内容摘抄自:http://b ...

  8. cmd寻找tomcat的命令和删除进程的命令

    netstat -ano | findstr 8080taskkill -f -pid 端口 idea 异常关闭,无法启动Tomcat提示Error running ‘server_web’: Una ...

  9. (七)Spring 配置 c3p0 连接池

    目录 在 Spring 核心配置文件中配置 c3p0 连接池 配置 JdbcTemplate 对象 在 service 层注入 userDao 在 UserDao 里面注入 JdbcTemplate ...

  10. (二十四)JDBC应用的事务管理(转账事例)

    目录 利用 Dbutils 进行事务操作(以转账为例) 转账实现方式(不优雅的方式) ThreadLocal 类 转账实现方式(优雅的方式) 利用 Dbutils 进行事务操作(以转账为例) 我们只在 ...