按照上一篇文章 我们知道  我们定义的方法  都要根据它的规范进行定义  不然就没法实用

这篇我们讲@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查询注解的使用(六)的更多相关文章

  1. 使用Spring访问Mongodb的方法大全——Spring Data MongoDB查询指南

    1.概述 Spring Data MongoDB 是Spring框架访问mongodb的神器,借助它可以非常方便的读写mongo库.本文介绍使用Spring Data MongoDB来访问mongod ...

  2. spring data jpa查询部分字段、多余附加字段

    spring data jpa查询部分字段 第一种方法:使用 model 查询时转化 首先建立一个 model ,写上自己想要查询的字段,然后写上构造函数,这步很重要,因为spring jpa 转化时 ...

  3. spring data 自定义查询

    spring data 自定义查询 https://www.cnblogs.com/airycode/p/6535635.html 在方法接口上面使用@Query

  4. Spring Data Jpa (四)注解式查询方法

    详细讲解声明式的查询方法 1 @Query详解 使用命名查询为实体声明查询是一种有效的方法,对于少量查询很有效.一般只需要关心@Query里面的value和nativeQuery的值.使用声明式JPQ ...

  5. Spring Data JPA 查询结果返回至自定义实体

    本人在实际工作中使用Spring Data Jpa框架时,一般查询结果只返回对应的Entity实体.但有时根据实际业务,需要进行一些较复杂的查询,比较棘手.虽然在框架上我们可以使用@Query注解执行 ...

  6. spring data jpa 查询部分字段列名无效问题

    spring data jpa原生sql查询问题,我只要表其中的几个字段的值,本以为写个原生sql,拿实体类对象去接没问题 结果列名无效,测试了一下,把返回值类型改成List<Object> ...

  7. spring boot系列(五)spring boot 配置spring data jpa (查询方法)

    接着上面spring boot系列(四)spring boot 配置spring data jpa 保存修改方法继续做查询的测试: 1 创建UserInfo实体类,代码和https://www.cnb ...

  8. Spring Data JPA 常用注解 @Query、@NamedQuery

    1.@Transient @Transient表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性:如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则ORM框架 ...

  9. spring data jpa 查询自定义字段,转换为自定义实体

    目标:查询数据库中的字段,然后转换成 JSON 格式的数据,返回前台. 环境:idea 2016.3.4, jdk 1.8, mysql 5.6, spring-boot 1.5.2 背景:首先建立 ...

随机推荐

  1. python正则表达式匹配时间和IP地址

    t = '19:16:30' mt = re.match(r'^(0[0-9]|1[0-9]|2[0-3]|[0-9])\:(0[0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[ ...

  2. 本地vagrant配置虚拟域名的坑

    修改 /usr/local/php56/etc/php.d/Zend.ini   文件 将developer.zl的路径加上去 修改nginx 的vhost里面的xx.com.conf 和上一级目录的 ...

  3. 基于HTML5/CSS3可折叠的3D立方体动画

    今天要给大家带来另外一款CSS3 3D立方体动画,尤其在DEMO2中可以看到,鼠标滑过立方体后,它将会被打开,从里面弹出另外一个小立方体,动画效果非常酷,非常逼真. 在线预览   源码下载 实现的代码 ...

  4. with as 和update ,Delete,insert

    这个SQL写了很久的时间,感觉pgSQL的很是麻烦. with as 先命名一个表出来,就可以当成临时表用. WITH tmp AS ( SELECT MAX(mgi.inner_cd) AS inn ...

  5. Codeforces 482C Game with Strings(dp+概率)

    题目链接:Codeforces 482C Game with Strings 题目大意:给定N个字符串,如今从中选定一个字符串为答案串,你不知道答案串是哪个.可是能够通过询问来确定, 每次询问一个位置 ...

  6. tiny4412 u-boot 启动参数的设置

    参考 http://www.cnblogs.com/chenfulin5/p/5887552.html 制作SD卡 u-boot 编译完之后, 进入 u-boot 目录里面的 sd_fuse cd ~ ...

  7. [boostrap]debian下为arm创建debian和emdebian文件系统

    转自:http://www.cnblogs.com/qiaoqiao2003/p/3738552.html Debian系统本身包含对arm的支持,其包含的软件包最多,但是最终的文件系统要大一些. e ...

  8. seajs中引用jquery插件

    步骤一:使用define封装成seajs模块,返回匿名函数,包含插件的源码 define(function(require,exports,moudles){ return function(jque ...

  9. linux - native task api 测试

    #include <stdio.h>#include <signal.h>#include <unistd.h>#include <sys/mman.h> ...

  10. No output operations registered, so nothing to execute

    SparkStreaming和KafKa结合报错!报错之前代码如下: object KafkaWordCount{ val updateFunc = (iter:Iterator[(String,Se ...