1. Repository接口

1.1. Repository接口是Spring Data JPA中为我我们提供的所有接口中的顶层接口。

1.2. Repository提供了两种查询方式的支持

1.2.1. 基于方法名称命名规则查询。

1.2.2. 基于@Query注解查询。

2. 方法名称命名规则查询

2.1. 规则: findBy(关键字)+属性名称(属性名称的首字母大写)+查询条件(首字母大写)。

2.2. 方法名称命名规则查询列表

关键字

方法命名

sql语句

findByName(String name)

where name=?

Is

findByNameIs(String name)

where name=?

Equals

findByNameEquals(String name)

where name=?

And

findByNameAndSex(String name, String sex)

where name=? and sex=?

Or

findByIdOrName(Integer id, String name)

where id=? or name=?

Between

findByIdBetween(Integer x, Integer y)

where id between ? and ?

LessThan

findByIdLessThan(Integer x)

where id<?

LessThanEqual

findByIdLessThanEqual(Integer x)

where id<=?

GreaterThan

findByIdGreaterThan(Integer x)

where id>?

GreaterThanEqual

findByIdGreaterThanEqual(Integer x)

where id>=?

After

findByIdAfter(Integer x)

where id>?

Before

findByIdBefore(Integer x)

where id<?

IsNull

findByNameIsNull()

where name is null

IsNotNull

findByNameIsNotNull()

where name is not null

NotNull

findByNameNotNull()

where name is not null

Like

findByNameLike(String name)

where name like ?

NotLike

findByNameNotLike(String name)

where name not like ?

StartingWith

findByNameStartingWith(String name)

where name like ?%

EndingWith

findByNameEndingWith(String name)

where name like %?

Containing

findByNameContaining(String name)

where name like %?%

OrderBy

findBySexOrderByIdDesc(String sex)

where sex=? order by id desc

Not

findByNameNot(String name)

where name <> ?

In

findByIdIn(Collection<Integer> c)

where id in (?)

NotIn

findByIdNotIn(Collection<Integer> c)

where id not in (?)

3. 方法名称命名规则查询例子 

3.1. 创建一个名为spring-data-jpa-naming的Java项目, 同时添加相关jar包, 并添加JUnit能力。

3.2. 新建User.java

package com.bjbs.pojo;import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import org.springframework.format.annotation.DateTimeFormat;@Entity // 指定该类是实体类
@Table(name = "user") // 指定数据库表名(表名和实体类对应)
public class User implements Serializable {private static final long serialVersionUID = 1L;@Id // 指定为主键@GeneratedValue(strategy = GenerationType.IDENTITY) // 指定主键生成策略@Column(name = "id") // 指定表中列名(列名和属性名对应)private Integer id;@Column(name = "name")private String name;@Column(name = "sex")private String sex;@Column(name = "birthday")@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")private Date birthday;@Column(name = "address")private String address;public User() {}public User(String name, String sex, Date birthday, String address) {this.name = name;this.sex = sex;this.birthday = birthday;this.address = address;}public User(Integer id, String name, String sex, Date birthday, String address) {this.id = id;this.name = name;this.sex = sex;this.birthday = birthday;this.address = address;}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {return "User [id=" + id + ", name=" + name + ", sex=" + sex + ", birthday=" + birthday + ", address=" + address+ "]";}
}

3.3. 新建UserRepository.java, 实现Repository

package com.bjbs.dao;import java.util.Collection;
import java.util.List;
import org.springframework.data.repository.Repository;
import com.bjbs.pojo.User;/*** 参数一T: 当前需要映射的实体; 参数二 T: 当前映射的实体中的id的类型*/
public interface UserRepository extends Repository<User, Integer> {/*** 判断相等*/User findByName(String name);User findByNameIs(String name);User findByNameEquals(String name);/*** And语句*/User findByNameAndSex(String name, String sex);/*** Or语句*/List<User> findByIdOrName(Integer id, String name);/*** Between语句*/List<User> findByIdBetween(Integer x, Integer y);/*** < x*/List<User> findByIdLessThan(Integer x);/*** <= x*/List<User> findByIdLessThanEqual(Integer x);/*** > x*/List<User> findByIdGreaterThan(Integer x);/*** >= x*/List<User> findByIdGreaterThanEqual(Integer x);/*** > x*/List<User> findByIdAfter(Integer x);/*** < x*/List<User> findByIdBefore(Integer x);/*** IsNull语句*/List<User> findByNameIsNull();/*** IsNotNull语句*/List<User> findByNameIsNotNull();/*** NotNull语句*/List<User> findByNameNotNull();/*** Like语句*/List<User> findByNameLike(String name);/*** NotLike语句*/List<User> findByNameNotLike(String name);/*** Like name%*/List<User> findByNameStartingWith(String name);/*** Like %name*/List<User> findByNameEndingWith(String name);/*** Like %name%*/List<User> findByNameContaining(String name);/*** OrderBy语句*/List<User> findBySexOrderByIdDesc(String sex);/*** Not语句*/List<User> findByNameNot(String name);/*** In语句*/List<User> findByIdIn(Collection<Integer> c);/*** NotIn语句*/List<User> findByIdNotIn(Collection<Integer> c);
}

3.4. 新建UserService.java

package com.bjbs.service;import java.util.Collection;
import java.util.List;
import com.bjbs.pojo.User;public interface UserService {User findByName(String name);User findByNameIs(String name);User findByNameEquals(String name);User findByNameAndSex(String name, String sex);List<User> findByIdOrName(Integer id, String name);List<User> findByIdBetween(Integer x, Integer y);List<User> findByIdLessThan(Integer x);List<User> findByIdLessThanEqual(Integer x);List<User> findByIdGreaterThan(Integer x);List<User> findByIdGreaterThanEqual(Integer x);List<User> findByIdAfter(Integer x);List<User> findByIdBefore(Integer x);List<User> findByNameIsNull();List<User> findByNameIsNotNull();List<User> findByNameNotNull();List<User> findByNameLike(String name);List<User> findByNameNotLike(String name);List<User> findByNameStartingWith(String name);List<User> findByNameEndingWith(String name);List<User> findByNameContaining(String name);List<User> findBySexOrderByIdDesc(String sex);List<User> findByNameNot(String name);List<User> findByIdIn(Collection<Integer> c);List<User> findByIdNotIn(Collection<Integer> c);
}

3.5. 新建UserServiceImpl.java

package com.bjbs.service.impl;import java.util.Collection;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.bjbs.dao.UserRepository;
import com.bjbs.pojo.User;
import com.bjbs.service.UserService;@Service
@Transactional
public class UserServiceImpl implements UserService {@Autowiredprivate UserRepository userRepository;@Overridepublic User findByName(String name) {return userRepository.findByName(name);}@Overridepublic User findByNameIs(String name) {return userRepository.findByNameIs(name);}@Overridepublic User findByNameEquals(String name) {return userRepository.findByNameEquals(name);}@Overridepublic User findByNameAndSex(String name, String sex) {return userRepository.findByNameAndSex(name, sex);}@Overridepublic List<User> findByIdOrName(Integer id, String name) {return userRepository.findByIdOrName(id, name);}@Overridepublic List<User> findByIdBetween(Integer x, Integer y) {return userRepository.findByIdBetween(x, y);}@Overridepublic List<User> findByIdLessThan(Integer x) {return userRepository.findByIdLessThan(x);}@Overridepublic List<User> findByIdLessThanEqual(Integer x) {return userRepository.findByIdLessThanEqual(x);}@Overridepublic List<User> findByIdGreaterThan(Integer x) {return userRepository.findByIdGreaterThan(x);}@Overridepublic List<User> findByIdGreaterThanEqual(Integer x) {return userRepository.findByIdGreaterThanEqual(x);}@Overridepublic List<User> findByIdAfter(Integer x) {return userRepository.findByIdAfter(x);}@Overridepublic List<User> findByIdBefore(Integer x) {return userRepository.findByIdBefore(x);}@Overridepublic List<User> findByNameIsNull() {return userRepository.findByNameIsNull();}@Overridepublic List<User> findByNameIsNotNull() {return userRepository.findByNameIsNotNull();}@Overridepublic List<User> findByNameNotNull() {return userRepository.findByNameIsNotNull();}@Overridepublic List<User> findByNameLike(String name) {return userRepository.findByNameLike(name);}@Overridepublic List<User> findByNameNotLike(String name) {return userRepository.findByNameNotLike(name);}@Overridepublic List<User> findByNameStartingWith(String name) {return userRepository.findByNameStartingWith(name);}@Overridepublic List<User> findByNameEndingWith(String name) {return userRepository.findByNameEndingWith(name);}@Overridepublic List<User> findByNameContaining(String name) {return userRepository.findByNameContaining(name);}@Overridepublic List<User> findBySexOrderByIdDesc(String sex) {return userRepository.findBySexOrderByIdDesc(sex);}@Overridepublic List<User> findByNameNot(String name) {return userRepository.findByNameNot(name);}@Overridepublic List<User> findByIdIn(Collection<Integer> c) {return userRepository.findByIdIn(c);}@Overridepublic List<User> findByIdNotIn(Collection<Integer> c) {return userRepository.findByIdNotIn(c);}}

3.6. 新建TestUserRepository.java

package com.bjbs.test;import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.bjbs.pojo.User;
import com.bjbs.service.UserService;@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class TestUserRepository {@Autowiredprivate UserService userService;/*** 查询姓名等于'曹操'的用户*/@Testpublic void findByName() {User user = userService.findByName("曹操");System.out.println(user);}/*** 查询姓名等于'曹操'的用户*/@Testpublic void findByNameIs() {User user = userService.findByNameIs("曹操");System.out.println(user);}/*** 查询姓名等于'曹操'的用户*/@Testpublic void findByNameEquals() {User user = userService.findByNameEquals("曹操");System.out.println(user);}/*** 查询姓名等于'曹操'并且性别等于'男'的用户*/@Testpublic void findByNameAndSex() {User user = userService.findByNameAndSex("曹操", "男");System.out.println(user);}/*** 查询id等于37或的姓名等于'曹操'所有用户*/@Testpublic void findByIdOrName() {List<User> list = userService.findByIdOrName(37, "曹操");for (User user : list) {System.out.println(user);}}/*** 查询id在30-35之间的所有用户(包括id是30和35的用户)*/@Testpublic void findByIdBetween() {List<User> list = userService.findByIdBetween(30, 35);for (User user : list) {System.out.println(user);}}/*** 查询id<33的所有用户*/@Testpublic void findByIdLessThan() {List<User> list = userService.findByIdLessThan(33);for (User user : list) {System.out.println(user);}}/*** 查询id<=33的所有用户*/@Testpublic void findByIdLessThanEqual() {List<User> list = userService.findByIdLessThanEqual(33);for (User user : list) {System.out.println(user);}}/*** 查询id>55的所有用户*/@Testpublic void findByIdGreaterThan() {List<User> list = userService.findByIdGreaterThan(55);for (User user : list) {System.out.println(user);}}/*** 查询id>=55的所有用户*/@Testpublic void findByIdGreaterThanEqual() {List<User> list = userService.findByIdGreaterThanEqual(55);for (User user : list) {System.out.println(user);}}/*** 查询id>55的所有用户*/@Testpublic void findByIdAfter() {List<User> list = userService.findByIdAfter(55);for (User user : list) {System.out.println(user);}}/*** 查询id<33的所有用户*/@Testpublic void findByIdBefore() {List<User> list = userService.findByIdBefore(33);for (User user : list) {System.out.println(user);}}/*** 查询姓名为Null的所有用户*/@Testpublic void findByNameIsNull() {List<User> list = userService.findByNameIsNull();for (User user : list) {System.out.println(user);}}/*** 查询姓名不是空的所有用户*/@Testpublic void findByNameIsNotNull() {List<User> list = userService.findByNameIsNotNull();for (User user : list) {System.out.println(user);}}/*** 查询姓名不是空的所有用户*/@Testpublic void findByNameNotNull() {List<User> list = userService.findByNameNotNull();for (User user : list) {System.out.println(user);}}/*** 查询姓名包含'河公'的所有用户*/@Testpublic void findByNameLike() {List<User> list = userService.findByNameLike("%河公%");for (User user : list) {System.out.println(user);}}/*** 查询姓名不是以'操'结尾的所有用户*/@Testpublic void findByNameNotLike() {List<User> list = userService.findByNameNotLike("%操");for (User user : list) {System.out.println(user);}}/*** 查询姓名以'李'开头的所有用户*/@Testpublic void findByNameStartingWith() {List<User> list = userService.findByNameStartingWith("李");for (User user : list) {System.out.println(user);}}/*** 查询姓名以'操'结尾的所有用户*/@Testpublic void findByNameEndingWith() {List<User> list = userService.findByNameEndingWith("操");for (User user : list) {System.out.println(user);}}/*** 查询姓名包含'河公'的所有用户*/@Testpublic void findByNameContaining() {List<User> list = userService.findByNameContaining("河公");for (User user : list) {System.out.println(user);}}/*** 查询性别是'女'的所有用户并按id倒序排列*/@Testpublic void findBySexOrderByIdDesc() {List<User> list = userService.findBySexOrderByIdDesc("女");for (User user : list) {System.out.println(user);}}/*** 查询姓名不是'曹操'的所有用户*/@Testpublic void findByNameNot() {List<User> list = userService.findByNameNot("曹操");for (User user : list) {System.out.println(user);}}/*** 查询id是35 42 43 44的这几个用户*/@Testpublic void findByIdIn() {Collection<Integer> c = new ArrayList<Integer>();c.add(35);c.add(42);c.add(43);c.add(44);List<User> list = userService.findByIdIn(c);for (User user : list) {System.out.println(user);}}/*** 查询id不是35 42 43 44的所有用户*/@Testpublic void findByIdNotIn() {Collection<Integer> c = new ArrayList<Integer>();c.add(35);c.add(42);c.add(43);c.add(44);List<User> list = userService.findByIdNotIn(c);for (User user : list) {System.out.println(user);}}
}

3.7. 在src下新建application.properties

spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.25.138:3306/StudyMybatis?useSSL=true&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=lyw123456

3.8. 在src下新建applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:jpa="http://www.springframework.org/schema/data/jpa"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"><!-- 配置读取properties文件的工具类 --><context:property-placeholder location="classpath:application.properties" /><!-- 配置c3p0数据库连接池 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><property name="jdbcUrl" value="${spring.datasource.url}" /><property name="driverClass" value="${spring.datasource.driverClassName}" /><property name="user" value="${spring.datasource.username}" /><property name="password" value="${spring.datasource.password}" /></bean><!-- Spring整合JPA 配置EntityManagerFactory --><bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"><property name="dataSource" ref="dataSource" /><property name="jpaVendorAdapter"><bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"><!-- hibernate相关的属性的注入 --><!-- 配置数据库类型 --><property name="database" value="MYSQL" /><!-- 正向工程 自动创建表 --><!-- <property name="generateDdl" value="true" /> --><!-- 显示执行的SQL --><property name="showSql" value="true" /></bean></property><!-- 扫描实体的包 --><property name="packagesToScan"><list><value>com.bjbs.pojo</value></list></property></bean><!-- 配置Hibernate的事务管理器 --><bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"><property name="entityManagerFactory" ref="entityManagerFactory" /></bean><!-- 配置开启注解事务处理 --><tx:annotation-driven transaction-manager="transactionManager" /><!-- 配置springIOC的注解扫描 --><context:component-scan base-package="com.bjbs.service" /><!-- Spring Data JPA 的配置 --><!-- base-package: 扫描dao接口所在的包 --><jpa:repositories base-package="com.bjbs.dao" />
</beans>

3.9. 数据库user表

3.10. 查询姓名等于'曹操'的用户

3.11. 查询姓名等于'曹操'的用户

3.12. 查询姓名等于'曹操'的用户

3.13. 查询姓名等于'曹操'并且性别等于'男'的用户

3.14. 查询id等于37或的姓名等于'曹操'多个用户

3.15. 查询id在30-35之间的所有用户(包括id是30和35的用户)

3.16. 查询id<33的所有用户

3.17. 查询id<=33的所有用户

3.18. 查询id>55的所有用户

3.19. 查询id>=55的所有用户

3.20. 查询id>55的所有用户

3.21. 查询id<33的所有用户

3.22. 查询姓名为Null的所有用户

 3.23. 查询姓名不是空的所有用户

3.24. 查询姓名不是空的所有用户

3.25. 查询姓名包含'河公'的所有用户

3.26. 查询姓名不是以'操'结尾的所有用户

3.27. 查询姓名以'李'开头的所有用户

3.28. 查询姓名以'操'结尾的所有用户

3.29. 查询姓名包含'河公'的所有用户

3.30. 查询性别是'女'的所有用户并按id倒序排列

3.31. 查询姓名不是'曹操'的所有用户

3.32. 查询id是35 42 43 44的这几个用户

3.33. 查询id不是35 42 43 44的所有用户

006_Spring Data JPA基于方法名称命名规则查询相关推荐

  1. 【Spring】jpa数据库表实体命名规则 Unknown column ‘user0_.create_time‘ in ‘field list‘

    1.概述 转载: https://www.cnblogs.com/wgslucky/p/10109691.html 数据库,表字段命名是驼峰命名法(createTime),Spring data jp ...

  2. 贴片铝电容识别及型号_TDK贴片电容识别方法及命名规则

    原标题:TDK贴片电容识别方法及命名规则 TDK贴片电容识别方法及命名规则,TDK是Tokyo Denkikagaku Kogyo K.K的简称.是日本的一个品牌.今天我们一起来学习一下如何识别TDK ...

  3. spring data jpa实现有条件的分页查询功能

    spring data jpa实现有条件的分页查询功能 前端部分代码.发送请求: $('#grid').datagrid({iconCls: 'icon-forward',fit: true,bord ...

  4. Spring Data JPA 从入门到精通~定义查询方法的配置方法

    定义查询方法的配置方法 由于 Spring JPA Repository 的实现原理是采用动态代理的机制,所以我们介绍两种定义查询方法,从方法名称中可以指定特定用于存储的查询和更新,或通过使用 @Qu ...

  5. 【Linux】/dev 目录中的设备文件名称命名规则

    设备命名规则对应表 设备 文件首名 + [序号] SCSI / SATA / USB 接口 sd [ a~p ] IDE 接口 hd [ a~d ] 软盘 fd [ 0~7 ] CDROM / DVD ...

  6. jpa分页查询_spring data jpa 居然提供了这么多查询方式!

    spring data jpa提供了多种查询方式,如下: 方法名称查询 继承Repository接口 测试代码 方法名称中支持的关键字(官方文档提供) 使用JPA命名查询 在User实体中定义jpql ...

  7. hql 查询关联对象_在spring data jpa中如何做报表统计查询?

    问题描述 之前有个简单的报表统计需求,如果用sql的话是比较简单的,但是基于spring data jpa还没有遇到好的解决方案,折腾半天用spring data提供的几种方式都不能解决,spring ...

  8. jpa多表联查动态_Spring Data JPA实现动态多表关联查询

    在面向关系型数据库(例如:MySQL)的查询中,动态的.多表关联的查询属于比较复杂的情况.所以,我们只要掌握了这种复杂的查询,当面对其他查询情况时,就能做到胸有成竹. 在java工程中,目前我所了解到 ...

  9. Spring Data JPA实现多表的关联查询

    1.Spring Data JPA关系映射 对象关系映射(Object relational mapping)是指通过将对象状态映射到数据库列,来开发和维护对象和关系数据库之间的关系.它能够轻松处理( ...

最新文章

  1. 快速 开发平台 架构_快速介绍清洁架构
  2. 1.7-bzip2和bunzip2
  3. python+selenium+Robot
  4. ROS: Ubuntu16.04安装ROS-kinetic
  5. shell判定一个变量等于-n_Shell test命令:条件判断,检查某条件是否成立
  6. python操作mysql数据库的常用方法使用详解
  7. cmd控制远程电脑运行程序_电脑远程控制怎么,远程桌面开启教程
  8. AI未成解药 流利说2019年净亏5.75亿 Q4付费用户再降20万
  9. 4python全栈之路系列之scrapy爬虫s
  10. end_request: I/O error
  11. About MS Reporting Service
  12. linux下罗技摄像头采集图片,linux下寻找罗技摄像头快看酷讯版驱动
  13. CMDN Club每周精选(第2期)
  14. 栈这种数据结构,不就后进先出?
  15. VMware Workstation 17 Pro密钥
  16. 改变销售预测准确率的4个最佳实践!
  17. 2021考研复试面试形式:线上视频面试注意事项?
  18. 神经网络(四)-vanishing gradient problem
  19. 荷塘趣事计算机作业,【《荷塘趣事》摄影图片】生态摄影_人称开哥_太平洋电脑网摄影部落...
  20. Beaver 论文阅读笔记

热门文章

  1. window编程_消息分类
  2. 20145328《网络对抗》Web基础
  3. hdu 2243 考研路茫茫——单词情结(AC自动+矩阵)
  4. oracle和SQLserver数据库中select into 的区别
  5. AngularJS 拦截器和好棒例子
  6. Windows Phone开发(37):动画之ColorAnimation
  7. 屌丝逆袭高富帅之JAVA之路
  8. 中国电信计划构建安全新平台
  9. 电脑总是跳出错误报告
  10. 【Windows系统】用户配置文件删除