Spring Boot使用Spring Data Jpa对MySQL数据库进行CRUD操作
只需两步!Eclipse+Maven快速构建第一个Spring Boot项目 构建了第一个Spring Boot项目。
Spring Boot连接MySQL数据库 连接了MySQL数据库。
本文在之前的基础上,使用Spring Data Jpa对MySQL数据库进行CRUD——增加(Create)、查询(Retrieve)、更新(Update)和删除(Delete) 操作。
Spring Data Jpa
- ORM映射元数据
- API
- 查询语言
增加(Create)
在UserController.java中添加方法:
@RequestMapping("/addUser")
@ResponseBody
public User addUser(String userName, String PassWord) {
User user = new User();
user.setUserName(userName);
user.setPassWord(PassWord);
userRepository.save(user);
return user;
}
使用Postman访问http://localhost:8080//user/addUser?userName=Laplace&PassWord=math :
数据库里面增加了一条id为5,username为Laplace,password为math的记录:
为了方便查询,再利用相同的操作插入一些数据。
查询(Retrieve)
上一篇已经完成了简单的findAll和findByUserName。这里进行一些自定义查询操作。
Spring data 大部分的SQL都可以根据方法名定义的方式来实现,也支持自己写SQL语句来查询。
在SQL的查询方法上面使用@Query注解,如涉及到删除和修改在需要加上@Modifying.也可以根据需要添加 @Transactional 对事物的支持。
例如查询id大于等于6的记录,SQL语句:SELECT * FROM USER t WHERE t.id >= 6,这条语句在Navicat中新建查询中运行是没有问题的,添加到Dao中却是有问题的,会抛出异常:
java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List
在Dao中添加:
@Query("SELECT * FROM USER t WHERE t.id >= 6")
List<User> getUser();
这是由于Jpa无法自动完成查询结果到自定义实体的映射。需要改成下面这个样子的,写实体类的路径,From后面加的不是表的名字,而是对应的实体类的名字。
@Query("SELECT new com.example.demo.domain.User(t.id,t.userName,t.passWord) FROM User t WHERE t.id >= 6")
List<User> getUser();
还需要在实体类User.java中间添加对应的构造方法(与上面SQL语句中的保持一致),才能够返回实体类的对象的:
public User(Long id, String userName, String passWord) {
super();
this.id = id;
this.userName = userName;
this.passWord = passWord;
}
@RequestMapping("/getUser")
public List<User> getUser() {
List<User> res = userRepository.getUser();
return res;
}

这是数据库中的内容:
更新(Update)
更新可以使用save方法;这里使用自定义SQL语句进行更新,试用一下@Modifying注解。
Dao:
@Modifying
@Query("UPDATE User u SET u.userName = ?1 WHERE u.id = ?2")
void updateUserNameById(String userName, Long id);
Controller:
@RequestMapping("/updateUserNameById")
@Transactional
public String updateUserNameById(@RequestParam("name") String name, @RequestParam("id") Long id) {
userRepository.updateUserNameById(name, id);
return "更新成功";
}
使用Postman访问http://localhost:8080//user/updateUserNameById?name=AAAAAA&id=6 :
可以看到数据库发生了改变:
删除(Delete)
根据id删除记录,直接在Controller中添加:
@RequestMapping("/deleteUserById")
public String deleteUserById(@RequestParam("id") Long id) {
userRepository.deleteById(id);
return "删除成功";
}
使用Postman访问http://localhost:8080//user/deleteUserById?id=11:
可以完成删除操作:
总结
本文使用Spring Boot JPA进行数据操作,不难发现,使用JPA可以大量减少Dao层代码,提升开发效率。
Spring Boot使用Spring Data Jpa对MySQL数据库进行CRUD操作的更多相关文章
- 使用Spring Boot 和Spring Data JPA访问mysql数据库
在Spring中使用JdbcTemplate是一种基本的数据访问方式,但是仍然需要较多的代码,为了解决这些大量枯燥的数据操作语句,我们可以使用ORM框架,比如:Hibernate,通过整合Hibern ...
- 使用Spring Data JPA 访问 Mysql 数据库-配置项
jpa操作数据库 注意:数据库采用的是本机数据库,下面是建表语句及初始化数据: SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ---------- ...
- Spring Boot 2.x 使用 jpa 连接 mysql
在spring boot网站上生成一个项目,如图: 我使用的是Maven项目,java使用是jdk8(spring boot 2.x必须要jdk8及以上),dependencies分别输入选择 web ...
- Spring Boot入门(2)使用MySQL数据库
介绍 本文将介绍如何在Spring项目中连接.处理MySQL数据库. 该项目使用Spring Data JPA和Hibernate来连接.处理MySQL数据库,当然,这仅仅是其中一种方式,你也 ...
- spring boot使用log4j2将日志写入mysql数据库
log4j2官方例子在spring boot中报错而且还是用的是org.apache.commons.dbcp包 我给改了一下使用org.apache.commons.dbcp2包 1.log4j2. ...
- Spring Boot2 系列教程 (七) | 使用 Spring Data JPA 访问 Mysql
前言 如题,今天介绍 Spring Data JPA 的使用. 什么是 Spring Data JPA 在介绍 Spring Data JPA 之前,首先介绍 Hibernate . Hibernat ...
- Spring Boot:在Spring Boot中使用Mysql和JPA
本文向你展示如何在Spring Boot的Web应用中使用Mysq数据库,也充分展示Spring Boot的优势(尽可能少的代码和配置).数据访问层我们将使用Spring Data JPA和Hiber ...
- spring boot(五)Spring data jpa介绍
在上篇文章springboot(二):web综合开发中简单介绍了一下spring data jpa的基础性使用,这篇文章将更加全面的介绍spring data jpa 常见用法以及注意事项 使用spr ...
- Spring Boot 整合Spring Data JPA
Spring Boot整合Spring Data JPA 1)加入依赖 <dependency> <groupId>org.springframework.boot</g ...
随机推荐
- BZOJ_2764_[JLOI2011]基因补全_DP_高精度
BZOJ_2764_[JLOI2011]基因补全_DP_高精度 Description 在生物课中我们学过,碱基组成了DNA(脱氧核糖核酸),他们分别可以用大写字母A,C,T,G表示,其中A总与T配对 ...
- linux目录详细介绍
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://yangrong.blog.51cto.com/6945369/1288072 目 ...
- 【爆料】-《昆士兰大学毕业证书》Queensland一模一样原件
☞昆士兰大学毕业证书[微/Q:2544033233◆WeChat:CC6669834]UC毕业证书/联系人Alice[查看点击百度快照查看][留信网学历认证&博士&硕士&海归& ...
- go语言视频教程和电子书下载
golang视频教程: https://noxue.com/p/399809259943301 go语言 pdf电子书: Design Pattern In Go[go语言设计模式].pdf Go P ...
- 实用抓包工具:whistle
无论是前端开发还是客户端,实际开发过程中,抓包都经常被用到.工欲善其事必先利其器,一款好用的抓包工具也是必须的. 说到抓包,Windows系统上不少人都用过Fiddler,Mac或Linux上用Cha ...
- Visual Studio 2019 发布活动 - 2019 年 4 月 2 日
Visual Studio 2019 发布活动 2019 年 4 月 2 日,星期二 | 上午 9:00 (PT) 围观: https://visualstudio.microsoft.com/zh- ...
- Restframe_work 回顾记忆集
目录 Restframe_work 回顾记忆集 rest_framework主要功能介绍 rest_framework主要模块介绍 记忆集 错题集 混淆集 重点集 难点集 Restframe_work ...
- SQL Server的Descending Indexes
SQL Server的Descending Indexes 测试环境:SQL Server 2012 表结构如下 USE [test] GO CREATE TABLE [dbo].[tt8]( ,) ...
- (一)初识Redis
1.redis简介 Redis是一个速度非常快的key-value非关系型存储数据库,可以存储5种形态的键值对,可以将存储在内存中的键值对持久化到硬盘,可以使用复制特性扩展读性能,还可以使用客户端分片 ...
- Windows Server 2016-Netdom Join之客户端加域(二)
上章节我们介绍了如何通过图形化界面实现用户加域操作,本章节为大家简单介绍如何通过netdom join命令实现计算机加域操作.具体信息如下: 将工作站或成员服务器加入域.将计算机加入域的行为会为域中的 ...