Web应用开发

一. 搭建项目框架

1.创建项目

①使用Spring Initializer创建项目,建议使用IDE创建

②构建工具:Maven

③JDK版本,根据个人安装的情况选择,本项目使用jdk1.8,Java语言版本8

④打包方式Jar(官方推荐)

⑤spring boot版本(2.7.6),在官网当时提供的版本中选择,尽量选择发行版本

⑥选择依赖

2.相关配置文件

①pom.xml

②application.yml
//application.properties→application.yml,应用程序配置文件的格式由properties修改为yml,yml文件的结构更为清晰

③为不同的环境添加个性化的应用程序配置文件
//比如开发环境下的application-dev.yml和生产环境下的application-prd.yml,将共同的配置留在application.yml中

④不同环境的yml文件,指定个性化配置
//比如端口号生产环境80、开发环境8xxx,比如不同的数据源地址、用户名密码等

⑤在默认的yml配置文件中,指定当前生效的配置文件,只需要指定后缀

3.启动应用测试

①可在控制台看输出,出现Started XXXApplication in xxx seconds,表示运行成功

②可在yml中配置日志级别,开发时输出详细信息,生产环境根据需要记录关键信息

③应用启动并测试成功后,将创建的项目框架推送到远程仓库

二.相关业务

- entity:

存放实体类,即与数据库表对应的类,我们需要创建一个User类,使用@Data注解来自动生成getter,setter,toString等方法,使用@Entity注解来标识该类为实体类,使用@Table注解来指定该类对应的表名,使用@Id注解来标识主键,使用@GeneratedValue注解来指定主键生成策略,使用@Column注解来指定字段名和属性,代码如下:

package net.lzzy.practicesapi1.entities;

import lombok.Data;

import javax.persistence.*;

@Data
@Entity
@Table(name = "user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    @Column(name = "username", nullable = false, length = 20)
    private String username;

    @Column(name = "password", nullable = false, length = 20)
    private String password;

    @Column(name = "email", nullable = false, length = 50)
    private String email;

    @Column(name = "role", nullable = false, length = 10)
    private String role;
}
- repository:

存放数据访问层,即与数据库进行交互的接口,我们需要创建一个UserRepository接口,继承JpaRepository接口,提供基本的增删改查方法,以及根据用户名和密码查询用户的方法,代码如下:

package net.lzzy.practicesapi1.repositories;

import com.example.userbackend.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Integer> {
    User findByUsernameAndPassword(String username, String password);
}
- service:

存放业务逻辑层,即封装业务逻辑的接口和实现类,我们需要创建一个UserService接口,定义以下方法:
    - findAll:查询所有用户
    - findById:根据id查询用户
    - save:保存或更新用户
    - deleteById:根据id删除用户
    - login:根据用户名和密码登录
然后,我们需要创建一个UserServiceImpl类,实现UserService接口,注入UserRepository对象,调用其方法来实现业务逻辑,代码如下:

package net.lzzy.practicesapi1.services;

import net.lzzy.practicesapi1.entity.User;
import net.lzzy.practicesapi1.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;

    @Override
    public List<User> findAll() {
        return userRepository.findAll();
    }

    @Override
    public User findById(Integer id) {
        return userRepository.findById(id).orElse(null);
    }

    @Override
    public User save(User user) {
        return userRepository.save(user);
    }

    @Override
    public void deleteById(Integer id) {
        userRepository.deleteById(id);
    }

    @Override
    public User login(String username, String password) {
        return userRepository.findByUsernameAndPassword(username, password);
    }
}
- controller:

存放控制层,即提供RESTful接口的类,我们需要创建一个UserController类,使用@RestController注解来标识该类为控制器,使用@RequestMapping注解来指定请求路径,使用@Autowired注解来注入UserService对象,使用@GetMapping,@PostMapping,@PutMapping,@DeleteMapping注解来指定请求方法,使用@PathVariable,@RequestBody注解来获取请求参数,使用ResponseEntity对象来封装响应数据,代码如下:

package net.lzzy.practicesapi1.controller;

import  net.lzzy.practicesapi1.entity.User;
import  net.lzzy.practicesapi1.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/users")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping
    public ResponseEntity<List<User>> findAll() {
        List<User> users = userService.findAll();
        return new ResponseEntity<>(users, HttpStatus.OK);
    }

    @GetMapping("/{id}")
    public ResponseEntity<User> findById(@PathVariable Integer id) {
        User user = userService.findById(id);
        if (user == null) {
            return new ResponseEntity<>(HttpStatus.NOT_FOUND);
        }
        return new ResponseEntity<>(user, HttpStatus.OK);
    }

    @PostMapping
    public ResponseEntity<User> save(@RequestBody User user) {
        User newUser = userService.save(user);
        return new ResponseEntity<>(newUser, HttpStatus.CREATED);
    }

    @PutMapping("/{id}")
    public ResponseEntity<User

三. 测试接口

使用的测试工具 

一般的接口测试,在Edge或Chrome上使用PostWoman插件(Postman插件已下架)

测试接口需要提交复杂json时,可使用在线json编辑器

涉及到文件上传,必须安装Postman应用

使用Chrome或Edge的开发者工具,可在网络面板中解析接口资源

如需分析接口发送的数据,可安装fiddler,在请求过程中抓包

 一般接口测试 

①选择请求方法,如GET、POST、PUT、DELETE等

②输入接口请求地址

③请求发送按钮

④输入请求参数

⑤响应得到的json数据

四. mybatis与mybatis-plus

      MyBatis 是一个开源的持久层框架,它是在 JDBC 的基础上进行封装,通过 XML 或注解方式来配置 SQL,将 SQL 语句和 Java 方法绑定,简化了数据库操作。MyBatis-Plus 是在 MyBatis 的基础上进行了扩展,提供了更多实用的功能以简化开发。

MyBatis 实现:

基于 XML 文件配置 SQL 语句和映射关系。
提供了简单直观的 SQL 操作能力。
支持动态 SQL、存储过程调用等高级特性。
需要手动编写大量的 SQL 和映射代码。


MyBatis-Plus 实现:

基于 MyBatis 进行扩展,提供了更多便捷的 CRUD 方法。
使用代码生成器可以自动生成实体类、Mapper 接口、Service 类等。
提供了 Lambda 查询、条件构造器、分页查询等实用功能。
简化了开发流程,减少了重复代码。
区别:

功能扩展:MyBatis-Plus 在 MyBatis 的基础上增加了更多的实用功能,如代码生成器、Lambda 查询等,使得开发更加便捷。
编码风格:MyBatis-Plus 的编码风格更加简洁,提供了更多的链式调用和函数式编程的支持,使得代码可读性更强。
适用场景:MyBatis-Plus 更适合快速开发和简单的 CRUD 操作,而 MyBatis 则更加灵活,适用于复杂的 SQL 操作和定制化需求。
        总的来说,MyBatis-Plus 是在 MyBatis 的基础上进行了功能扩展和简化,使得开发更加方便快捷,特别适合一些简单的业务场景和快速开发。
 

  • 30
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值