精通 Spring Boot 系列文(8)
程序IT圈
共 4222字,需浏览 9分钟
· 2020-07-27
阅读全文,约 9 分钟
Spring Data JPA
使用:将数据访问层接口实现 JpaRepository 接口即可完成 Spring Data JPA 访问数据。
JpaRepository 极大简化了 JPA 作为数据访问的代码。
今天给大家介绍几个案例:
简单条件查询
关联查询和 @Query 查询
@NamedQuery 查询
Specification 查询
案例1:简单条件的查询
1)编辑 pom.xml 文件(与 CrudRepository 接口案例一样)
2)编辑 application.properties 文件(与 CrudRepository 接口案例一样)
3)创建 Student 持久化类
package nx.bean;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
// 学生
@Entity
@Table(name="tb_student") // 学生表
public class Student implements Serializable{
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name ; // 名字
private String address ; // 地址
private int age ; // 年龄
private char sex; // 性别
// getXxx & setXxx 方法
}
4)创建 StudentRepository 数据访问接口
package nx.repository;
import java.util.List;
import nx.bean.Student;
import org.springframework.data.jpa.repository.JpaRepository;
public interface StudentRepository extends JpaRepository<Student, Integer> {
/**
* 通过学生姓名来查询学生对象
* 此方法相当于JPQL语句代码
* select s from Student s where s.name = ?1
*/
Student findByName(String name);
/**
* 通过名字和地址查询学生信息
* 此方法相当于JPQL语句代码
* select s from Student s where s.name = ?1 and s.address=?2
*/
List findByNameAndAddress(String name , String address) ;
/**
* 通过学生姓名模糊查询学生信息
* 此方法相当于JPQL语句代码
* select s from Student s where s.name like ?1
*/
List findByNameLike(String name) ;
}
5)创建 StudentService 业务层类
package nx.service;
import java.util.List;
import javax.annotation.Resource;
import nx.bean.Student;
import nx.repository.StudentRepository;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
public class StudentService {
// 注入数据访问层接口对象
@Resource
private StudentRepository studentRepository;
// 保存所有
@Transactional
public void saveAll(List students) {
studentRepository.saveAll(students);
}
// 根据名字查找
public Student getStuByName(String name) {
return studentRepository.findByName(name);
}
// 根据名字和地址查找
public List getStusByNameAndAddress(String name,String address) {
return studentRepository.findByNameAndAddress(name,address);
}
// 根据名字模糊查询
public List getStusByNameLike(String name) {
return studentRepository.findByNameLike("%"+name+"%");
}
}
6)创建 StudentController 控制器类
package nx.controller;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import nx.bean.Student;
import nx.service.StudentService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/student")
public class StudentController {
// 注入StudentService
@Resource
private StudentService studentService;
@RequestMapping("/save")
public String save() {
Student s1 = new Student();
s1.setAddress("广州");
s1.setName("帅帅");
s1.setAge(18);
s1.setSex('男');
Student s2 = new Student();
s2.setAddress("广州");
s2.setName("花花");
s2.setAge(17);
s2.setSex('女');
List students = new ArrayList<>();
students.add(s1);
students.add(s2);
studentService.saveAll(students);
return "保存student对象成功";
}
@RequestMapping("/name")
public Student getByName(String name) {
return studentService.getStuByName(name);
}
@RequestMapping("/nameAndAddress")
public List getByNameAndAddress(String name,String address) {
return studentService.getStusByNameAndAddress(name, address);
}
@RequestMapping("/nameLike")
public List getByNameLile(String name) {
return studentService.getStusByNameLike(name);
}
}
7)访问测试
http://localhost:8080/student/nameLike?name=帅
Java后端编程
更多Java推文,关注公众号
评论
文心一言 vs GPT-4 —— 全面横向比较
向AI转型的程序员都关注了这个号👇👇👇文章目录PK方法PK过程Round 1: 语义理解简单语义文言文理解孤立语理解上下文理解Round 2: 内容创作撰写邮件撰写影评撰写软文Round 3: 逻辑推理简单推理逻辑陷阱逻辑干扰多链条推理Round 4: 编码能力常见算法高级算法找bug代码理解Rou
机器学习AI算法工程
0
学一学 Spring Boot 3.x
在 Java 后端开发领域,功能强大的 Spring 开源框架不仅是首选,也是事实上的标准。但由于 Spring 存在配置烦琐、部署不易、依赖管理困难等问题,因此基于 Spring 的快速开发框架 Spring Boot 应运而生,它能大大简化 Spring 应用程序的配置和部署过程。2018 年,
小哈学Java
0
Go 1.22 的新增功能系列之二:reflect.TypeFor
Go 1.22 的第一个候选版本已经发布,这意味着最终版本即将发布,现在是我在博客中介绍我在这个周期中所做工作的时候了。像往常一样,我的贡献很小,但它们是我的,所以我将从幕后的角度来谈谈它们。首先是reflect.TypeFor。这是整个函数:// TypeFor returns the [Type
GoCN
0
有意思!一个关于 Spring 历史的在线小游戏
发现 Spring One 的官网上有个好玩的彩蛋,分享给大家!进到Spring One的官网,可以看到右下角有个类似马里奥游戏中的金币图标。点击该金币之后,会打开一个新的页面,进入下面这样一个名为:The History Of Spring 的在线小游戏你可以使用上下左右的方向键来控制Spring
公众号程序猿DD
1
1000Mbps换算成MB/s是多少?除以8?想简单了!
原文链接:https://post.smzdm.com/p/azoqenzp/在网络传输的时候,往往会用到Mbps这个单位,GbE or 1 GigE 的网卡现在很流行,这个东西被大家叫做“千兆网卡”。同时,大家特别习惯用GB或者MB来描述一个磁盘的大小。这个叫做Gigabyte或者Megabyte
测试开发技术
0
Go 1.22 的新增功能系列之一:cmp.Or
截至撰写本文时,Go 1.22 已经发布几个月了。早就该结束我为 1.22 所做的工作的系列了。抱歉耽搁了这么久,我最近忙于生活事务。如果您错过了我关于reflect.TypeFor(https://blog.carlana.net/post/2024/golang-reflect-type-for
GoCN
1
全新 SOTA backbone | 2024年了,再见ViT系列Backbone,实数难得,不知道效果如何?
点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达在构建用于精确匹配的深度固定长度表示时,确定指纹上的密集特征点,特别是在像素 Level 上,具有重大意义。为了探索指纹匹配的可解释性,作者提出了一种多阶段可解释的指纹匹配网络,名为通过视觉 Transformer 进行指纹匹配的
小白学视觉
10
Spring Boot + flowable 快速实现工作流
关注我们,设为星标,每天7:40不见不散,架构路上与您共享回复架构师获取资源大家好,我是你们的朋友架构君,一个会写代码吟诗的架构师。来源:blog.csdn.net/zhan107876/article/details/120815560总览一、flowable-ui部署运行二、绘制流程图绘图细节:
Java架构师社区
0