一、JPQL自定义查询语句
1.含义
1、JAVA持久性查询语句(JPQL)是一种面向对象的查询语言,
将SQL语法和简单查询予以绑定进行操作
2、SQL面向的是表和字段访问操作数据
3、JPQL完全面向对象,通过类名和属性访问操作数据库,而不是表名和表的属性
4、JPQL所提供的查询语法主要分为三类
1)select查询语句
2)update修改语句
3)delete删除语句
4)不能做新增 原生继承的save方法已经满足
2.使用规则
1、方法名
1)根据规范起名 (getData)
2、查询语句 使用@Query注解进行自定义注解
3、修改和删除语法
1)使用@Query注解进行自定义操作
2)使用@Modifying注解通知SpringData这是一个DELETE或UPDATE操作
3)使用@Transactional进行事务管理
三个注解缺一不可
4、参数使用规则
1)占位符?X 需要和方法中所传递的参数顺序一致。X是从1开始
2)@Param("参数名")
1>方法中所传递的参数使用@Param("sname")注解标识命名参数
2>JPQL:sname使用参数
3>如果是普通值 八种基本、包装类、String
3)参数是对象
1>使用@Param标注
2>JPQL中使用:#{#对象.属性名}
二、原生SQL查询
1.使用规则
0、纯原声SQL操作
1、在@Query中开启原生SQL操作 nativeQuery = true
2、增删改操作需要使用
1)@Modifying
2)@Transactional
5.错误
1、java.sql.SQLExeption:Can not issue data manipulation statements with
executQueery()
2、少些了@Modifying
原生SQL实现增删改查,针对的是表和字段操作的
查询
1、根据书籍名称模糊查询
2、根据类型名称查询书籍信息
三、事务操作
事务管理@Transactional有业务层房业务层 没有业务层放持久层
如果是对单一方法进行管理 放在方法上
如果类中多个方法进行擦走 放在类统一管理
四、动态SQL
1.问题
2.解决方案
1、继承JpaSpecificationExecutor接口调用内置方法
2、内置方法
1)T findOne(Specification<T>spec);单个查询
2)List<T>findAll(Specification<T>spec);多条件查询功能
3)Page<T>findAll(Specification<T>spec,Pageable Pageable);多条件查询+分页
3、特殊对象
1)Specification对象 它是查询条件对象,是一个接口,可以在实现Specification接口时,自定义动态SQL
2)Pageable对象
1>分页专用工具
2>在SpringBoot
3.多条件动态SQL查询以上版本,由PageResultof(page,size)生成
4.分页实现
关键字抽象方法
问题
1、默认方法不够用
2、关键字抽象方法名字太长
省事但是不能满足实际需求
多条件查询都不能实现
动态SQL:多条件
1、需要一个对象专门存放查询的条件
2、if判断来拼接sql
3、值比较 banme = #{}