JPA中所有findBy语法规则(举例)

2023-11-06

JPA中findBy基本语法规则:

1.首先先新建一个数据库,名字叫做jpatest

 

2.新建一个SpringBoot项目(如果新手还不会,请先阅读idea中如何快速创建SpringBoot项目)

这边需要引入jpa+mysql+web的相关依赖,如果创建的时候没有引入就需要在pom.xml进行配置

 

新建一个controller包(控制类所在地),entity包(实体类所在地),repository包(dao类所在地)

3.application.properties配置文件中添加mysql数据库和jpa的相关配置

#数据库驱动

#数据库url地址,其中jpatest是数据库名称

spring.datasource.url=jdbc:mysql://localhost:3308/jpatest?useUnicode=true&characterEncoding=utf-8

#用户名称

#用户密码

#创建数据库表结构(更新的状态下创建)

#显示执行的sql语句

4.新建表映射实体类

import javax.persistence.*;

/**

* Created by qiang on 2018/1/22.

*/

@Entity

@Table(name="user")

public class User {

@Id

@GenericGenerator(name = "PKUUID", strategy = "uuid2")

@GeneratedValue(generator = "PKUUID")

@Column(length = 36)

protected String id;

/**

* 名字

*/

@Column(name = "name", nullable = true, length = 30)

private String name;

/**

* 身高

*/

@Column(name = "height", nullable = true, length = 10)

private Integer height;

public User() {

}

public String getId() {

return id;

}

public void setId(String id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Integer getHeight() {

return height;

}

public void setHeight(Integer height) {

this.height = height;

}

}

关于实体类的注释我会在接下来的章节中具体的介绍给大家,这篇文章先不做介绍。

5.jpa的数据操作接口(也是本章节中的重点)

import java.util.List;

/**

* Created by qiang on 2018/1/22.

*/

public interface UserRepository extends JpaRepository{

/**

* 相当于 select *from user where name=?

* @param name

* @return

*/

public List findByName(String name);

/**

* 相当于select *from user where name like ?

* 但是有一点需要注意的是,%需要我们自己来写

* @param name

* @return

*/

public List findByNameLike(String name);

/**

* 相当于select *from user where name not like ?

* 但是有一点需要注意的是,%需要我们自己来写

* @param name

* @return

*/

public List findByNameNotLike(String name);

/**

* 相当于 select *from user where name ?

* @param name

* @return

*/

public List findByNameNot(String name);

/**

* 相当于 select *from user where id in (?)

* @param ids

* @return

*/

public List findByIdIn(List ids);

/**

* 相当于 select *from user where id not in ()

* @param ids

* @return

*/

public List findByIdNotIn(List ids);

/**

* 相当于 select *from user where name=? order by height desc

* @param name

* @return

*/

public List findByNameOrderByHeightDesc(String name);

/**

* 相当于 select *from user where name=? order by height asc

* @param name

* @return

*/

public List findByNameOrderByHeightAsc(String name);

/**

* 相当于 select *from user where name is null

* @return

*/

public List findByNameIsNull();

/**

* 相当于 select *from user where name is not null

* @return

*/

public List findByNameIsNotNull();

/**

* 相当于 select *from user where name =? and height=?

* @param name

* @param height

* @return

*/

public List findByNameAndHeight(String name,int height);

/**

* 相当于 select *from user where name =? or height=?

* @param name

* @param height

* @return

*/

public List findByNameOrHeight(String name,int height);

/**

* 相当于 select *from user where height between ? and ?

* 需要注意的是mysql是有包含两个端点值的

* @param start

* @param end

* @return

*/

public List findByHeightBetween(int start,int end);

/**

* 相当于 select *from user where height < ?

* 需要注意的是mysql是没有包含端点值的

* @param less

* @return

*/

public List findByHeightLessThan(int less);

/**

* 相当于 select *from user where height > ?

* 需要注意的是mysql是没有包含端点值的

* @param greater

* @return

*/

public List findByHeightGreaterThan(int greater);

}

具体语法规则和对应的sql都在代码中给出来了,这边需要和大家说的是UserRepository接口的特点。我们通过继承JpaRepository《对应的实体类,主键属性值》来编写findBy等相关的函数来查询数据库。继承JpaRepository的接口在使用的时候,通过@Autowired会自动创建接口的实现类,不需要怎么去实现这个接口,这也是jpa最方便的地方。

5.通过控制类调用dao接口

import org.springframework.web.bind.annotation.RequestMapping;

import java.util.ArrayList;

import java.util.List;

/**

* Created by qiang on 2018/1/22.

*/

@Controller

@RequestMapping(value = "jpa")

public class UserController {

@Autowired

private UserRepository userRepository;

@RequestMapping(value = "findByName",method = RequestMethod.GET)

@ResponseBody

public List findByName(String name){

return userRepository.findByName(name);

}

@RequestMapping(value = "findByHeightBetween",method = RequestMethod.GET)

@ResponseBody

public List findByHeightBetween(int start,int end){

return userRepository.findByHeightBetween(start,end);

}

@RequestMapping(value = "findByHeightLessThan",method = RequestMethod.GET)

@ResponseBody

public List findByHeightLessThan(int less){

return userRepository.findByHeightLessThan(less);

}

@RequestMapping(value = "findByHeightGreaterThan",method = RequestMethod.GET)

@ResponseBody

public List findByHeightGreaterThan(int greater){

return userRepository.findByHeightGreaterThan(greater);

}

@RequestMapping(value = "findByNameAndHeight",method = RequestMethod.GET)

@ResponseBody

public List findByNameAndHeight(String name,int height){

return userRepository.findByNameAndHeight(name,height);

}

@RequestMapping(value = "findByNameOrHeight",method = RequestMethod.GET)

@ResponseBody

public List findByNameOrHeight(String name,int height){

return userRepository.findByNameOrHeight(name,height);

}

@RequestMapping(value = "findByNameIsNull",method = RequestMethod.GET)

@ResponseBody

public List findByNameIsNull(){

return userRepository.findByNameIsNull();

}

@RequestMapping(value = "findByNameIsNotNull",method = RequestMethod.GET)

@ResponseBody

public List findByNameIsNotNull(){

return userRepository.findByNameIsNotNull();

}

@RequestMapping(value = "findByNameOrderByHeightDesc",method = RequestMethod.GET)

@ResponseBody

public List findByNameOrderByHeightDesc(String name){

return userRepository.findByNameOrderByHeightDesc(name);

}

@RequestMapping(value = "findByNameOrderByHeightAsc",method = RequestMethod.GET)

@ResponseBody

public List findByNameOrderByHeightAsc(String name){

return userRepository.findByNameOrderByHeightAsc(name);

}

@RequestMapping(value = "findByNameLike",method = RequestMethod.GET)

@ResponseBody

public List findByNameLike(String name){

return userRepository.findByNameLike("%"+name+"%");

}

@RequestMapping(value = "findByNameNotLike",method = RequestMethod.GET)

@ResponseBody

public List findByNameNotLike(String name){

return userRepository.findByNameNotLike("%"+name+"%");

}

@RequestMapping(value = "findByNameNot",method = RequestMethod.GET)

@ResponseBody

public List findByNameNot(String name){

return userRepository.findByNameNot(name);

}

@RequestMapping(value = "findByIdIn",method = RequestMethod.GET)

@ResponseBody

public List findByIdIn(String ids){

Listlist=new ArrayList();

String[] idsStr=ids.split(",");

for(String id:idsStr){

list.add(id);

}

return userRepository.findByIdIn(list);

}

@RequestMapping(value = "findByIdNotIn",method = RequestMethod.GET)

@ResponseBody

public List findByIdNotIn(String ids){

Listlist=new ArrayList();

String[] idsStr=ids.split(",");

for(String id:idsStr){

list.add(id);

}

return userRepository.findByIdNotIn(list);

}

}

到这里关于jpa中findBy基本的语法就介绍完毕了,下一节将介绍jpa中关联查询的用法。

项目GitHub地址:https://github.com/1913045515/JPA

 

转载自:https://blog.csdn.net/linzhiqiang0316/article/details/79177077

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JPA中所有findBy语法规则(举例) 的相关文章

随机推荐

  • 动态路由协议RIP配置实战

    1 RIP简介 RIP是一种基于距离矢量 Distance Vector 算法的协议 它使用跳数 Hop Count 作为度量值来衡量到达目的地址的距离 在RIP网络中 RIP协议要求网络中每一台路由器都要维护从自身到每一个目的网络的路由信
  • Kettle-动态数据链接,使JOB得以复用

    动态数据连接 使JOB得以复用 背景 移动执法系统在目前的主要的部署策略为1 N的方式 即总队部署一套 地市各部署一套 且基本都在环保专网 各地市的业务数据需要推送到总队系统 以便总队系统做整体的监督 决策 在整个数据对接过程中 基于Ket
  • Matlab导入txt文件

    有三种常见的方式 1 A importdata filename txt 则A就是n m的矩阵了 2 load filename txt 这样也是载入n m的矩阵 3 在MATLAB的work文件夹下 选择想要导入的数据 用右键import
  • 前端系列-1 HTML+JS+CSS基础

    背景 前端系列会收集碎片化的前端知识点 作为自己工作和学习时的字典 欢迎读者收藏和使用 笔者是后端开发 前端涉猎不深 因此文章重在广度和实用 对原理和性能不会过多深究 1 html 1 1 html5网页结构
  • 如何判断两条线段是否相交

    本篇是在 C 笔记 如何判断2个线段相交 的基础上加上自己的理解和实践总结出的判断两线段是否相交的方法 判断两条线段是否相交 先附上判断函数 bool judge int Ax1 int Ay1 int Ax2 int Ay2 int Bx
  • vue3的ref,unref,reactive,toRefs,toRef

    ref函数 接受一个初始值并返回一个响应式且可变的 ref 对象 ref 对象仅有一个 value属性 指向该初始值 const count ref 0 console log count value 0 count value conso
  • 判断图连通性的三种方法

    在看哥尼斯堡七桥问题的时候 谈到欧拉回路的问题 不免又想到了图的连通性 想到以后说不定会遇到相关问题 就做下连通性判断算法总结实现 如果一个图是连通的 那么从一个节点开始访问 采用深度优先或者广度优先对它进行遍历 那么必定能够访问完所有的节
  • xml转JavaBean

    在进行webservice通信的时候 需要解析xml为一个对象 由于个人也是第一次接触xml转对象 于是参考网上的例子写了一个工具类 所有jar包支持 fastjson dom4j public class XmlConverBeanUti
  • 数字化转型:科技赋能供给创造需求 附下载

    疫情对各行业及科创的影响我们都深切地感受到了 像AI家居 AR游戏等比较火爆的项目都是在疫情中喷发 此报告结合疫情驱动新兴技术演变及商业落地的态势 探讨数字化对于科创的意义 报告亮点 5G商业化将伴随成熟应用由点向面展开 人工智能和企业数字
  • 06-底层必备源码-JVM底层-GC算法流程(自我总结)

    一 判断 是否GC 的算法 1 引用计数法 1 1 规则 如果这个obj被引用 计数器 1 引用失效 计数器 1 当一个obj的引用计数器为0 就不代表被使用 1 2 缺点 不能解决循环引用的问题 2 可达性分析算法 2 1 规则 以GCr
  • Keras CIFAR-10图像识别数据集 2021-07-10

    Keras CIFAR 10图像识别数据集 一 下载CIFAR 10数据 1 导入所需模块 from keras datasets import cifar10 import numpy as np np random seed 10 2
  • 万事开头难——Android SDK安装

    首届 Google 暑期大学生博客分享大赛 2010 Andriod 篇 今天研究了一上午才把SDK安装成功 真是万事开头难 下面就把安装的过程分享出来 Eclipse Android SDK 2 1环境部署 一 第一步安装JDK Java
  • t检验与Z检验的区别

    在统计学中 假设检验是评估某种特定情况下观察到的数据是否符合假设的一种方法 t检验和Z检验是两种常用的假设检验方法 分别用于比较均值差异以及比例差异 在医学统计中 t检验和Z检验经常被用于研究和比较不同治疗方法的效果 例如药物疗效 手术效果
  • spring JavaBean引入JavaBean ( 外部引用, 内部定义, 级联属性 )

  • 探针漏洞_长亭xray:一款自动化Web漏洞扫描神器(免费社区版)

    xray 简介 xray 是从长亭洞鉴核心引擎中提取出的社区版漏洞扫描神器 支持主动 被动多种扫描方式 自备盲打平台 可以灵活定义 POC 功能丰富 调用简单 支持 Windows macOS Linux 多种操作系统 可以满足广大安全从业
  • java删除指定目录下的文件(包括目录)

    代码 import java io File public class Test 判断指定的文件或文件夹删除是否成功 param FileName 文件或文件夹的路径 return true or false 成功返回true 失败返回fa
  • 网络综合布线实训室方案(2023版)

    综合布线实训室概述 随着智慧城市的蓬勃发展 人工智能 物联网 云计算 大数据等新兴行业也随之崛起 网络布线系统作为现代智慧城市 智慧社区 智能建筑 智能家居 智能工厂和现代服务业的基础设施和神经网络 发挥着重要作用 实践表明 网络系统故障的
  • 使用web3 部署智能合约

    CentOS 7 环境 web3安装 及 对象的创建 m0 47233175的博客 CSDN博客https blog csdn net m0 47233175 article details 121960931还未安装web3环境 请参照以
  • 《OpenGL ES 2.0 Programming Guide》摘录

    一 Introduction toOpenGL ES 2 0 1 What Is OpenGL ES OpenGL ES is an application programming interface API for advanced 3D
  • JPA中所有findBy语法规则(举例)

    JPA中findBy基本语法规则 1 首先先新建一个数据库 名字叫做jpatest 2 新建一个SpringBoot项目 如果新手还不会 请先阅读idea中如何快速创建SpringBoot项目 这边需要引入jpa mysql web的相关依