一、理解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属4性1Desc|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的实现技术
Spring Data JPA入门
最新推荐文章于 2024-05-21 23:25:20 发布