Spring Data JPA入门

一、理解JPA和PRM思想
1.需求
  1、由代码建立好类和表的关系,操作累就是操作表
  2、由代码建立好类属性和表字段的关系,操作属性就是操作字段的值
  3、自动构建关于类和表的CRUD操作
2.什么是ORM
  1、概念
    ORM(object relation mapping)对象关系映射关系,面向对象的对象模型和关系型数据之间的相互转换。基于关系型数据库的数据存储,实现一个虚拟的面向对象的数据访问接口。一想状态下,基于一个这样一个面向对象的接口,持久化一个oo对象应该不需要了解任何关系型数据库存储的数据实现细节
  2、目的与意义
  3、前提
  4、常见ORM实现框架
  5、好处
  6、SpringDataJPA实现了JPA思想
3.什么是JPA
4.什么是SpringDataJPA
5.SpringDataJPA和JPA和Hibernate的关系

二、SpringBoot整合Spring Data JPA
1.实现案例
  0、新建数据库
  1、新建项目
  2、导入依赖
  3、配置属性文件
SpringDataJPA配置
    1、配置本地方言 告诉SpringDataJPA使用的哪一个数据库
    spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
    2、配置运行时JPA输出sql语句
    Spring.jpa.show-sql=true
    3、设置是否允许JPA对数据库进行DDL操作
    #有表更新 没表建表 
    spring.jpa.hibernate.ddl-auto=update
  4、创建实体类
建立类和表的关系
@Entitu//注解为实体类
//指定和当前类建立关系的数据库的名字,没有会自动穿件
//name=“表名”
@Table(name="t_book"//jpa会自动帮助我们创建属性和字段的关系,但是需要指定id
@Id//标注为主键
//设置主键的擅长模式  自动增长
//对于其他属性 一般不需要配置
//会根据属性名按照一定规则生成字段名
//规则:
1、如果驼峰名,例如bPro————字段b_pro
2、属性bname——字段bname

//使用@Column(name=‘XXX’)特殊需求使用
  5、创建dao接口
不需要声明任何方法
JPA基本上帮我们实现了基本所需 
集成接口JpaRepository<要操作的类,主键对应的属性的数据类型>
回头再根据特殊情况再声明回来


  6、编写Controller层
@RestController
//这里不涉及Service业务层
//注入
  7、JPA启动代码
  8、测试
2.案例
3.练习
4.小结
三、SpringDataJPA实现CRUD功能
1.内置方法
方法名			        参数		    返回值         作用
新增方法:
save(实体类对象)            参数是实体类对象    新增的实体类  只能存在缓存中
saveAndFlush(实体类对象)    参数是实体类对象    新增的实体类  强制保存到数据库
save(集合)                  集合                集合          批量保存
修改方法就是新增方法
eg:bid 1 bname 神墓  #假如数据库没有这条数据 save就是新增 有 save就是秀爱
删除方法:
方法名一样,参数列表不一样,方法的方法的重载
如果有就删除,没有就报错 传入id不存在就报错
删除
delete                    id              没有返回值    单删
delete                    对象            没有返回值    单删
delete                    对象集合	  没有返回值    批量删除  一条一条的
deleteInBatch             对象集合        没有返回值    批量删除  or语句删除
=========================
deleteAll                 没有参数         没有返回值    全干掉   一条一条的
deleteInBatch             没有参数         没有返回值    全干掉   or语句删除          
查询
findById                  id         存储对象的容器对象
getOne                    id         Optional存储查询对象的容器对象
findAll                   没有参数   查询所有
2.案例
  1、在上一题的基础上,实现根据ID单条查询
    1)getOne  
    2)findByID
  2、使用JPA方法,查询表中所有数据
      //jpa的findByid
      //Optional存储查询对象的容器对象
      Optional<Book> op = bRepo.findById(bid);
      Book b = op.get();//从容器中取值
      return b;
  3、使用JPA方法,实现数据
      //jpa的getOne
      //使用getOne 实体类需要做修改
      Book b = bRepo.getOne(bid);
  4、使用JPA方法,实现数据删除
      /*要是用getOne 实体类要实现以下两个步骤
      1、implements Serializable  可序列化接口
      2、关闭懒加载@JsonIgnoreProperties(value=               {"hibernateLazyInitializer","handler"})
      */
      //删除 有就删除 没有就报错 删除方法还没有返回值
      //删除成功返回1  删除失败返回2

四、SpringDataJPA实现复杂查询
  1.关键字抽象查询方法
    1、规则
      1)查询方法必须以find|findBy、get|getBy、read|reaBy
      2)座位查询条件的属性条件通过JPA提供的关键字进行拼接  findBySname
      3)作为查询条件的属性拼接时首字母必须大写
      方法名:findBy|getBy+首字母大写属性+拼接关键字
      eg:模糊查询  findByBnameLike
    2、关键字
      ☆:关键字首字母要大写(大驼峰命名法)
        关键字      方法名                       等价sql
      1)And         finByXAndY(Int a,int b)      where x = a and y=b;
      2)Or          finByXOrY(Int a,int b)       where x = a or y=b;
      3)Between     finByXBetWeen(int a, int b)  where x between a and b;
      4)LessThan    finByXLessThan(int a)        where x < a;
      5)Before      finByXBefore(int a)          where x < a;
      6)GreaterThan finByXGreaterThan(int a)     where x > a;  
      7)After       finByXAfter(int a)           where x > a;
      以下都是写在JPA里面的
      8)Like        finByBnameLike    没有%没有_
      9)StartingWith   后面加%
      10)EndingWith    后面加%
      11)Containing    前后都加%
      12)OrderBy    findByBnameLikeOrderByBidDesc
                    先根据姓名魔术查询然后根据bid降序排序
                    1、根据属性先查询后排序
                      findBy属性查询OrderBy属性1Desc|Asc属性2Desc|Asc
                    2、查询所有然后排序
                      findVyOrderBy属41Desc|Asc属性2Desc|Asc
                    findBy===getBy
         ASC DESC
           1、实现查询所有然后根据评分降序bid降序
           2、根据姓名模糊查询然后再根据评分降序排序
      








需求:
1、由代码建立好类和表的关系,操作类就是操作表
2、由代码建立好类属性和表字段的关系,操作属性值就是操作字段值
3、自动构建关于类和表的CRUD操作

从实体类数据自动到数据库表数据
从数据库表数据自动到实体类数据

ORM思想:
Obejct Relation Mapping
对象    关系     映射
主要功能\意义\目的:
实现类和表之间的相互转换,操作实体类就是操作数据库的表
从类到表  自动转
从表到类  自动转

前提——建立关系
1、实体类和数据表的关系
2、实体类的属性和数据表的字段关系

resultType
resultMap
是不是属性和字段的关系
Mybatis是办个ORM思想,实现了从表到类的自动操作
完整的ORM的思想,基本上实现了不用再写SQL语句了

ORM理论思想
实现框架:Hibernate是一个开放源代码的对象关系映射框架
SSH:Spring SpringMVC Hibernate
SSM:Spring SpringMVC Mybatis
     Spring Boot
所有的数据库框架都是对JDBC进行封装升级的,全自动的ORM框架
总有刁民想害朕,实现手动编写sql

半自动框架 Mybatis 代替了Hibernate

时代问题:很多公司在创建ORM框架,标准不统一
心有猛虎,细嗅蔷薇

ORM思想
JPA统一的规范:Java 持久性 API
               SUN推出
               所有厂商按照规范实现
               只定义不工作
         代码:有一些列接口和抽象类构成
ORM思想|JPA规范|Hibernate

Spring Data JPA
1、Spring Data JPA是 Spring Data的子项目
2、Spring Data JPA是Spring针对JPA推出的优化升级高效的解决方案——框架
3、SpringData对JPA的再封装框架,底层实现还是使用了Hibernate对JPA的实现技术

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值