资讯专栏INFORMATION COLUMN

Spring Boot学习笔记(二)简单CRUD实现

legendaryedu / 1117人阅读

摘要:用于管理数据实体及持久化相关的处理,则是整个业务的核心。首先,对于的每个接口,我们在中定义对应请求接收方法说明注解,表明这个专门用于服务,返回值不是传统的数据。对于来讲,仅仅是一个简单的继承了的接口。

开发配置

依赖包准备

这里选用mysql作为数据库,需要用到的包有三个,需要将相关依赖写入pom.xml,如下:

  
    org.springframework.boot
    spring-boot-starter-jdbc
  
    
  
    mysql
    mysql-connector-java
  

  
    org.springframework.boot
    spring-boot-starter-data-jpa
  

数据库连接设定

在src/main/resources/application.properties文件中,加入以下配置信息:

spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=test
spring.datasource.password=test
spring.datasource.tomcat.max-idle=10
spring.datasource.tomcat.max-wait=10000
spring.datasource.tomcat.min-idle=5
spring.datasource.tomcat.initial-size=5

其中test是数据库名称,username和password可自行设置和修改

实体定义

我们将要操作的实体很简单,只有一个id属性和一个name属性。定义如下:

@Entity
@Table(name="T_USER")
public class User {

    /**
     * 用户ID
     */
    @Id
    @GeneratedValue
    private int id;
    
    /**
     * 用户名
     */
    private String name;

    // GETTER和SETTER此处省略...
}

<说明>

@Entity注解,表明了这是一个Entity,可以使用默认的ORM规则,即class名即为要更新的数据表名

@Table注解,可以指定这个Entity要更新的数据表名,也不使用默认的ORM规则。

@Id注解,表明了这个数据表的主键ID,这个主键可以是AUTO_INCREMENT类型的数据。

备忘
在测试中,此处的id类型使用Integer会报错,原因尚不清楚,使用int则无问题。

路由设置

以简单的User对象为例,我们来实现一个简(chou)单(lou)的的CRUD处理

Restful风格

对于简单的增删改查功能,一般的restful接口定义如下:

GET    /user        # 取得user列表
POST   /user        # 提交user
PUT    /user        # 更新user
PATCH  /user        # 更新user(个别属性)
DELETE /user/:id    # 删除user

路由设置

对于纯数据的Java后端架构来讲,MVC中少了View,但M和C仍是必不可少的。Model用于管理数据实体及持久化相关的处理,Controller则是整个业务的核心。

首先,对于user的每个接口,我们在controller中定义对应请求接收方法:

@RestController
@RequestMapping("/user")
public class UserController {
    
    @Autowired
    private UserService userService;

    @GetMapping("")
    public ResponseEntity getList() {
        return new ResponseEntity(userService.getUserList(), HttpStatus.OK);
    }
    
    @PostMapping("")
    public ResponseEntity create(@RequestBody User user) {
        return new ResponseEntity(userService.save(user), HttpStatus.CREATED);
    }

    @PatchMapping("")
    public ResponseEntity update(@RequestBody User user) {
        return new ResponseEntity(userService.save(user), HttpStatus.ACCEPTED);
    }
    
    @DeleteMapping("/{id}")
    public ResponseEntity remove(@PathVariable("id") int id) {
        userService.remove(id);
        return new ResponseEntity(HttpStatus.ACCEPTED);
    }
}

<说明>

@RestController注解,表明这个controller专门用于Restful服务,返回值不是传统的WEB数据。

@RequestMapping注解,表明访问的相对路径为“/user"

@GetMapping、@PostMapping、@PatchMapping和@DeleteMapping分别对应了GET、POST、PATCH和DELETE请求,这四个方法将分别接收对应访问路径上对应方法的HTTP请求。它们也可用@RequestMapping(value="", method=RequestMethod.POST(或者GET、PATCH等)来替代。

@PathVariable用于取得访问路径中的参数

ResponseEntity用于返回处理结果与错误码

上面通过UserService的调用,实现了user的CRUD操作。Spring通过@Autowired注解,会自动创建UserService的实例。

CRUD操作

通过UserService的相关操作,我们可以很容易的对user表进行CRUD操作。代码如下:

@Service
public class UserService {

    @Autowired
    private UserRepository userRepo;
    
    public Iterable getUserList() {
        return userRepo.findAll();
    }
    
    public User save(User user) {
        return userRepo.save(user);
    }
    
    public void remove(int id) {
        userRepo.delete(id);
    }
}

<说明>

通过@Service注解,Spring会自动实例化到UserController中

Service中注解了@Autowired的实例userRepo,实际上是继承了CrudRepository的一个接口。Repository在Spring的概念体系中是类似于传统DAO的实体,一个Repository对应一个数据表的操作。

UserService中使用的findAll、save和delete方法,均是CrudRepository中预定义的方法。

对于UserRepository来讲,仅仅是一个简单的继承了CrudRepository的接口。代码如下:

public interface UserRepository extends CrudRepository {}

关于Repository的说明,可以看这篇文章pring Boot学习笔记(三)Repository的使用

结果确认

简单接口测试可使用POSTMAN进行,结果如下:

取得用户列表

插入2条数据

取得用户列表

更新用户

删除用户

取得用户列表

待改进事项

目前只是实现了一个简单的CRUD操作,就这个简单流程来讲,以下几点尚欠缺:

返回值需要有结构化的设计

分页和排序功能也有欠缺。

缺少自动化测试

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/70752.html

相关文章

  • Spring Boot学习笔记(六)结合MyBatis实现较为复杂的RESTful API

    摘要:前两篇已经构建了标准工程实例,也整合了实现了简单数据库访问,本篇主要更深入的学习下,实现较为完整的数据库的标准服务。到这里,最复杂的数据访问基本就算编写完了。 前两篇已经构建了RESTful API标准工程实例,也整合了MyBatis实现了简单数据库访问,本篇主要更深入的学习下,实现较为完整的数据库CRUD的标准服务。 首先看下要实现的效果吧,完成下面截图部分的API,除了CRUD之外...

    CntChen 评论0 收藏0
  • Java学习路线总结,搬砖工逆袭Java架构师(全网最强)

    摘要:哪吒社区技能树打卡打卡贴函数式接口简介领域优质创作者哪吒公众号作者架构师奋斗者扫描主页左侧二维码,加入群聊,一起学习一起进步欢迎点赞收藏留言前情提要无意间听到领导们的谈话,现在公司的现状是码农太多,但能独立带队的人太少,简而言之,不缺干 ? 哪吒社区Java技能树打卡 【打卡贴 day2...

    Scorpion 评论0 收藏0
  • Spring Boot学习笔记(七)通用mapper,代码生成,分页组件接入

    摘要:代码自动生成底层服务有很多通用的,利用代码生成最好不过了,这里作者将代码生成放在中的,避免与正式代码冲突。主要通过来实现,项目中的模板文件可以自行定义。相互学习,共同进步 从零开始学习Spring Boot也有几天时间了,项目已经不允许我这么慢慢学习了,急需底层变现实现一套简单的Restful API用于业务支撑。 于是在GitHub上找到了一个不错的demo,直接看demo搭建自己的...

    neroneroffy 评论0 收藏0
  • Spring Boot 2.x 系列教程:WebFlux 系列教程大纲(一)

    摘要:使用则需要及以上版本。开发使用框架七系列教程目录系列教程大纲快速入门实践实践整合整合中和实践整合中实现缓存中实现通信集成测试及部署实战图书管理系统 WebFlux 系列教程大纲 一、背景 大家都知道,Spring Framework 是 Java/Spring 应用程序跨平台开发框架,也是 Java EE(Java Enterprise Edition) 轻量级框架,其 Spring ...

    jone5679 评论0 收藏0
  • Spring Boot 2 快速教程:WebFlux 快速入门(

    摘要:响应式编程是基于异步和事件驱动的非阻塞程序,只是垂直通过在内启动少量线程扩展,而不是水平通过集群扩展。三特性常用的生产的特性如下响应式编程模型适用性内嵌容器组件还有对日志消息测试及扩展等支持。 摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 02:WebFlux 快速入门实践 文章工程: JDK...

    gaara 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<