在做个简单的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.youkuaiyun.com/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