SpringBoot CRUD基础开发 入门

需求简介

  1. 实现关于员工信息Student的增删改查
  2. 接口采用restful风格
  3. 数据库采用Mysql,数据源采用Druid
  4. 采用Log4j2日志系统

环境准备

1、新建项目

新建一个crud的项目,如下:

SpringBoot CRUD基础开发 入门
  1. 更改配置文件名application.properties为application.yml
  2. 准备一个数据库为crud备用
  3. 在src目录下新建以下目录包:
    config:自定义配置文件
    controller: 编写controller类的包
    service:编写业务类的包
    dao:定义数据表实体类
    mapper: 编写mapper接口包
  4. 在resources目录下新建一个mapper包,
    mapper: 用来保存**mapper.xml映射文件

2、新建数据库脚本

新建curd数据库

create database crud;

初始化数据库

CREATE TABLE `student` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL COMMENT '名字',
  `age` int DEFAULT NULL COMMENT '年龄',
  `grade` varchar(255) DEFAULT NULL COMMENT '班级',
  `created_time` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

INSERT INTO `student` (`id`, `name`, `age`, `grade`, `created_time`) VALUES (1, '张三', 11, '三年级', '2022-10-08 23:38:23');

INSERT INTO `student` (`id`, `name`, `age`, `grade`, `created_time`) VALUES (2, '李四', 12, '六年级', '2022-10-08 23:38:50');

INSERT INTO `student` (`id`, `name`, `age`, `grade`, `created_time`) VALUES (3, '王五', 13, '四年级', '2022-10-09 23:00:48');

引入依赖

1、引入web依赖

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>

2、引入Lombok依赖

<dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
</dependency>

3、引入mysql依赖

<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
</dependency>

4、引入Mybatis-Plus依赖

<dependency>
   <groupId>com.baomidou</groupId>
   <artifactId>mybatis-plus-boot-starter</artifactId>
   <version>3.5.2</version>
</dependency>

5、引入Druid依赖

<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid-spring-boot-starter</artifactId>
   <version>1.2.13-SNSAPSHOT</version>
</dependency>

6、引入Log4j2依赖

<!-- 剔除默认日志系统 -->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter</artifactId>
   <exclusions>
      <exclusion>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-logging</artifactId>
      </exclusion>
   </exclusions>
</dependency>
<!-- 引入Log4j2日志依赖 -->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

配置

1、配置数据库

spring:
  datasource:
    url: jdbc:mysql://localhost:3311/crud?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8  # 数据库连接串
    username: root   #用户名
    password: 123456  # 密码
    driver-class-name: com.mysql.cj.jdbc.Driver
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      min-idle: 10
      max-active: 50
      initial-size: 20

2、配置Mybatis-Plus

mybatis-plus:
  configuration:
    map-underscore-to-camel-case: true   # 启用驼峰命名法
    auto-mapping-behavior: full
  mapper-locations: classpath:mapper/*.xml   # 设置映射目录
  type-aliases-package: com.example.demo2.dao  # 设置数据表实体类包

基础类编写

1、实体Bean,Student类编写

在dao类包下新建Student类,使用Lombok来简化开发,如下:

@Data
public class Student {
    private Long id;
    private String name;
    private int age;
    private String grade;
    private LocalDateTime createdTime;
}

2、映射类StudentMapper接口编写

在mapper类名下新建StudentMapper接口类,该接口类继承BaseMapper接口类

@Mapper
public interface StudentMapper extends BaseMapper<Student> {
}

3、业务类StudentService接口编写

在service类包下,新建一个StudentService的接口类,同时在service类包下新建一个impl的类包,同时在impl类包下新建一个StudentServiceImpl的类,该类实现StudentService接口类,如下:

StudentService.java

public interface StudentService {
}

StudentServiceImpl.java

@Service
public class StudentServiceImpl implements StudentService {
}

4、控制器StudentController类编写

在controller类包下新建一个StudentController类,类的内容如下:

@RestController
@RequestMapping("student")
public class StudentController {
}

查询操作

1、新增数据库查询

StudentMapper接口类中,新增一个getById的方法,使用的是注解的方式进行数据库查询操作,如下:

@Mapper
public interface StudentMapper extends BaseMapper<Student> {

    @Select("select * from student where id=#{id}")
    Student getById(Long id);
}

2、Service 层代码编写

StudentService接口类中新增getById方法,该方法通过ID进行查询Student信息,该方法返回一个Student对象,如下:

public interface StudentService {

    /**
     * 根据ID查询Student信息
     * @param id
     * @return
     */
    Student getById(Long id);
}

StudendServiceImpl实现类中,实现StudentService中的getById方法,在该方法中调用StudentMapper的用户查询方法,如下:

@Service
public class StudentServiceImpl implements StudentService {
    
    // 自动注入StudentMapper实例
    @Resource
    private StudentMapper studentMapper;

    @Override
    public Student getById(Long id) {
        Student student = studentMapper.getById(id);
        return student;
    }
}

3、 编写Controller接口

在StudentController类中新建一个新的接口,如下:

@RestController
@RequestMapping("student")
public class StudentController {

    @Resource
    private StudentService studentService;

    @GetMapping("/{id}")
    public Student getStudent(@PathVariable Long id){
        Student student = studentService.getById(id);
        return student;
    }
}

4、测试

启动应用,用Apifox工具进行api接口测试,请求方式为:GET,访问URL:http://localhost:8080/student/1,如下所示:

SpringBoot CRUD基础开发 入门

接口返回结果如下:

{
    "id": 1,
    "name": "张三",
    "age": 11,
    "grade": "三年级",
    "createdTime": "2022-10-08T23:38:23"
}

从结果中可以看出,接口正常返回,同时返回的是Student的JSON格式。

删除操作

1、Mapper层代码编写

@Mapper
public interface StudentMapper extends BaseMapper<Student> {
  
    @Delete("delete from student where id=#{id}")
    void deleteById(Long id);

}

2、Service层代码编写

StudentService接口类中新增deleteBydId方法,该方法通过ID对Student进行删除,如下:

public interface StudentService {
  
    /**
     * 根据ID进行删除操作
     * @param id
     */
    void deleteBydId(Long id);
}

StudendServiceImpl实现类中,实现StudentService中的deleteBydId方法,在该方法中调用StudentMapper的删除方法,如下:

@Service
public class StudentServiceImpl implements StudentService {

    // 自动注入StudentMapper实例
    @Resource
    private StudentMapper studentMapper;
  
    @Override
    public void deleteBydId(Long id) {
        studentMapper.deleteById(id);
    }
}

3、Controller代码编写

在StudentController中新增一个删除接口,如下:

@RestController
@RequestMapping("student")
public class StudentController {

    @Resource
    private StudentService studentService;

    @DeleteMapping("/{id}")
    public String delStudent(@PathVariable Long id){
        studentService.deleteBydId(id);
        return "delete success";
    }
}

4、测试

启动应用,用Apifox工具进行api接口测试,请求方式为:GET,访问URL:http://localhost:8080/student/3,如下所示:

SpringBoot CRUD基础开发 入门

接口访问返回结果如下:

delete success

从结果中可以看出,接口正常返回,同时在数据库中对应的ID的数据也进行了删除操作。

新增操作

1、Mapper层代码编写

@Mapper
public interface StudentMapper extends BaseMapper<Student> {

    @Insert("insert into student (`name`, `age`, `grade`, `created_time`) values (#{name},#{age},#{grade},#{createdTime})")
    void addStudent(Student student);

}

2、Service层代码编写

StudentService接口类中新增addStudent方法,该方法调用StudentMapperaddStudent方法进行数据新增,如下

public interface StudentService {
  
    void addStudent(Student student);
}

StudendServiceImpl实现类中,实现StudentService中的addStudent方法,在该方法中调用StudentMapper的新增方法,如下:

@Service
public class StudentServiceImpl implements StudentService {

    // 自动注入StudentMapper实例
    @Resource
    private StudentMapper studentMapper;

    @Override
    public void addStudent(Student student) {
        studentMapper.addStudent(student);
    }
}

3、Controller代码编写

在StudentController中新增一个数据新增的接口,如下:

@RestController
@RequestMapping("/student")
public class StudentController {

    @Resource
    private StudentService studentService;
  
    @PostMapping
    public String addStudent(@RequestBody Student student){
        student.setCreatedTime(LocalDateTime.now());
        studentService.addStudent(student);
        return "add success";
    }
}

4、测试

启动应用,用Apifox工具进行api接口测试,请求方式为:POST,请求体为JSON串,请求内容如下:

{
    "name": "小六",
    "age": 14,
    "grade": "初中"
}

截图如下:

SpringBoot CRUD基础开发 入门

可得到如下结果,如下:

SpringBoot CRUD基础开发 入门

查看数据库中student表的数据,可以看到数据已新增到了数据库表中了,如下:

SpringBoot CRUD基础开发 入门

更新操作

1、Mapper层代码编写

StudentMapper接口类文件中新增一个update操作,如下:

@Mapper
public interface StudentMapper extends BaseMapper<Student> {

    @Update("update student set name=#{name}, age=#{age}, grade=#{grade} where id=#{id}")
    void updateStudent(Student student);

}

2、Service层代码编写

StudentService接口类中增加updateStudent方法,该方法调用StudentMapperupdateStudent方法进行数据更新操作,如下

public interface StudentService {
  
    void updateStudent(Student student);
}

StudendServiceImpl实现类中,实现StudentService中的updateStudent方法,在该方法中调用StudentMapper的数据更新方法,如下:

@Service
public class StudentServiceImpl implements StudentService {

    // 自动注入StudentMapper实例
    @Resource
    private StudentMapper studentMapper;
  
    @Override
    public void updateStudent(Student student) {
        studentMapper.updateStudent(student);
    }
}

3、Controller层代码编写

在StudentController中新增一个数据更新的接口,更新操作使用的是注解是@PutMapping,如下:

@RestController
@RequestMapping("/student")
public class StudentController {

    @Resource
    private StudentService studentService;
    
    @PutMapping
    public String updateStudent(@RequestBody Student student){
        studentService.updateStudent(student);
        return "update success";
    }
}

4、测试

启动应用,用Apifox工具进行api接口测试,请求方式为:PUT,请求体为JSON串,请求内容如下:

{
    "id": "4",
    "name": "小六",
    "age": 14,
    "grade": "初中二年级"
}

完整截图如下:

SpringBoot CRUD基础开发 入门

总结

到这里,就完成了简单的CURD操作 ,基本的开发逻辑是:
1、mapper数据库操作 -> 2、Service层业务代码编写 -> 3、controller层处理请求
使用到的主要注解如下

注解使用
@GetMapper用于处理Get请求
@PostMapper用于处理Post请求
@PutMapper用于处理Put请求,一般用于更新操作
@DeleteMapper用于处理Delete请求
@PathVariable用于获取请求路径中的参数,如“#{id}”
@RequestBody用来获取POST,PUT请求体

原创文章,作者:jiafegn,如若转载,请注明出处:https://www.techlearn.cn/archives/435

Previous 2023年3月26日
Next 2023年3月26日

相关推荐

  • Springboot注解-@Component

    作用 作用:@Component的作用是把普通的类实例化到Spring容器中。基于@Component注解有三个扩展,分别是:@Repository、@Service、@Contr…

    springboot 2022年8月3日
    184
  • SpringBoot 分布式Session

    简介 现在随着分布式,微服务架构的日益成熟,越来越多的企业将传统的单体服务改造为微服务或是分布式架构,在分布式中就遇到session管理的问题,微服务架构中一个服务为了实现高可用至…

    springboot 2023年4月30日
    177
  • Springboot 注解 @Primary

    作用 在注入依赖的过程中,当有多个候选者的时候,可以指定哪个候选者为主要的候选者。可以用在类上或者方法上面。通常定义bean常见的有2种方式:1、在类上标注@Component注解…

    springboot 2022年9月26日
    239
  • SpringBoot自定义注解与使用

    简介 注解是一种能添加到Java代码中的元数据,方法,类,参数与包都可以使用注解进行修饰,可以将注解看为一种特殊的标记,在Java编译或运行过程中将有这种特殊标记的部分进行特殊处理…

    springboot 2024年1月25日
    255
  • SpringBoot 整合Mybatis-Plus

    简介 MyBatis-Plus是一个MyBatis的增强工具,在Mybatis的基础上只做增强不做改变,为简化开发,提高效率而生。 添加依赖 注意:添加Mybatis-Plus即可…

    springboot 2023年3月26日
    131
  • SpringBoot 整合Mybatis

    简介 MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBat…

    2024年8月28日
    309
  • SpringBoot 整合RocketMQ

    简介 使用RocketMQ有两种方式,一种是引入rocketmq-client需要自己创建生产者和消费者,相对来说比较繁琐;另一种是引入rocketmq-spring-boot-s…

    springboot 2023年4月30日
    312
  • Springboot 注解 @Configuration

    作用 @Configuration用于定义配置类,标注在类上,配置spring容器(应用上下文)。相当于把该类作为spring的xml配置文件中的beans。@Configurat…

    springboot 2022年9月2日
    224
  • SpringBoot拦截器

    简介 拦截器可以根据 URL 对请求进行拦截,主要应用于登陆校验、权限验证、乱码解决、性能监控和异常处理等功能。 使用步骤 在SpringBoot中使用拦截器功能通常需要以下3步:…

    springboot 2023年4月29日
    123
  • SpringBoot 整合Memcached

    简介 Memcached 是一个高性能的分布式内存对象的key-value缓存系统,用于动态Web应用以减轻数据库负载,现在也有很多人将它作为内存式数据库在使用,memcached…

    springboot 2023年4月24日
    242