使用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日

相关文章

  • 解决idea2020.1找不到程序包和符号的问题

    问题背景: 在使用IntelliJ IDEA 2020.1时,有时会遇到找不到程序包和符号的问题。这个问题可能是由于项目依赖导致的,也可能是由于代码中的语法错误导致的。 解决方案: 检查项目依赖 首先,需要检查项目的依赖是否正确。在项目的pom.xml文件(Maven项目)或build.gradle文件(Gradle项目)中查看所依赖的库是否正确且版本是否匹…

    Java 2023年5月20日
    00
  • 基于Java创建一个订单类代码实例

    以下是基于Java创建一个订单类的完整攻略过程: 1. 定义订单类 在创建订单类之前,需要先明确订单类需要存储哪些信息,例如订单编号、订单创建时间、订单金额等等,再根据这些信息定义订单类的属性。同时,还需要定义订单类的基本行为,例如添加商品到订单、计算订单总金额等等,并将这些功能定义为订单类的方法。 public class Order { private …

    Java 2023年5月23日
    00
  • 利用Jasypt如何对Spring Boot配置文件加密

    利用Jasypt对Spring Boot配置文件加密的步骤如下: 1. 引入Jasypt依赖 首先在项目的pom.xml文件中引入Jasypt的依赖: <dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spri…

    Java 2023年5月20日
    00
  • EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码

    EasyUI tabs 组件是一个基于jQuery的选项卡插件,用于在网页中实现多标签页显示。要实现 EasyUI tabs 组件的高度与宽度根据 IE 窗口的变化自适应,需要进行如下步骤: 第一步:设定 HTML 结构 首先需要设置 HTML 的标记结构,如下所示: <div class="easyui-tabs" data-op…

    Java 2023年6月15日
    00
  • 使用dynamic datasource springboot starter实现多数据源及源码分析

    下面我们来详细讲解使用dynamic datasource springboot starter实现多数据源及源码分析的完整攻略。 什么是dynamic datasource springboot starter? dynamic datasource springboot starter是一款基于spring boot的多数据源解决方案,可以支持动态添加和…

    Java 2023年5月20日
    00
  • java中Date类和Strng类的灵活转化

    Java中的Date类和String类经常在我们的编程过程中使用,它们可以进行灵活的转化,丰富我们代码的实现。接下来将为大家讲解Java中Date类和String类的灵活转化的攻略。 1. Date类转String类 1.1 SimpleDateFormat类 在Java中,我们可以使用SimpleDateFormat类将Date对象转化为String对象。…

    Java 2023年5月20日
    00
  • Spring依赖注入与第三方Bean管理基础详解

    Spring依赖注入与第三方Bean管理基础详解 Spring是一个企业级应用开发框架,它能够帮助开发者做到松耦合、便于测试和灵活性高的设计。其中的依赖注入和第三方Bean管理是Spring最为重要的两个特性之一,也是开发者需要掌握的基础知识。 什么是依赖注入? 依赖注入(DI,Dependency Injection)是指Spring容器将一个Bean的依…

    Java 2023年5月19日
    00
  • 教你用Java GUI实现文本文件的读写

    教你用Java GUI实现文本文件的读写 如果你想在Java图形用户界面(GUI)中实现文本文件的读写,可以按照以下步骤操作: 1. 创建GUI界面 首先,需要创建一个GUI界面,让用户可以输入和查看文件的内容。可以使用Swing或JavaFX等GUI框架来创建GUI界面。 以下是一个简单的使用JavaFX创建GUI界面的示例代码: import javaf…

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