使用Spring Boot搭建一个简单的项目

使用Spring Boot搭建一个简单的项目

前期需要准备:

1.安装MySql

2.安装IDEA

创建项目

依赖选择这三个

代码结构:

pom.xml:依赖配置

springboot启动类:

配置数据库连接信息:

spring.application.name=springboot_mankiw
#当前web应用端口
server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/springboot_mankiw?useSSL=false&serverTimezone=UTC&useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=111111
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#显示sql
spring.jpa.show-sql=true
#格式化sql 没有这个sql都显示在一行
spring.jpa.properties.hibernate.format_sql=true
#自动更新数据库表结构
spring.jpa.hibernate.ddl-auto=update

创建MySql数据库;通过代码方式动态建表

创建pojo类

创建user类

@Table:将User类映射为一个表,后面参数:指定表名

@Id:设置主键id

@GeneratedValue(strategy = GenerationType.IDENTITY):id生成策略

@Column(name="user_id"):修改字段名

//spring data jpa映射为表
@Table(name = "tb_user")
@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="user_id")
    private Integer id;
    private String name;
    private String password;
    private String email;

    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

自动生成get;set;方法快捷键:alt + insert

需要在配置文件中添加以下内容,在启动项目时才会自动创建出表。

#自动更新数据库表结构
spring.jpa.hibernate.ddl-auto=update

这一步结束后,就会在数据库中创建出对应的表。

创建Controllers、Services、repository

0.创建ResponseMessage类,统一接口返回类型

package com.mankiw.springboot_mankiw.pojo;
import org.springframework.http.HttpStatus;
public class ResponseMessage<T> {
    private Integer code;
    private String message;
    private T data;
    public ResponseMessage(Integer code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }
    public Integer getCode() {
        return code;
    }
    public void setCode(Integer code) {
        this.code = code;
    }
    public String getMessage() {
        return message;
    }
    public void setMessage(String message) {
        this.message = message;
    }
    public T getData() {
        return data;
    }
    public void setData(T data) {
        this.data = data;
    }
    //接口请求成功
    public static <T> ResponseMessage success(T data) {
        return new ResponseMessage(HttpStatus.OK.value(), "success", data);
    }
}

UserDTO类:这个类的对象用于接收请求参数

package com.mankiw.springboot_mankiw.pojo.dto;

public class UserDto {

    private Integer id;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    private String name;
    private String password;
    private String email;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

向user表中插入一条数据

步骤:

  1. 创建repository
  2. 创建service
  3. 创建controller
  4. 将reposity service分别注入service和controller

1.创建UserController

UserController上需要两个注解:

@RestController//接口方法返回对象,转换成json文本
@RequestMapping("/user") //localhost:8088/user/
@RestController//接口方法返回对象,转换成json文本
@RequestMapping("/user") //localhost:8088/user/
public class UserController {
    @Autowired//自动装配
    IUserService userService;
    @PostMapping
    public ResponseMessage<String> add(@RequestBody UserDto user) {//RequestBody注解将json自动转成对象
        User userNew = userService.add(user);
        return "";
    }
}

2.创建UserService,在类上需要添加@Service注解

创建IUserService接口

public interface IUserService {
    /*插入用户*/
    User add(UserDto user);
}

将UserRepository自动装配进UserService

@Service //spring 的bean
public class UserService implements IUserService {
    @Autowired
    UserRepository userRepository;
    @Override
    public User add(UserDto user) {
        User userPojo = new User();
        //拷贝对象
        BeanUtils.copyProperties(user, userPojo);
        //save方法 add可以用,update也可以用,根据是否有id判断是update还是add
        //返回User对象
        return userRepository.save(userPojo);
    }
}

3.创建user repository

由于使用了spring data jpa,所以repository接口只需要继承CrudRepository接口,CrudRepository接口的泛型:第一个是需要操作的对象是什么类型;第二个是这个对象的主键id类型。

不需要写每个方法具体的实现。

@Repository//spring bean
//User 需要操作那个类
//Integer 当前类的主键id是什么类型
//为什么不同的类需要加上不同的注解?使用commponent也可以,Reposity Service注解是为了是类的职责更加明确
public interface UserRepository extends CrudRepository<User, Integer> {
}

通过上面步骤即可通过请求向表中添加一条user数据。

可能遇见的问题:

1.启动项目后,访问接口返回404:

原因:

1.Controller 没有与springboot启动类放在同一个文件夹下。

2.在启动类上添加注解,让springboot扫描这个包:

@ComponentScan(basePackages = "com.mankiw.Controller")

3.springboot项目启动后,使用http请求接口。

2.启动项目后未创建出User表

原因:跟问题1是一个原因。

我希望有一个统一的异常处理类

@RestControllerAdvice//所有的统一处理都可以写在这个类中

@ExceptionHandler({Exception.class})//什么异常的统一处理 Exception.class为所有的异常做统一处理。(这个注解的参数是:希望哪种异常被处理)

@RestControllerAdvice //统一处理
public class GlobalExceptionHandlerAdvice {

    Logger log = LoggerFactory.getLogger(GlobalExceptionHandlerAdvice.class);

    @ExceptionHandler({Exception.class})//什么异常的统一处理 Exception.class为所有的异常做统一处理
    public ResponseMessage handleException(Exception e, HttpServletRequest request, HttpServletResponse response) {
        log.error("统一异常", e);
        return new ResponseMessage(500,"error",null);
    }

}

剩下的接口与Add大同小异,详情可见:https://gitee.com/skyline_1-skyline/springboot_demo

posted @ 2025-03-07 12:02  贾博文  阅读(435)  评论(0)    收藏  举报