SpringData JPA使用JPQL的方式查询和使用SQL语句查询
使用Spring Data JPA提供的查询方法已经可以解决大部分的应用场景,但是对于某些业务来说,我们还需要灵活的构造查询条件,
这时就可以使用@Query注解,结合JPQL的语句方式完成查询
持久层接口:
/**
* 客户持久层接口
* JpaRepository<实体类类型,主键类型>:用来完成基本CRUD操作
* JpaSpecificationExecutor<实体类类型>:用于复杂查询(分页等查询操作)
*/
public interface CustomerDao extends JpaRepository<Customer, Long>, JpaSpecificationExecutor<Customer> { /**
* 根据客户名称查询客户
* 使用jpql的形式查询
* jpql:from Customer where custName = ?
* 配置jpql语句,使用的@Query注解
*/
@Query("from Customer where custName = ?")
Customer findJpql(String custName); /**
* 根据客户名称和客户id查询客户
* jpql: from Customer where custName = ? and custId = ?
* 对于多个占位符参数
* 赋值的时候,默认的情况下,占位符的位置需要和方法参数中的位置保持一致
* 也可以指定占位符参数的位置
* ?索引的方式,指定此占位的取值来源
*/
@Query("from Customer where custName = ?2 and custId = ?1")
Customer findCustNameAndId(Long id, String name); /**
* 使用jpql完成更新操作
* 根据id更新,客户的名称
* sql :update cst_customer set cust_name = ? where cust_id = ?
* pql : update Customer set custName = ? where custId = ?
* @Query : 代表的是进行查询
* @Modifying : 声明此方法是用来进行更新操作
*/
@Query(value = "update Customer set custName = ? where custId = ?")
@Modifying
@Transactional // springdata jpa使用jpql执行插入,更新,删除需要手动提交事务
@Rollback(false) // 默认在执行之后,回滚事务,这里设置不回滚
void updateCustomer(String custName, long custId); /**
* 使用sql的形式查询:查询全部的客户
* sql:select * from cst_customer
* nativeQuery : true 使用本地sql的方式查询 false(默认) jpql查询
*/
@Query(value = "select * from cst_customer", nativeQuery = true)
List<Customer> findSql();
}
测试:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class JpqlTest {
@Autowired
private CustomerDao customerDao; @Test
public void testFindJpql() {
Customer c = customerDao.findJpql("小明");
System.out.println(c);
} @Test
public void testFindCustNameAndId() {
Customer c = customerDao.findCustNameAndId(6L, "小倩");
System.out.println(c);
} @Test
public void testUpdateCustomer() {
customerDao.updateCustomer("lily", 4L);
} @Test
public void testFindSql() {
List<Customer> customers = customerDao.findSql();
for (Customer customer : customers) {
System.out.println(customer);
}
}
}
SpringData JPA使用JPQL的方式查询和使用SQL语句查询的更多相关文章
- 如何查找MySQL中查询慢的SQL语句
如何查找MySQL中查询慢的SQL语句 更多 如何在mysql查找效率慢的SQL语句呢?这可能是困然很多人的一个问题,MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow ...
- 使用sql语句查询日期在一定时间内的数据
使用sql语句查询日期在一周内的数据 select * from ShopOrder where datediff(week,ordTime,getdate()-1)=0 //查询当天日期在一周年 ...
- 如何查找MySQL中查询慢的SQL语句(转载)
转载自https://www.cnblogs.com/qmfsun/p/4844472.html 如何在mysql查找效率慢的SQL语句呢?这可能是困然很多人的一个问题,MySQL通过慢查询日志定位那 ...
- 使用Query进行HQL语句查询和SQL语句查询
HQL的语法比较简单,与普通SQL的区别之处是针对对象的不同,在查询语句中将sql中的表名替换成了sql中的持久化类名,因为hibernate机制是基于对象进行查询的. 不带参数的查询,语句是“fro ...
- 通过sql语句查询出来的结果字段没有到对应实体类时的处理方法
通过sql语句查询出来的结果字段没有到对应实体类时的处理方法,对于Person类获取用户第一个名字和年龄两个字段,常见的有两种方式: 1.在创建一个与查询结果字段对应的类,然后通过构造函数实现: Qu ...
- Mysql中 查询慢的 Sql语句的记录查找
Mysql中 查询慢的 Sql语句的记录查找 慢查询日志 slow_query_log,是用来记录查询比较慢的sql语句,通过查询日志来查找哪条sql语句比较慢,这样可以对比较慢的sql可以进行优化. ...
- sql语句查询
1. sql语句查询某位数字或者某几位数字开头的数据,字段类型为数字类: %’: 2. sql搜索以4开头和含有李字的数据: select * from wlzbpre_user where real ...
- phpcmsv9自定义sql语句查询模型实现
在phpcmsv9中,自定义sql语句查询可不太好实现,传入sql语句查询很容易被内部转入生成一系列莫名其妙的sql语句,比如最佳前缀等等,直接造成sql语句查询错误,在此也提供两种解决办法,1修改底 ...
- 怎样用SQL语句查询一个数据库中的所有表?
怎样用SQL语句查询一个数据库中的所有表? --读取库中的所有表名 select name from sysobjects where xtype='u'--读取指定表的所有列名select nam ...
随机推荐
- VUE 鼠标右键自定义
需要在区域内右击自定义菜单的DIV绑定contextmenu右击事件 <div style="width:100% ; z-index: inherit;position: rel ...
- [ DLPytorch ] 文本分类&图像增强
图像增强 图像增广(image augmentation)技术通过对训练图像做一系列随机改变,来产生相似但又不同的训练样本,从而扩大训练数据集的规模.图像增广的另一种解释是,随机改变训练样本可以降低模 ...
- missing required architecture x86_64 in file
ios错误ignoring file xxx missing required architecture x86_64 in file 错误ignoring file xxx missing re ...
- ImageMagick PDF到JPG有时会导致黑色背景
convert -verbose -density 300 -quality 50 -background white -alpha remove 0.pdf 0.jpg magick convert ...
- BugkuCTF解题Web基础(一)
Web2 打开链接看见一张动图,猜测flag应该就在网页前端源码里面 没有问题 计算器 典型的修改前端代码题目,题目让你计算结果,但只能填写一位数字. f12打开控制台,改代码maxlength we ...
- Linux centosVMware 自动化运维认识自动化运维、启动salt相关服务、saltstack配置认证、salt-key命令用法、saltstack远程执行命令、saltstack - grains、saltstack – pillar
一.认识自动化运维 传统运维效率低,大多工作人为完成 传统运维工作繁琐,容易出错 传统运维每日重复做相同的事情 传统运维没有标准化流程 传统运维的脚本繁多,不能方便管理 自动化运维就是要解决上面所有问 ...
- 启动易EZB Systems EasyBoot V6.5.1.669 + 注册码
启动易EasyBoot可以简单的让您制作启动光盘,它可以制作光盘启动菜单.自动生成启动文件.并生成可启动ISO文件.只要通过CD-R/W刻录软件即可制作完全属于自己的启动光盘. EasyBoot 6. ...
- SQLite、MySQL和PostgreSQL 三种关系数据库哪个好?
关系型数据库的使用已经有相当长的时间了.它们变得流行起来托了管理系统的福,关系模型被实现得相当的好,并且被证明是操作数据的好方法(特别是事务性强的应用). 在这篇DigitalOcean文章中,我们将 ...
- scrapy(创建scrapy工程)报错:“ ImportError:DLL load failed:找不到指定的模块”
先要确定什么模块找不到 解决方法 windowa环境下加 ( --user) pip install -I cryptography --user
- vue v-model 数据双向绑定(笔记)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...