商城后台之报错实现+简单的crud(二)---(2)

在做个简单的crud之前,首先需要将报错写出来,如果搜索的内容或者删除的内容不存在,会提示错误

接下来请添加两个package

首先看一下我的gradle依赖:

dependencies {
    implementation('org.springframework.boot:spring-boot-starter-actuator')
    implementation('org.springframework.boot:spring-boot-starter-data-jpa')
    implementation('org.springframework.boot:spring-boot-starter-jdbc')
    implementation('org.springframework.boot:spring-boot-starter-web')
    implementation('com.alibaba:fastjson:1.2.47')
    implementation ('com.alibaba:druid:1.1.12')
    runtimeOnly('org.springframework.boot:spring-boot-devtools')
    runtimeOnly('mysql:mysql-connector-java')
    testImplementation('org.springframework.boot:spring-boot-starter-test')
}

添加一个类UserDTO

类UserDTO内容如下:

package com.ldwer.demo1.user;

import java.sql.Timestamp;
import com.alibaba.fastjson.annotation.JSONField;
public class UserDTO {
    private long userId;
    private String name;
    private String phone;
    private Byte gender;
    @JSONField(format = "yyyy-MM-dd HH:mm")
    private Timestamp createdAt;
    @JSONField(format = "yyyy-MM-dd HH:mm")
    private Timestamp updatedAt;

    public long getUserId() {
        return userId;
    }

    public void setUserId(long userId) {
        this.userId = userId;
    }

    public String getName() {
        return name;
    }

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

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public Byte getGender() {
        return gender;
    }

    public void setGender(Byte gender) {
        this.gender = gender;
    }

    public Timestamp getCreatedAt() {
        return createdAt;
    }

    public void setCreatedAt(Timestamp createdAt) {
        this.createdAt = createdAt;
    }

    public Timestamp getUpdatedAt() {
        return updatedAt;
    }

    public void setUpdatedAt(Timestamp updatedAt) {
        this.updatedAt = updatedAt;
    }
}

https://blog.csdn.net/fxbin123/article/details/78465342(这是有关@JSONField 注解的详解)

接下来添加这个

代码:

package com.ldwer.demo1.user.response;

import com.ldwer.demo1.user.UserDTO;

import java.util.List;

public class UserListResponseDTO {
    private Integer code;
    private String message;
    private List<UserDTO> users;

    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 List<UserDTO> getUsers() {
        return users;
    }

    public void setUsers(List<UserDTO> users) {
        this.users = users;
    }
}

下一步:

代码:

package com.ldwer.demo1.user.response;

import com.ldwer.demo1.user.UserDTO;

import java.util.List;

public class UserResponseDTO {
    private Integer code;
    private String message;
    private UserDTO user;
    private List<UserDTO> users;

    public List<UserDTO> getUsers() {
        return users;
    }

    public void setUsers(List<UserDTO> users) {
        this.users = users;
    }

    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 UserDTO getUser() {
        return user;
    }

    public void setUser(UserDTO user) {
        this.user = user;
    }
}

我对这个类的添加原因不是很清楚,等了解了更新下

代码:

package com.ldwer.demo1.user.request;

public class UserRequestDTO {
    private String name;
    private String phone;
    private Byte gender;

    public String getName() {
        return name;
    }

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

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public Byte getGender() {
        return gender;
    }

    public void setGender(Byte gender) {
        this.gender = gender;
    }
}

再创建一个接口:

代码:

package com.ldwer.demo1.user;

import org.springframework.data.jpa.repository.JpaRepository;

public interface UserDAO extends JpaRepository<User, Long> {

    User findByPhone(Long userId);

    User findUserById(Long userId);
}

接下来创建UserFactory类

代码:

package com.ldwer.demo1.user;

import com.ldwer.demo1.user.response.UserResponseDTO;

import java.util.ArrayList;
import java.util.List;

public class UserFactory {

    static UserDTO toUserDTO(User user) {
        UserDTO userDTO = new UserDTO();
        userDTO.setUserId(user.getUserId());
        userDTO.setName(user.getName());
        userDTO.setGender(user.getGender());
        userDTO.setPhone(user.getPhone());
        userDTO.setCreatedAt(user.getCreatedAt());
        userDTO.setUpdatedAt(user.getUpdatedAt());
        return userDTO;
    }

    static UserResponseDTO successResponse() {
        UserResponseDTO res = new UserResponseDTO();
        res.setCode(0);
        res.setMessage("success");
        return res;
    }

    static UserResponseDTO successResponse(User user) {
        UserDTO userDTO = toUserDTO(user);
        UserResponseDTO res = new UserResponseDTO();
        res.setCode(0);
        res.setMessage("success");
        res.setUser(userDTO);
        return res;
    }

    static UserResponseDTO successResponse(List<User> users) {
        List<UserDTO> userDTOList = new ArrayList<>();
        users.forEach(user -> {
            userDTOList.add(toUserDTO(user));
        });
        UserResponseDTO res = new UserResponseDTO();
        res.setCode(0);
        res.setMessage("success");
        res.setUsers(userDTOList);
        return res;
    }

    static UserResponseDTO errorResponse(Integer code, String message) {
        UserResponseDTO res = new UserResponseDTO();
        res.setCode(code);
        res.setMessage(message);
        return res;
    }
}

接下来:

代码:

package com.ldwer.demo1.user;

import com.ldwer.demo1.user.request.UserRequestDTO;

import javax.annotation.Resource;
import java.util.List;

public class UserBO {
    // BO means Bossiness Object

    @Resource
    private UserDAO userDAO;

    /**
     * Create user via name, phone and gender
     *
     * @param name
     * @param phone
     * @param gender
     * @return
     */
    User create(String name, String phone, Byte gender) {
        User user = new User();
        user.setName(name);
        user.setPhone(phone);
        user.setGender(gender);

        return userDAO.save(user);
    }

    /**
     * Get user by id
     *
     * @param uId
     * @return
     */
    User getById(Long uId) {
        return userDAO.findUserById(uId);
    }

    List<User> getUserList() {
        return userDAO.findAll();
    }

    User updateUser(Long userId, UserRequestDTO body) {
        User user = userDAO.findUserById(userId);

        if (body.getPhone() != null) {
            user.setPhone(body.getPhone());
        }
        if (body.getName() != null) {
            user.setName(body.getName());
        }
        if (body.getGender() != null) {
            user.setGender(body.getGender());
        }

        user = userDAO.save(user);
        return user;
    }

    void deleteUser(Long userId) {
        User user = userDAO.findUserById(userId);
        if (user != null) {
            userDAO.delete(user);
        }
    }
}

最后就是最重要的crud的实现了:

代码:

package com.ldwer.demo1.user;

import com.ldwer.demo1.user.request.UserRequestDTO;
import com.ldwer.demo1.user.response.UserResponseDTO;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

@RestController
@RequestMapping(value = "/api/v1")
public class UserController {

    @Resource
    private UserBO userBO;

    @RequestMapping(value = "/user", method = RequestMethod.POST)
    public UserResponseDTO createUser(@RequestBody UserRequestDTO body) {
        try {
            User user = userBO.create(body.getName(), body.getPhone(), (byte) body.getGender());
            return UserFactory.successResponse(user);
        } catch (Exception e) {
            return UserFactory.errorResponse(1, e.toString());
        }
    }

    @RequestMapping(value = "/user", method = RequestMethod.GET)
    public UserResponseDTO getUserList() {
        try {
            List<User> users = userBO.getUserList();
            return UserFactory.successResponse(users);
        } catch (Exception e) {
            return UserFactory.errorResponse(2, e.toString());
        }
    }

    @RequestMapping(value = "/user/{uId}", method = RequestMethod.GET)
    public UserResponseDTO getUserById(@PathVariable("uId") Long uId) {
        try {
            User user = userBO.getById(uId);
            return UserFactory.successResponse(user);
        } catch (Exception e) {
            return UserFactory.errorResponse(3, e.toString());
        }
    }

    @RequestMapping(value = "/user/{uId}", method = RequestMethod.PATCH)
    public UserResponseDTO updateUser(@PathVariable("uId") Long uId,
                                      @RequestBody UserRequestDTO body) {
        try {
            User user = userBO.updateUser(uId, body);
            return UserFactory.successResponse(user);
        } catch (Exception e) {
            return UserFactory.errorResponse(3, e.toString());
        }
    }

    @RequestMapping(value = "/user/{uId}", method = RequestMethod.DELETE)
    public UserResponseDTO deleteUser(@PathVariable("uId") Long uId) {
        try {
            userBO.deleteUser(uId);
            return UserFactory.successResponse();
        } catch (Exception e) {
            return UserFactory.errorResponse(3, e.toString());
        }
    }
}

下一步:

代码:

package com.ldwer.demo1;


import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.context.annotation.Bean;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;

import java.util.ArrayList;
import java.util.List;

@SpringBootApplication
public class Demo1Application {

    public static void main(String[] args) {
        SpringApplication.run(Demo1Application.class, args);
    }

    @Bean
    public HttpMessageConverters fastJsonHttpMessageConverter() {
        // 这个 Bean 的介绍看这里
        // https://www.jianshu.com/p/632fc5f57a24
        FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
        FastJsonConfig config = new FastJsonConfig();
        config.setSerializerFeatures(SerializerFeature.PrettyFormat);
        List<MediaType> fastMediaTypes = new ArrayList<>();
        fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
        fastConverter.setSupportedMediaTypes(fastMediaTypes);

        fastConverter.setFastJsonConfig(config);

        HttpMessageConverter<?> converter = fastConverter;
        return new HttpMessageConverters(converter);
    }
}
添加连接数据库配置文件:

代码:

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?useSSL=false
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect

猜你喜欢

转载自blog.csdn.net/qq_39820568/article/details/85993184