spring boot系列(四)spring boot 配置spring data jpa (保存修改删除方法)
spring boot 使用jpa在pom.xml在上文中已经介绍过。在这里直接介绍各个类文件如何编写:
代码结构:
domain(存放实体类文件);
repository(存放数据库操作文件,相当于dao层)
service(存放逻辑层service文件)
web(存放控制类相当于control层)
如下图:

注意:测试的时候用http工具测试比如postman,浏览器有时候不支持在地址栏上面使用post put这些请求方式
一 保存(insert)方法
1 创建UserInfo实体类,代码如下:
package com.cfj.ceshi.jpa.domain; 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="user_info")
public class UserInfo implements Serializable { private static final long serialVersionUID = 1L; @Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String userName;
private String age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "UserInfo [id=" + id + ", userName=" + userName + ", age=" + age + "]";
} }
2 创建数据库操作类相当于dao层,主要创建一个接口UserRepository,继承JpaRepository接口即可。如果只是不同的保存方法接口中不用写什么。本文写了一个查询方法,用于查询用,代码如下:
package com.cfj.ceshi.jpa.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import com.cfj.ceshi.jpa.domain.UserInfo;
public interface UserRepository extends JpaRepository<UserInfo, Integer> {
UserInfo findByUserName(String userName);
}
3 创建service接口和它的实现类,代码如下:
package com.cfj.ceshi.jpa.service;
import com.cfj.ceshi.jpa.domain.UserInfo;
public interface UserService {
public Integer save(UserInfo user);
public void delete(Integer id);
}
package com.cfj.ceshi.jpa.service.impl; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import com.cfj.ceshi.jpa.domain.UserInfo;
import com.cfj.ceshi.jpa.repository.UserRepository;
import com.cfj.ceshi.jpa.service.UserService; @Service
@Transactional
public class UserServiceImpl implements UserService{ @Autowired
private UserRepository userRepository; @Override
public Integer save(UserInfo user) {
return userRepository.save(user).getId();
} @Override
public void delete(Integer id) {
userRepository.delete(id);
} }
4 创建控制类(controller)在spring boot 里面用web包表示,代码如下:
package com.cfj.ceshi.jpa.web; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import com.cfj.ceshi.jpa.domain.UserInfo;
import com.cfj.ceshi.jpa.service.UserService; @RestController
@RequestMapping("/user")
public class UserWeb { @Autowired
private UserService userService; @RequestMapping("/save")
public String save() {
/*
* 测试最普通的方法 调用http://localhost:8081/user/save
* 则想数据库插入一条数据,姓名是张三 年龄是20
*/
UserInfo user = new UserInfo();
user.setUserName("张三");
user.setAge("20");
return userService.save(user).toString(); } //以下postOne 和postTwo 方法 主要用于post请求,一般新增方法用post方式 /**
* 请使用 postman测试 方式选择post http://localhost:8081/user/save-one
* body 中选择form-data 或者x-wwww-form-urlencoded 输入对应键值对
* @param name
* @param age
* @return
*/
@PostMapping(value = "/save-one") //相当于@RequestMapping(value = "/save-one", method = RequestMethod.POST)
public String postOne(String name,String age) {
UserInfo user = new UserInfo();
user.setUserName(name);
user.setAge(age);
return userService.save(user).toString(); } /**
* 请使用 postman测试 方式选择post http://localhost:8081/user/save-one
* body 中选择raw 并选择JSON(application/json) 传入json格式
* @param user
* @return
*/
@PostMapping(value = "/save-two") //相当于@RequestMapping(value = "/save-one", method = RequestMethod.POST)
public String postTwo(@RequestBody UserInfo user) {
return userService.save(user).toString(); } }
5 使用postman工具测试save-one和save-two
- save-one测试如下:

- save-two测试如下:

二 修改(update)方法
1 一般修改方法用put方式提交,在上面的UserWeb类中添加如下代码:
//以下两个方法是put的方式 用于修改数据
/**
* 访问http://localhost:8081/user/update-one
* body 选择x-wwwww-form-urlenable 输入对应key 和value
* @param id
* @param name
* @param age
* @return
*/
@PutMapping(value = "/update-one")//相当于@RequestMapping(value = "/update-one", method = RequestMethod.PUT)
public String putOne(Integer id,String name,String age) {
UserInfo user = new UserInfo();
user.setId(id);
user.setUserName(name);
user.setAge(age);
return userService.save(user).toString();
}
/**
* http://localhost:8081/user/update-two
* body 中选择raw 并选择JSON(application/json) 传入json格式
* @param user
* @return
*/
@PutMapping(value = "/update-two")//相当于@RequestMapping(value = "/update-two", method = RequestMethod.PUT)
public String putTwo(@RequestBody UserInfo user) {
return userService.save(user).toString();
}
2 测试结果:
- update-one测试如下:

- update-two测试如下:

三 删除(delete)方法
在上面的UserWeb类中添加如下代码:
/**
* http://localhost:8081/user/update-two
* body 中选择raw 并选择JSON(application/json) 传入json格式
* @param user
* @return
*/
@PutMapping(value = "/update-two")//相当于@RequestMapping(value = "/update-two", method = RequestMethod.PUT)
public String putTwo(@RequestBody UserInfo user) {
return userService.save(user).toString(); } /**
* 删除方法
* @param id
*/
/*@DeleteMapping(value = "/delete")
public void delete(Integer id) { userService.delete(id);
}*/
/**
* 删除方法 postman 中选择 DELETE方式 http://localhost:8081/user/delete/1
* 将删除主键是1的记录
* @param id
*/
@DeleteMapping(value = "/delete/{id}")
public void deleteOne(@PathVariable Integer id) { userService.delete(id);
}
本项目码云地址:
https://gitee.com/kaixinmao/jpa_lianxi/tree/master/jpa
spring boot系列(四)spring boot 配置spring data jpa (保存修改删除方法)的更多相关文章
- Spring Boot系列(三):Spring Boot整合Mybatis源码解析
一.Mybatis回顾 1.MyBatis介绍 Mybatis是一个半ORM框架,它使用简单的 XML 或注解用于配置和原始映射,将接口和Java的POJOs(普通的Java 对象)映射成数据库中的记 ...
- Spring cloud系列教程第十篇- Spring cloud整合Eureka总结篇
Spring cloud系列教程第十篇- Spring cloud整合Eureka总结篇 本文主要内容: 1:spring cloud整合Eureka总结 本文是由凯哥(凯哥Java:kagejava ...
- Hexo系列(四) NexT主题配置
Hexo 框架允许我们更换合适的主题,以便于构建不同风格的网站,这里介绍目前最常使用的一款主题之一 -- NexT 一.NexT 安装 在正式开始讲解 NexT 安装之前,我们必须明确以下几个概念: ...
- Spring Boot 系列:日志动态配置详解
世界上最快的捷径,就是脚踏实地,本文已收录架构技术专栏关注这个喜欢分享的地方. 开源项目: 分布式监控(Gitee GVP最有价值开源项目 ):https://gitee.com/sanjianket ...
- Spring Boot系列(四) Spring Boot 之验证
这节没有高深的东西, 但有一些学习思路值得借鉴. JSR 303 (Bean Validation) Maven依赖 <dependency> <groupId>org.spr ...
- Spring Boot2 系列教程(二十六)Spring Boot 整合 Redis
在 Redis 出现之前,我们的缓存框架各种各样,有了 Redis ,缓存方案基本上都统一了,关于 Redis,松哥之前有一个系列教程,尚不了解 Redis 的小伙伴可以参考这个教程: Redis 教 ...
- Spring Boot系列(一):Spring Boot快速开始
一.Spring Boot介绍 Spring Boot可以很容易的创建可直接运行的独立的基于Spring的应用程序. 功能特点: 创建独立的Spring应用程序: 直接嵌入Tomcat.Jetty等W ...
- Spring Boot系列(二):Spring Boot自动装配原理解析
一.Spring Boot整合第三方组件(Redis为例) 1.加依赖 <!--redis--> <dependency> <groupId>org.springf ...
- Spring Boot2 系列教程(二十五)Spring Boot 整合 Jpa 多数据源
本文是 Spring Boot 整合数据持久化方案的最后一篇,主要和大伙来聊聊 Spring Boot 整合 Jpa 多数据源问题.在 Spring Boot 整合JbdcTemplate 多数据源. ...
随机推荐
- LeetCode3.无重复字符的最大子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc&quo ...
- 查看电脑物理地址(MAC)方法
首先打开电脑,按ctrl+R键,将会出现以下界面 然后直接点击确认即可,会出现管理员界面,如下 我们现在有两种查看MAC地址的方法: 方法一:.直接输入ipconfig/all(或者输入ipconfi ...
- 广告域名审核之后跳转技术:点击域名A页面iframe框架下的链接,域名A跳转到域名B
广告域名审核之后跳转技术:点击域名A页面iframe框架下的链接,域名A跳转到域名B注:域名B为afish.cnblogs.com 域名A页面代码:<!DOCTYPE html PUBLIC & ...
- Python——缓冲区
原创声明:本文系博主原创文章,转载及引用请注明出处. 1. 在Python中,字符串和整型对象都是不可变的(immutable)类型,因此Python会很高效地缓存它们. 2. Python2.3简单 ...
- UVa10474 Where is the Marble?(排序sort)
今天开始学STL,这是书上的一道例题,主要是用了sort函数和lower_bound函数,挺容易理解的. lower_bound的作用是查找“大于或等于x的第一个位置”. 需要注意的是,不要忘记alg ...
- ssh客户端命令
- es实战之数据导出成csv文件
从es将数据导出分两步: 查询大量数据 将数据生成文件并下载 本篇主要是将第二步,第一步在<es实战之查询大量数据>中已讲述. csv vs excel excel2003不能超过6553 ...
- 数据库中char和varchar的区别
1. char类型的长度是固定的,varchar的长度是可变的. 这就表示,存储字符串'abc',使用char(10),表示存储的字符将占10个字节(包括7个空字符) 使用varchar2(10),, ...
- macOS Mojave 10.14上安装iTunes12.6
将一下内容保存为iTunes.scpt,并运行 set question to display dialog "确定是否删除 iTunes ?" buttons {"Ye ...
- JS单线程和异步
线程和单线程的概念: 线程:是操作系统能够进行运算调度的最小单位.它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同 ...