使用SpringBoot开发Restful服务实现增删改查功能

下面我会详细讲解使用SpringBoot开发Restful服务实现增删改查功能的完整攻略。这个过程可以通过如下步骤实现:

1. 准备工作

在开始本次攻略之前,需要准备如下工具和环境:
- JDK 1.8 或更高版本
- Maven 3.0 或更高版本
- SpringBoot 2.0 或更高版本

2. 创建一个SpringBoot项目

首先,我们需要用Maven创建一个SpringBoot项目,可以通过如下命令行创建:

mvn archetype:generate -DgroupId=com.example -DartifactId=demo -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

执行完以上命令后,即可创建出一个简单的Maven项目。之后,在pom.xml文件中添加SpringBoot的依赖:

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

3. 实现增删改查功能

为了实现增删改查功能,我们需要进行如下步骤:

3.1 定义实体类

在项目中创建一个实体类,用于表示需要进行增删改查的数据。例如,定义一个表示学生的实体类:

public class Student {
    private Long id;
    private String name;
    private Integer age;

    // 省略 getter 和 setter 方法
}

3.2 创建持久层接口

创建一个持久层接口,用于对数据库进行CRUD操作。例如,定义一个用于对学生数据进行操作的持久层接口:

public interface StudentMapper {

    List<Student> findAll();

    Student findById(Long id);

    int save(Student student);

    int update(Student student);

    int deleteById(Long id);
}

3.3 实现持久层接口

实现上一步中定义的持久层接口,具体实现可以选择使用MyBatis等框架。以下是一个基于MyBatis的实现示例:

@Repository
public class StudentMapperImpl implements StudentMapper {
    private final SqlSessionFactory sqlSessionFactory;

    @Autowired
    public StudentMapperImpl(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    @Override
    public List<Student> findAll() {
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            return sqlSession.selectList("com.example.demo.mapper.StudentMapper.findAll");
        }
    }

    @Override
    public Student findById(Long id) {
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            return sqlSession.selectOne("com.example.demo.mapper.StudentMapper.findById", id);
        }
    }

    @Override
    public int save(Student student) {
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            return sqlSession.insert("com.example.demo.mapper.StudentMapper.save", student);
        }
    }

    @Override
    public int update(Student student) {
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            return sqlSession.update("com.example.demo.mapper.StudentMapper.update", student);
        }
    }

    @Override
    public int deleteById(Long id) {
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            return sqlSession.delete("com.example.demo.mapper.StudentMapper.deleteById", id);
        }
    }
}

3.4 创建控制器

创建一个控制器,用于接收HTTP请求并调用持久层接口对数据进行CRUD操作。例如,定义一个用于操作学生数据的控制器:

@RestController
@RequestMapping("/api/students")
public class StudentController {
    private final StudentMapper studentMapper;

    @Autowired
    public StudentController(StudentMapper studentMapper) {
        this.studentMapper = studentMapper;
    }

    @GetMapping("")
    public List<Student> findAll() {
        return studentMapper.findAll();
    }

    @GetMapping("/{id}")
    public Student findById(@PathVariable("id") Long id) {
        return studentMapper.findById(id);
    }

    @PostMapping("")
    public int save(@RequestBody Student student) {
        return studentMapper.save(student);
    }

    @PutMapping("/{id}")
    public int update(@PathVariable("id") Long id,
                      @RequestBody Student student) {
        student.setId(id);
        return studentMapper.update(student);
    }

    @DeleteMapping("/{id}")
    public int deleteById(@PathVariable("id") Long id) {
        return studentMapper.deleteById(id);
    }
}

在上例中,@RestController@RequestMapping都是SpringMVC中使用的注解,用于定义一个处理HTTP请求的Controller。@PostMapping@PutMapping@DeleteMapping等注解用于定义相应的HTTP请求方法,这些方法分别对应HTTP中的POST、PUT和DELETE方法。@RequestBody注解用于接收请求体中的数据。

3.5 运行程序

在完成以上操作之后,就可以运行程序并进行测试了。例如,使用curl命令对新增学生数据进行添加:

curl -d '{"name":"张三", "age": 18}' -H 'Content-Type: application/json' http://localhost:8080/api/students

使用curl命令对查询所有学生数据:

curl http://localhost:8080/api/students

4. 示例

以上是SpringBoot开发Restful服务实现增删改查功能的完整攻略,本节提供两个示例,Student实体类和StudentMapper持久层接口的实现如下:

示例1:使用JdbcTemplate实现

@Component
public class JdbcTemplateStudentMapper implements StudentMapper {
    private final JdbcTemplate jdbcTemplate;

    public JdbcTemplateStudentMapper(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    @Override
    public List<Student> findAll() {
        String sql = "select * from student";
        return jdbcTemplate.query(sql, new StudentRowMapper());
    }

    @Override
    public Student findById(Long id) {
        String sql = "select * from student where id=?";
        return jdbcTemplate.queryForObject(sql, new Object[]{id}, new StudentRowMapper());
    }

    @Override
    public int save(Student student) {
        String sql = "insert into student(name, age) values(?, ?)";
        return jdbcTemplate.update(sql, student.getName(), student.getAge());
    }

    @Override
    public int update(Student student) {
        String sql = "update student set name=?, age=? where id=?";
        return jdbcTemplate.update(sql, student.getName(), student.getAge(), student.getId());
    }

    @Override
    public int deleteById(Long id) {
        String sql = "delete from student where id=?";
        return jdbcTemplate.update(sql, id);
    }
}

class StudentRowMapper implements RowMapper<Student> {
    @Override
    public Student mapRow(ResultSet resultSet, int i) throws SQLException {
        Student student = new Student();
        student.setId(resultSet.getLong("id"));
        student.setName(resultSet.getString("name"));
        student.setAge(resultSet.getInt("age"));
        return student;
    }
}

示例2:使用Mybatis实现

<!-- student.xml -->
<mapper namespace="com.example.demo.mapper.StudentMapper">

    <select id="findAll" resultType="com.example.demo.entity.Student">
        SELECT * FROM student
    </select>

    <select id="findById" parameterType="java.lang.Long" resultType="com.example.demo.entity.Student">
        SELECT * FROM student WHERE id = #{id}
    </select>

    <insert id="save" parameterType="com.example.demo.entity.Student">
        INSERT INTO student (name, age)
        VALUES(#{name}, #{age})
    </insert>

    <update id="update" parameterType="com.example.demo.entity.Student">
        UPDATE student SET name=#{name}, age=#{age}
        WHERE id=#{id}
    </update>

    <delete id="deleteById" parameterType="java.lang.Long">
        DELETE FROM student WHERE id=#{id}
    </delete>

</mapper>
@Repository
public class MybatisStudentMapper implements StudentMapper {
    private final SqlSessionTemplate sqlSessionTemplate;

    public MybatisStudentMapper(SqlSessionTemplate sqlSessionTemplate) {
        this.sqlSessionTemplate = sqlSessionTemplate;
    }

    @Override
    public List<Student> findAll() {
        return sqlSessionTemplate.selectList("com.example.demo.mapper.StudentMapper.findAll");
    }

    @Override
    public Student findById(Long id) {
        return sqlSessionTemplate.selectOne("com.example.demo.mapper.StudentMapper.findById", id);
    }

    @Override
    public int save(Student student) {
        return sqlSessionTemplate.insert("com.example.demo.mapper.StudentMapper.save", student);
    }

    @Override
    public int update(Student student) {
        return sqlSessionTemplate.update("com.example.demo.mapper.StudentMapper.update", student);
    }

    @Override
    public int deleteById(Long id) {
        return sqlSessionTemplate.delete("com.example.demo.mapper.StudentMapper.deleteById", id);
    }
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用SpringBoot开发Restful服务实现增删改查功能 - Python技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • javaWeb自定义标签用法实例详解

    JavaWeb自定义标签是JavaWeb开发中的一个重要组成部分,它可以方便开发人员以面向对象的方式来实现页面元素的复用和封装,加速开发效率,减少代码重复。 下面给出一个完整的JavaWeb自定义标签的攻略,包含以下内容: 1. 什么是JavaWeb自定义标签 JavaWeb自定义标签是一种特殊的JSP元素,它可以自定义页面标签,可以通过自定义标签来实现前端…

    Java 2023年6月15日
    00
  • ssm实现视频的上传与播放的示例代码

    作为网站的作者,我将为您提供SSM实现视频上传和播放的完整攻略和相关示例代码。 1.环境搭建与相关配置 首先,我们需要搭建一个SSM的开发环境,并对应配置相关的依赖。在此前提下,你还需要额外安装FFmpeg的支持,参考官方的文档或百度搜索可以找到对应的安装包和配置方法。 配置文件: 在这里,我们需要对上传的文件大小进行限制处理,因此配置文件中需要添加如下内容…

    Java 2023年6月15日
    00
  • 微信小程序模板消息限制实现无限制主动推送的示例代码

    接下来我将为您详细讲解“微信小程序模板消息限制实现无限制主动推送的示例代码”的攻略。 前置要求 在实现无限制主动推送之前,需要先满足微信官方对于小程序模板消息的限制要求,包括以下几点: 用户首次在小程序中订阅模板消息需用户手动触发; 小程序根据订阅消息的模板发送消息,需用户在小程序中使用过该模板或模板已被用户授权,否则会发送失败; 发送模板消息的次数受到限制…

    Java 2023年5月23日
    00
  • spring boot集成pagehelper(两种方式)

    下面我会详细讲解Spring Boot集成PageHelper的两种方式及相应的示例。 方式一:使用PageHelper Starter 第一步:在pom.xml文件中添加以下依赖: <dependency> <groupId>com.github.pagehelper</groupId> <artifactId&g…

    Java 2023年5月19日
    00
  • C#泛型与非泛型性能比较的实例

    C#泛型与非泛型性能比较的实例 在C#中,泛型和非泛型的性能都很重要,选择合适的类型会影响程序的性能。本文将通过实际的代码示例来对比泛型和非泛型在执行时间和内存消耗方面的差异。 示例1:列表 需要在程序中实现一个可以动态添加元素的列表。我们可以用List<T>实现泛型列表,也可以自己实现一个非泛型版本的列表。 泛型列表的实现 List<in…

    Java 2023年5月19日
    00
  • 大厂面试常考:快速排序冒泡排序算法

    大厂面试常考:快速排序冒泡排序算法 在大厂面试中,经常会出现排序算法的相关问题。快速排序和冒泡排序是最常见的排序算法之一,本文将详细讲解这两种常见的排序算法。 快速排序 概念 快速排序采用“分治法”的思想。首先选取一个基准点,将数组分为左右两部分。左侧部分小于基准点,右侧部分大于基准点。接下来,递归地对左、右两个子数组执行快速排序。 代码实现 def qui…

    Java 2023年5月19日
    00
  • Lombok中关于@Data的使用解析

    下面就来详细讲解一下”Lombok中关于@Data的使用解析”的完整攻略。 什么是Lombok? Lombok是一种Java库,它通过注解的方式来简化Java代码的编写。使用Lombok库可以避免写很多样板代码,减少代码的臃肿程度,同时提高代码的可读性和可维护性。在使用Lombok之前,需要先在项目的pom.xml中加入lombok的依赖: <depe…

    Java 2023年5月20日
    00
  • javascript+html5+css3自定义弹出窗口效果

    “javascript+html5+css3自定义弹出窗口效果”主要可以通过以下步骤实现: 第一步:HTML部分 在HTML代码中,我们需要首先定义一个触发弹出窗口的按钮,用于触发弹出窗口的开启。同时我们需要在代码中定义一个 <div> 标签作为弹出窗口的容器。 示例代码如下: <!DOCTYPE html> <html>…

    Java 2023年6月15日
    00
合作推广
合作推广
分享本页
返回顶部