Spring Data JPA 整合Spring 第二篇
主要是在CustomerDao中去写一些代码,在调用Query中去用SQL
例如
public interface CustomerDao extends JpaRepository<Customer, Long>, JpaSpecificationExecutor<Customer> {
/**
* 案例:根据客户名称查询客户
* 使用jpql的形式查询
* jpql:from Customer where custName = ?
*
* 配置jpql语句,使用的@Query注解
*/
@Query(value="from Customer where custName =?")
public Customer findJpql(String custName); /**
* 案例:根据客户名称和客户id查询客户
* jpql form Customer where custName=? and custId=?
* 对于多个占位符参数
* 赋值的时候,默认的情况下,占位符的位置需要和方法参数中的位置保持一致
* 可以指定占位符参数的位置
* ?索引的方式,指定此占位的取值来源
*/
@Query(value = "from Customer where custName=? and custId=?")
public Customer fingCustNameAndId(String name ,long id); /**
*使用jpql完成更新操作
* 案例:根据id更新,客户的名称
* 更新3号客户的名称
* sql: update cust_customer set cust_name=? where cust_id=?
* jpql: update Customer set custName = ? where custId =?
*
* @Query :代表的是进行查询
* 声明此方法是用来进行更新查询
* @Modifying
* 当前执行的是一个更新操作
*/
@Query(value ="update Customer set custName = ? where custId =?")
@Modifying
public void upadateCustomer(String custName,long custId); /**
* 使用sql的形式查询:
* 查询全部的客户
* sql : select * from cst_customer;
* Query : 配置sql查询
* value : sql语句
* nativeQuery : 查询方式
* true : sql查询
* false:jpql查询
*
*/
//@Query(value = " select * from cst_customer" ,nativeQuery = true)
@Query(value="select * from cst_customer where cust_name like ?",nativeQuery = true)
public List<Object [] > findSql(String name); }
主要是在@Query中去调用数据库代码跟自己写的jpql代码
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.方法名称规则查询
注意:主要是跟第一篇一样所以都是有些内容如:Customer类spring配置文件也是一样的。
测试方法
package cn.itcast.domain; import cn.itcast.dao.CustomerDao;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional; import java.util.Arrays;
import java.util.List; @RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext.xml")
public class JpqlTest {
@Autowired
public CustomerDao customerDao; @Test
public void testJpql(){
Customer customer = customerDao.findJpql("二");
System.out.println(customer);
} @Test
public void testfingCustNameAndId(){
Customer customer = customerDao.fingCustNameAndId("杰哥", 1);
System.out.println(customer);
} /**
* 测试jpql更新操作
* springDataJpa中使用jpql完成,更新/删除操作
* 需要手动添加事务的支持
* 默认会执行结束之后,回滚事务
* @Rollback : 设置是否自动回滚
* false | true
*/
@Test
@Transactional//添加事务的支持
@Rollback(value = false)
public void testupadateCustomer(){
customerDao.upadateCustomer("浩总",3);
} //测试sql查询
@Test
public void testFindSql(){
List<Object[]> list = customerDao.findSql("杰哥%");
for (Object[] object : list){
System.out.println(Arrays.toString(object));
}
}
}
Spring Data JPA 整合Spring 第二篇的更多相关文章
- Spring Data JPA 整合Spring
1.1 Spring Data JPA 与 JPA和hibernate之间的关系 JPA是一套规范,内部是有接口和抽象类组成的.hibernate是一套成熟的ORM框架,而且Hibernate实现 ...
- 使用Spring Data JPA的Spring Boot
本文教你开始使用Spring Data JPA.来自优锐课JAVA架构专业讲师精心整理. 欢迎使用带有Spring Data JPA的Spring Boot教程!在本教程中,我们将看到Spring D ...
- Spring Data JPA简介 Spring Data JPA特点
Spring Data JPA 是Spring基于ORM框架.JPA规范的基础上封装的一套JPA 应用框架,底层使用了Hibernate 的JPA技术实现,可使开发者用极简的代码即可实现对数据的访问和 ...
- 整合Spring Data JPA与Spring MVC: 分页和排序
之前我们学习了如何使用Jpa访问关系型数据库.比较完整Spring MVC和JPA教程请见Spring Data JPA实战入门,Spring MVC实战入门. 通过Jpa大大简化了我们对数据库的开发 ...
- Spring Data JPA整合REST客户端Feign时: 分页查询的反序列化报错的问题
Type definition error: [simple type, class org.springframework.data.domain.Page]; nested exception i ...
- 整合Spring Data JPA与Spring MVC: 分页和排序pageable
https://www.tianmaying.com/tutorial/spring-jpa-page-sort Spring Data Jpa对于分页以及排序的查询也有着完美的支持,接下来,我们来学 ...
- Spring Data JPA在Spring Boot中的应用
1.JPA JPA(Java Persistence API)是Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据.他的出现主要是为了简 ...
- <Spring Data JPA>二 Spring Data Jpa
1.pom依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="htt ...
- spring data jpa和spring data redis同时配置时,出现Multiple Spring Data modules found, entering strict repository configuration mode错误
问题说明 data jpa和data redis同时配置时,出现Spring modules spring Spring Data Release Train <dependencyManage ...
随机推荐
- 来吧,展示!SpringBoot OSS 整合全过程,没见过比这更详细的了
前言 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的海量.安全.低成本.高可靠的云存储服务.其数据设计持久性不低于 99.9999999999%(12 ...
- 【JAVA基础】数组练习案例一
/* * * 输入5个学生成绩 * 计算出每个成绩与最高分的差距 * 根据差距分配等级 * * */ import java.util.Scanner; public class ArrayTask ...
- gitlab private-token利用工具
在渗透测试中,经常会遇到只获得gitlab PRIVATE-TOKEN的情况,而gitlab提供了一系列的api给我们通过这个token去访问gitlab. 所以做了个简单的gitlab工具,以供紧获 ...
- jmeter多用户登录并发测试
在使用Jmeter进行性能测试时,我们通常会需要配置多个不同用户进行并发测试,这里简单介绍一下配置方法. 1.运行Jmeter.bat, 在打开的测试计划中右键添加一个线程组: 2.在线程组下添加录 ...
- EDI的五个常见挑战以及如何克服这些挑战
EDI是成功进行供应链管理的一个关键要素.它使企业能够以标准化的电子格式处理与任何交易伙伴的业务数据交换,极大简化了许多曾经繁琐的程序.然而,如果企业正在扩张或处于高速增长阶段,如何充分利用EDI仍然 ...
- @Transactional自调用问题
- 【抓取】6-DOF GraspNet 论文解读
[抓取]6-DOF GraspNet 论文解读 [注]:本文地址:[抓取]6-DOF GraspNet 论文解读 若转载请于明显处标明出处. 前言 这篇关于生成抓取姿态的论文出自英伟达.我在读完该篇论 ...
- dart时间处理的几个方法
一.时间处理的方法 1.获取当前时间 new DateTime.now(); 2.设置时间 new DateTime(2020, 11, 11, 12, 37 , 36); 3.解析时间 DateTi ...
- PyQt(Python+Qt)学习随笔:QListWidget获取指定位置对应项的itemAt方法
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 itemAt方法根据参数给定位置返回列表部件中的项.对应语法如下: QListWidgetItem ...
- PyQt(Python+Qt)学习随笔:使用pyqtConfigure建立信号和槽的连接
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在PyQt中,一般信号和槽的连接是通过connect方法建立的,语法如下: connect(slot ...