Spring Data @Query查询注解的使用(六)
按照上一篇文章 我们知道 我们定义的方法 都要根据它的规范进行定义 不然就没法实用
这篇我们讲@Query 查询注解 我们就可以不需要遵循它的方法规则去编写 咱们讲@Query定义到方法上即可 下面咱们通过例子来讲
本案例对应的方法------------------> getEmployeeByAge 这里我们可以定义自己的sql
package org.springdata.repository;
import org.springdata.domain.Employee;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.Repository;
import org.springframework.data.repository.RepositoryDefinition;
import java.util.List;
/***
*
*/
@RepositoryDefinition(domainClass = Employee.class, idClass = Integer.class)
public interface EmployeeRepository /*extends Repository<Employee,Integer>*/ {
/**
* 根据名字找员工
* desc 大家可以发现 我只声明了一个方法 并没有写任何的实现类 哦了 就这样 咱们写个实现类
* @param name
* @return
*/
public Employee findByName(String name);
// name 根据模糊查询 并且 年龄<多少岁的员工
public List<Employee> findByNameIsStartingWithAndAgeLessThan(String name, Integer gae);
// names in ('','','') 年龄小于多少
public List<Employee> findByNameInOrAgeLessThan(List<String> names,Integer age);
//获取年龄最大的信息 注意 from Employee 的是类名 不是表名
@Query(" select o from Employee o where o.age=(select max(age) from Employee t1)")
public Employee getEmployeeByAge();
}
测试类
对应的方法 ---------->testgetEmployeeByAge
package org.springdata;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springdata.domain.Employee;
import org.springdata.repository.EmployeeRepository;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.ArrayList;
import java.util.List;
/**
* 测试类
*/
public class SpringDataTest {
private ApplicationContext ctx = null;
private EmployeeRepository employeeRepository = null;
@Before
public void setup(){
ctx = new ClassPathXmlApplicationContext("beans_news.xml");
employeeRepository = ctx.getBean(EmployeeRepository.class);
System.out.println("setup");
}
@After
public void tearDown(){
ctx = null;
System.out.println("tearDown");
}
@Test
public void testEntityManagerFactory(){
}
@Test
public void testFindByName(){
System.out.println(employeeRepository);
Employee employee = employeeRepository.findByName("zhangsan");
System.out.println("id:" + employee.getId()
+ " , name:" + employee.getName()
+ " ,age:" + employee.getAge());
}
@Test
public void testfindByNameIsStartingWithAndAgeLessThan(){
System.out.println(employeeRepository);
List<Employee> employees = employeeRepository.findByNameIsStartingWithAndAgeLessThan("wang",50);
for (Employee employee: employees) {
System.out.println("id:" + employee.getId()
+ " , name:" + employee.getName()
+ " ,age:" + employee.getAge());
}
}
@Test
public void testfindByNameInOrAgeLessThan(){
List<String> names = new ArrayList<String>();
names.add("wangwu1");
names.add("wangwu2");
names.add("wangwu3");
System.out.println(employeeRepository);
List<Employee> employees = employeeRepository.findByNameInOrAgeLessThan(names,50);
for (Employee employee: employees) {
System.out.println("id:" + employee.getId()
+ " , name:" + employee.getName()
+ " ,age:" + employee.getAge());
}
}
@Test
public void testgetEmployeeByAge(){
Employee employee = employeeRepository.getEmployeeByAge();
System.out.println("id:" + employee.getId()
+ " , name:" + employee.getName()
+ " ,age:" + employee.getAge());
}
}
输出结果

咱们看下数据库表最大的年龄是不是这条记录

再来一个 还是在 EmployeeRepository 加方法
//获取name包含 哪些 并且年龄等于多少岁
@Query("select o from Employee o where o.name like %?1% and o.age = ?2")
public List<Employee> querayParams(String name,Integer age);
然后编写测试类
@Test
public void tesquerayParams(){
List<Employee> employees = employeeRepository.querayParams("wangwu",12);
for (Employee employee: employees) {
System.out.println("id:" + employee.getId()
+ " , name:" + employee.getName()
+ " ,age:" + employee.getAge());
}
}
看下输出结果

very good 就那么简单
Spring Data @Query查询注解的使用(六)的更多相关文章
- 使用Spring访问Mongodb的方法大全——Spring Data MongoDB查询指南
1.概述 Spring Data MongoDB 是Spring框架访问mongodb的神器,借助它可以非常方便的读写mongo库.本文介绍使用Spring Data MongoDB来访问mongod ...
- spring data jpa查询部分字段、多余附加字段
spring data jpa查询部分字段 第一种方法:使用 model 查询时转化 首先建立一个 model ,写上自己想要查询的字段,然后写上构造函数,这步很重要,因为spring jpa 转化时 ...
- spring data 自定义查询
spring data 自定义查询 https://www.cnblogs.com/airycode/p/6535635.html 在方法接口上面使用@Query
- Spring Data Jpa (四)注解式查询方法
详细讲解声明式的查询方法 1 @Query详解 使用命名查询为实体声明查询是一种有效的方法,对于少量查询很有效.一般只需要关心@Query里面的value和nativeQuery的值.使用声明式JPQ ...
- Spring Data JPA 查询结果返回至自定义实体
本人在实际工作中使用Spring Data Jpa框架时,一般查询结果只返回对应的Entity实体.但有时根据实际业务,需要进行一些较复杂的查询,比较棘手.虽然在框架上我们可以使用@Query注解执行 ...
- spring data jpa 查询部分字段列名无效问题
spring data jpa原生sql查询问题,我只要表其中的几个字段的值,本以为写个原生sql,拿实体类对象去接没问题 结果列名无效,测试了一下,把返回值类型改成List<Object> ...
- spring boot系列(五)spring boot 配置spring data jpa (查询方法)
接着上面spring boot系列(四)spring boot 配置spring data jpa 保存修改方法继续做查询的测试: 1 创建UserInfo实体类,代码和https://www.cnb ...
- Spring Data JPA 常用注解 @Query、@NamedQuery
1.@Transient @Transient表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性:如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则ORM框架 ...
- spring data jpa 查询自定义字段,转换为自定义实体
目标:查询数据库中的字段,然后转换成 JSON 格式的数据,返回前台. 环境:idea 2016.3.4, jdk 1.8, mysql 5.6, spring-boot 1.5.2 背景:首先建立 ...
随机推荐
- 根据返回值动态加载select
// 路由 if (return_routeChoice != null && return_routeChoice != "") { for (var i = 0 ...
- Logstash日志字段拆分grok
参考和测试网站:http://grokdebug.herokuapp.com 例如:test-39.dev.abc-inc.com Mon Apr 24 13:53:58 CST 2017 2017- ...
- java strtus2 拦截器(Interceptors)
在strtus2 中有一个比较重要的东西就是拦截器(Interceptors) 拦截器可以做到在已有的业务中插入一块共通的,比如在一个业务中,直接插入一串登录功能,就不用去每个页面一个个去显示是否登录 ...
- 记录一个glibc 导致的段错误以及gdb 移植
上一篇我有相关关于一个段错误的记录,现在记录当时的段错误具体是在哪里的. // 从 GNU 的官网下载当前在使用的 glibc 的源代码以及最新的 glibc 源代码 // 地址如下: http:// ...
- Scala中List(Map1,Map2,Map3 ....) 转成一个Map
这个问题研究好久...头大,不记得有fold用法了. fold函数:折叠,提供一个输入参数作为初始值,然后大括号中应用自定义fun函数并返回值. list.fold(Map()){(x,y)=> ...
- 2018-11-21 ko.pureComputed的使用
以前一直在想,ko.pureComputed 好像用不上.看起来高大上. 今天在修复一个bug时,发现了它的妙处. 在修改商品列表的页面,弹出一个新增商品的页面.关闭之后,怎么通知修改商品列表的页面发 ...
- 解决 Python.h:没有那个文件或目录 错误的方法
http://www.cnblogs.com/yuxc/archive/2012/05/13/2498019.html ———————————————————————————————————————— ...
- 去掉Scala的糖衣(4) -- Type Aliase
我的新博客地址:http://cuipengfei.me/blog/2013/12/23/desugar-scala-4/ Scala中有一个type关键字,用来给类型或者是操作起别名,用起来很是方便 ...
- DELETE 语句用于删除表中的行。
DELETE FROM 表名称 WHERE 列名称 = 值
- (转)android从应用到驱动之—camera(1)---程序调用流程
一.开篇 写博客还得写开篇介绍,可惜,这个不是我所擅长的.就按我自己的想法写吧. 话说camera模块,从上层到底层一共包含着这么几个部分: 1.apk------java语言 2.camera的ja ...