@Transactional注解

让Spring处理事务

不需要自己每次都手动开启提交回滚

FINDONE & GETONE的区别?

findone是立即加载

getone是延迟加载,配合事务使用的

立即加载是这个方法被调用时就返回对象的值

延迟加载是在对象被调用的时候,才会执行查询来返回数值


JPQL的查询

特定查询,需要在Dao的接口方法上打上注解配置

使用JPQL的CRUD

编写测试类

    @Test
public void jpql(){
Customer customer = customerDao.getCustomerByCustName("播客");
System.out.println(customer);
}

按客户名称和客户ID查询名称

接口的声明

@Query(value = "from cn.dai.entity.Customer where custId = ? and custName = ?")
public Customer getCustomerByCustIdAndCustName(Long custId,String custName);

测试类

    @Test
public void jpql2(){
Customer customer = customerDao.getCustomerByCustIdAndCustName(3l, "传智播客");
System.out.println(customer);
}

结果

【注意JPQL语句的占位符顺序,声明的参数要按顺序对应才行】

或者按照新版本的占位符风格这样声明

就是显示的声明这个占位符对应的是第几个参数

按ID更新客户名称

接口声明:

    @Modifying
@Query("update cn.dai.entity.Customer set custName = ?2 where custId = ?1")
public long updateCustomerByCustId(Long custId,String custName);

测试类

    @Test
public void jpql2(){
Customer customer = customerDao.getCustomerByCustIdAndCustName(3l, "传智播客");
System.out.println(customer);
}

结果会这样报错

在之前的查询是不会数据库起修改作用,所以要不要事务都无所谓

但是这个JPQL是一个增删改的执行,JPA事务会强制要求事务存在,否则就会报这个事务要求异常

执行的是修改或者删除查询

解决:

在我们的测试方法上打上事务注解,【在业务层的业务方法打】

然后测试才通过了

但是数据库并没有修改,因为事务没有提交?

设置是否自动回滚【默认是自动回滚。。。】

再次执行,修改成功

使用SQL书写

测试类

结果

另外,除了实体类之外还可以使用这种Object数组的形式接收

忘了忘了,要用工具类打印

可以了

条件查询也是一样,区别不大,不需要做演示了

【Spring Data JPA】04 JPQL和原生SQL的更多相关文章

  1. spring data jpa 使用JPQL的方式查询

    用Spring Data JPA提供的查询方法已经可以解决大部分的应用场景,但是对于某些业务来说,我们还需要灵活的构造查询条件,这时就可以使用@Query注解,结合JPQL的语句方式完成查询 @Que ...

  2. Spring data jpa hibernate:查询异常java.sql.SQLException: Column '列名' not found

    使用spring boot,jap,hibernate不小心的错误: java.sql.SQLException: Column '列名' not found: 这句话的意思是:找不到此列 为什么会出 ...

  3. Spring Boot + Spring Data JPA + PostgreSQL

    最近在用Java重写之前实习生用.netcore写的微信后台应用. 规定用Spring Boot框架,PostgreSQL数据库.之前一直习惯于基于XML的Spring app,也没用过Postgre ...

  4. spring data jpa使用原生sql查询

    spring data jpa使用原生sql查询 @Repository public interface AjDao extends JpaRepository<Aj,String> { ...

  5. Spring Data JPA基本增删改查和JPQL查询(含完整代码和视频连接)

    问题:SpringDataJPA怎么使用? 一.考察目标 主要考核SpringDataJPA的用法 二.题目分析 spring data jpa 的使用步骤(下面有具体实现细节) 1.创建maven工 ...

  6. Spring Boot 入门系列(二十七)使用Spring Data JPA 自定义查询如此简单,完全不需要写SQL!

    前面讲了Spring Boot 整合Spring Boot JPA,实现JPA 的增.删.改.查的功能.JPA使用非常简单,只需继承JpaRepository ,无需任何数据访问层和sql语句即可实现 ...

  7. 干货|一文读懂 Spring Data Jpa!

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

  8. spring data jpa 全面解析(实践 + 源码分析)

    前言 本文将从示例.原理.应用3个方面介绍spring data jpa. 以下分析基于spring boot 2.0 + spring 5.0.4版本源码 概述 JPA是什么? JPA (Java ...

  9. 实例对比 hibernate, spring data jpa, mybatis 选型参考

    原文: 最近重构以前写的服务,最大的一个变动是将mybatis切换为spring data jpa,切换的原因很简单,有两点:第一.它是spring的子项目能够和spring boot很好的融合,没有 ...

  10. spring data jpa(一)

    第1章     Spring Data JPA的快速入门 1.1   需求说明 Spring Data JPA完成客户的基本CRUD操作 1.2   搭建Spring Data JPA的开发环境 1. ...

随机推荐

  1. JavaSE 关键字和标识符

    目录 关键字 标识符 标识符命名规则 标识符命名规范 字面值 关键字 具有特殊含义的 命名时不可以与关键字重名 标识符 也就是名字,对类名,变量名称,方法名称,参数名称等修饰 标识符命名规则 以字母, ...

  2. Azkaban快速入门

    先说一些废话 因为之前自己工作中有用过Azkaban作为自动化任务调度工具,所以想参考自己之前的使用经验,总结一下关于Azkaban的使用,方便大家使用Azkaban快速实现企业级自动化任务 如何选择 ...

  3. vue3使用表格el-table-infinite-scroll.js:18 Uncaught (in promise) Error: [el-table-infinite-scroll]: .el-scrollbar__wrap element not found.

    先看下表格里面有没有这个el-scrollbar__wrap class类 没有的话升级一下element-plus到最新的就行 你可以先查看element-plus的版本 npm view elem ...

  4. js字符串类型

    <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8 ...

  5. IDEA 新建 MAVEN JAVA 控制台程序 Console

    IDEA 新建 MAVEN JAVA 控制台程序 Console File - New - Project-左侧选择 Maven,右侧勾选"Create from archetype&quo ...

  6. MySQL Docker搭建挂载并启用远程连接

    1.拉取镜像 后面可以指定版本号,这里使用8.0 docker pull docker.io/mysql:8.0 2.查看mysql镜像 docker images 3.启动docker并挂载 doc ...

  7. echarts 各种特效图

    饼图标签展示数值 配置项: option = { title: { text: '项目时间分布', left: 'center' }, tooltip: { trigger: 'item', form ...

  8. zabbix---监控Oracle12c数据库

    使用插件:orabbix用于监控oracle实例的zabbix插件 orabbix插件下载地址:http://www.smartmarmot.com/product/orabbix/download/ ...

  9. 【Playwright+Python】系列教程(二)手把手带你写一个脚本

    一.如何使用代理方式打开网页 在 playwright.chromium.launch() 中传入 proxy 参数即可,示例代码如下: 1.同步写法: from playwright.sync_ap ...

  10. 用基础Array数组实现动态数组、链表、栈和队列

    代码地址: https://gitee.com/Tom-shushu/Algorithm-and-Data-Structure.git 一.ArrayList自定义封装 package com.zho ...