21天掌握JavaWeb-》第16天 - 后端开发与API设计

ops/2024/12/15 13:05:24/

引言

在今天的课程中,我们将使用Spring Boot结合MyBatis来开发后端逻辑,并设计RESTful API。我们将根据之前设计的用户(User)、商品(Product)、购物车(Cart)和订单(Order)表来实现相应的后端服务,并与前端进行联调。

环境搭建

首先,确保你的开发环境已经安装了Java和Maven。然后,创建一个新的Spring Boot项目,并添加以下依赖到pom.xml文件中:

<dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- MyBatis Spring Boot Starter --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version></dependency><!-- MySQL Connector --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency>
</dependencies>

配置数据库连接

application.properties文件中配置数据库连接:

spring.datasource.url=jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=your_password
mybatis.mapper-locations=classpath:mapper/*.xml

实体类

创建对应的实体类User, Product, Cart, Order

User.java
package com.yourpackage.model;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;@Entity
public class User {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Integer userId;private String username;private String password;private String email;// Getters and Setters
}
Product.java
package com.yourpackage.model;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;@Entity
public class Product {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Integer productId;private String name;private Double price;private String description;// Getters and Setters
}
Cart.java
package com.yourpackage.model;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;@Entity
public class Cart {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Integer cartId;private Integer userId;private Integer productId;private Integer quantity;// Getters and Setters
}
Order.java
package com.yourpackage.model;import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;@Entity
public class Order {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Integer orderId;private Integer userId;private String status;private Double total;// Getters and Setters
}

MyBatis Mapper接口和XML配置

对于每个实体类,创建对应的Mapper接口和XML配置文件。

UserMapper.java
package com.yourpackage.mapper;import com.yourpackage.model.User;
import org.apache.ibatis.annotations.Select;public interface UserMapper {@Select("SELECT * FROM user WHERE user_id = #{userId}")User selectUserById(int userId);// 其他CRUD方法
}
UserMapper.xml
<mapper namespace="com.yourpackage.mapper.UserMapper"><select id="selectUserById" resultType="com.yourpackage.model.User">SELECT * FROM user WHERE user_id = #{userId}</select><!-- 其他CRUD语句 -->
</mapper>

服务层(Service)

创建服务层接口和实现类,例如UserServiceUserServiceImpl

UserService.java
package com.yourpackage.service;import com.yourpackage.model.User;public interface UserService {User getUserById(int userId);// 其他业务方法
}
UserServiceImpl.java
package com.yourpackage.service.impl;import com.yourpackage.mapper.UserMapper;
import com.yourpackage.model.User;
import com.yourpackage.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic User getUserById(int userId) {return userMapper.selectUserById(userId);}// 其他业务方法实现
}

控制器层(Controller)

创建控制器类,定义RESTful API。

UserController.java
package com.yourpackage.controller;import com.yourpackage.model.User;
import com.yourpackage.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/api/users")
public class UserController {@Autowiredprivate UserService userService;@GetMapping("/{userId}")public ResponseEntity<User> getUserById(@PathVariable int userId) {User user = userService.getUserById(userId);return user != null ? ResponseEntity.ok(user) : ResponseEntity.notFound().build();}// 其他API方法
}

核心概念和优势

  • Spring Boot:简化了基于Spring的应用开发,自动配置了项目,减少了配置文件的编写。
  • MyBatis:提供了简单的方法将SQL语句映射成Java对象,简化了数据库操作。
  • RESTful API:一种设计风格,使得后端服务更加易于理解和使用,前后端分离更加清晰。

感悟和启示

在后端开发中,理解RESTful API的设计原则和Spring Boot的自动配置机制是非常重要的。这不仅可以提高开发效率,还可以保证API的可维护性和可扩展性。通过实际编写代码和前后端联调,可以加深对JavaWeb开发流程的理解,为成为一名合格的Java工程师打下坚实的基础。

结语

通过本篇文章,我们学习了如何使用Spring Boot结合MyBatis构建后端服务,并设计了RESTful API。希望这能帮助你在JavaWeb的学习道路上更进一步。如果你有任何疑问或需要进一步的指导,请随时提问。


http://www.ppmy.cn/ops/142108.html

相关文章

微服务中间件~nacos安全配置(含参考案例)

Nacos 是阿里巴巴开源的一个动态服务发现、配置管理和服务管理平台。为了确保 Nacos 的安全性&#xff0c;可以从以下几个方面入手&#xff1a; 1、启用身份验证&#xff1a; 在 application.properties 文件中启用身份验证功能&#xff1a;properties nacos.core.auth.enable…

MySQL运算符知识点

算术运算符 算术运算符主要用于数学运算&#xff0c;其可以连接运算符前后的两个数值或表达式&#xff0c;对数值或表达式进行加(&#xff09;、减&#xff08;-&#xff09;、乘&#xff08;*&#xff09;、除&#xff08;/&#xff09;和取模&#xff08;%&#xff09;运算…

ElasticSearch03-基本操作

零、文章目录 ElasticSearch03-基本操作 1、RestFul API 风格 ElasticSearch 的接口风格是 RESTful API。RESTful 是一种软件架构风格&#xff0c;它使用 HTTP 协议来实现客户端和服务器之间的通信。ElasticSearch 的 RESTful API 提供了一种简单且标准化的方式来与 Elastic…

大屏开源项目go-view二次开发2----半环形控件(C#)

环境搭建参考&#xff1a; 大屏开源项目go-view二次开发1----环境搭建(C#)-CSDN博客 要做的半环形控件最终效果如下图&#xff1a; 步骤如下&#xff1a; 1 在go-view前端项目的\src\packages\components\Charts目录下新增Others目录&#xff0c;并在Others目录下新增PieExt…

孚盟云 MailAjax.ashx SQL注入漏洞复现

0x01 产品简介 上海孚盟软件有限公司是一家外贸SaaS服务提供商,也是专业的外贸行业解决方案专业提供商。 全新的孚盟云产品,让用户可以用云模式实现信息化管理,让用户的异地办公更加流畅,大大降低中小企业在信息化上成本,用最小的投入享受大型企业级别的信息化服务,主要…

特工找密码(蓝桥杯)

本来这题想用枚举暴力解的&#xff0c;但是运行总是超时&#xff0c;数值范围太大了~&#xff0c;所以该题不能用枚举进行暴力。 转换成二进制&#xff0c;我们判断一下其规律 注意&#xff1a;按位与是都为1时其值才为1&#xff0c;所以当x和y按位与的结果为2时&#xff0c;其…

C语言——判断输入字符串是否合法代码分享

一. 引言 成功的程序总是尝试预测无效数据&#xff0c;并将此类数据隔离&#xff0c;使其不被接受和处理 首先验证数据的类型是否正确&#xff1b;如果没有&#xff0c;请要求用户重新输入数据 解释为什么输入的数据无效 验证输入数据的最常用方法之一…

深入详解机器学习基础中的模型评估方法

引言 机器学习正在快速改变我们的世界&#xff0c;从自动驾驶汽车到个性化推荐系统&#xff0c;其应用无处不在。然而&#xff0c;一个成功的机器学习项目不仅依赖于强大的算法和丰富的数据&#xff0c;还需要精确的模型评估方法。模型评估是机器学习过程中不可或缺的环节&…