2-SpringData-查询及修改

以下内容转载于

http://www.cnblogs.com/fzng/tag/SpringData/

在此权作为笔记

SpringData中查询分两种,一种是基于规范的,一种是基于注解的

1. 基于查询规范

dao层查询方法:

import java.util.List;
import org.springframework.data.repository.Repository;
import com.wzw.springdata.model.Employee;

public interface EmployeeRepository extends Repository<Employee,Integer> {

    public Employee getEmployeeById(Integer id);

    /**
     *  name 以什么开始 IsStartingWith 并且 年龄<多少岁的员工  (已wang结尾的 就是findByNameIsEndingWith) 
     * @param name
     * @param gae
     * @return
     */
    public List<Employee> findByNameIsStartingWithAndAgeLessThan(String name, Integer gae);

    /**
     * names in ('','','') 年龄小于多少
     * @param names
     * @param age
     * @return
     */
    public List<Employee> findByNameInOrAgeLessThan(List<String> names,Integer age);
}

测试方法:

    @Test
    public void fun3() {
        System.out.println("1: " + er);
        List<Employee> list = er.findByNameIsStartingWithAndAgeLessThan("test", 19);
        for (Employee employee : list) {
            System.out.println(employee);
        }
    }

运行结果:

1: org.springframework.data.jpa.repository.support.SimpleJpaRepository@bd1111a
Hibernate: 
    select
        employee0_.id as id1_0_,
        employee0_.age as age2_0_,
        employee0_.name as name3_0_ 
    from
        Employee employee0_ 
    where
        (
            employee0_.name like ?
        ) 
        and employee0_.age<?
Employee [id=3, name=test12, age=18]
Employee [id=4, name=test13, age=18]
Employee [id=5, name=test121, age=18]

查询规范

这里写图片描述

2. 基于注解

dao层方法:

import java.util.List;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.RepositoryDefinition;
import org.springframework.data.repository.query.Param;
import com.wzw.springdata.model.Employee;

@RepositoryDefinition(domainClass = Employee.class, idClass = Integer.class)
public interface EmployeeRepository2 {

    Employee getEmployeeByName(String name);

    /**
     * 获取年龄最大的信息 注意 from Employee 的是类名
     * @param age
     * @return
     */
    @Query("select o from Employee o where o.age=(select max(age) from Employee)")
    List<Employee> getEmpByAge();

    /**
     * 获取name包含 哪些 并且年龄等于多少岁
     * @param name
     * @param age
     * @return
     */
    @Query("select o from Employee o where o.name like %?1% and o.age = ?2")
    public List<Employee> querayParams(String name,Integer age);

    /**
     * 获取总记录数
     * nativeQuery =true  表示支持本地sql查询
     * @return
     */
    @Query(nativeQuery = true,value = "select count(*) from employee")
    public long getCount();

测试方法:

    @Test
    public void fun5() {
        System.out.println("1: " + er);
        List<Employee> list = er2.getEmpByAge();
        for (Employee employee : list) {
            System.out.println("2: " + employee);
        }
    }

    @Test
    public void fun6() {
        System.out.println("1: " + er);
        List<Employee> list = er2.querayParams("es", 18);
        for (Employee employee : list) {
            System.out.println("2: " + employee);
        }
    }

    @Test
    public void fun7() {
        System.out.println("1: " + er);
        long count = er2.getCount();
        System.out.println(count);
    }

注解解释

1. @Query

@Query("select o from Employee o where o.age=(select max(age) from Employee)")

SpringData中@Query主要是针对于持久层对象的操作!!

2. nativeQuery属性

@Query(nativeQuery = true,value = "select count(*) from employee")

SpringData中若想用本地Sql,请在@Query注解中设置nativeQuery属性为true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值