springboot 单表增删改查(上)已经做了准备,这篇文章,我们就来写专门的增删改查业务了,咳咳,整一口枸杞茶开始了…
四、正式开发
1、java 类实现包扫描
之前我们都是 xml 形式开启注解扫描,现在我们用 java 配置类(官方推荐)实现
在 config 包下,编写:
——MyBatisConfig.java
package com.example.shop.config;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@MapperScan(basePackages = "com.example.shop.dao")
public class MyBatisConfig {
}
2、编写 service 层
1)、编写service接口
——UserSevice.java(接口涉及了最基本的所有业务操作类型)
package com.example.shop.service;
import com.example.shop.dto.User;
import com.sun.istack.internal.NotNull;
import java.util.List;
import java.util.Optional;
public interface UserService {
Optional<List<User>> getAll(); //查询所有用户
Optional<User> getUserById(@NotNull Long id); //根据 id 查询用户
Optional<List<User>> pageList(int pageNum, int pageSize); //分页查询用户
int add(User user); //添加单个用户
int update(@NotNull Long id, User user); //根据 id 更新用户信息
int delete(@NotNull Long id); //删除单条数据
int deleteBatch(List<Long> ids); //插件自带方法批量删除
}
2)、编写 service 层实现类
先在 UserMapper.java 的类上面添加 @Repository 注解:
(添加 @Mapper 注解 idea 会有个提示报错,这个一般人忍不了啊)
实现类也可以单独放到 service/impl包下,这里我就直接跟接口放在一起了
——UserServiceImpl.java
package com.example.shop.service;
import com.example.shop.dao.UserMapper;
import com.example.shop.dto.User;
import com.example.shop.dto.UserExample;
import com.github.pagehelper.PageHelper;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;
@Service
public class UserServiceImpl implements UserService {
//为了避免循环依赖,这里不使用 @Autowired 注解,虽然这里仅仅是单表的增删改查,要养成好习惯
private final UserMapper userMapper;
@Override
public Optional<List<User>> getAll() {
return Optional.ofNullable(userMapper.selectByExample(new UserExample()));
}
@Override
public Optional<User> getUserById(Long id) {
return Optional.ofNullable(userMapper.selectByPrimaryKey(id));
}
@Override
public Optional<List<User>> pageList(int pageNum, int pageSize) {
PageHelper.startPage(pageNum, pageSize);
return Optional.ofNullable(userMapper.selectByExample(new UserExample()));
}
@Override
public int add(User user) {
return userMapper.insertSelective(user);
}
@Override
public int update(Long id, User user) {
user.setId(id);
return userMapper.updateByPrimaryKeySelective(user);
}
@Override
public int delete(Long id) {
return userMapper.deleteByPrimaryKey(id);
}
@Override
public int deleteBatch(List<Long> ids) {
UserExample userExample = new UserExample();
UserExample.Criteria criteria = userExample.createCriteria();
criteria.andIdIn(ids);
return userMapper.deleteByExample(userExample);
}
public UserServiceImpl(UserMapper userMapper) {
this.userMapper = userMapper;
}
}
3 、返回统一格式的数据类
实际开发中,controller 层返回的数据形式是一样的,比如请求的状态码,消息,返回的数据等内容,这里就简单封装一下。
在 dto 中新建 Result 泛型类:
package com.example.shop.dto;
public class Result<T> {
private int code;
private String message;
private T data;
public Result(T data) {
this(1, "query success", data);
}
public Result(int code, String message, T data) {
this.code = code;
this.message = message;
this.data = data;
}
public Result() {
}
public int getCode() {
return code;
}
public void setCode(int 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;
}
}
4、编写 controller 层
——UserController.java
package com.example.shop.controller;
import com.example.shop.dto.Result;
import com.example.shop.dto.User;
import com.example.shop.service.UserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
@RestController
@RequestMapping("/user")
public class UserController {
private static final Logger LOGGER = LoggerFactory.getLogger(UserController.class);
private final UserService userService;
@RequestMapping(value = "/getAll", method = RequestMethod.GET)
public Result getAll() {
return new Result(userService.getAll());
}
@RequestMapping(value = "/getUserById/{id}", method = RequestMethod.POST)
public Result getUserById(@PathVariable Long id) {
return new Result(userService.getUserById(id));
}
@RequestMapping(value = "/pageList", method = RequestMethod.GET)
public Result pageList(@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "3") Integer pageSize) {
return new Result(userService.pageList(pageNum, pageSize));
}
@RequestMapping(value = "/add", method = RequestMethod.POST)
public Result<User> add(@RequestBody User user) {
int n = userService.add(user);
if(0 < n) {
LOGGER.debug("add user success ====>");
return new Result(n,"add success", new User());
} else {
LOGGER.debug("add user failed ====>");
return new Result(n,"add failed", new User());
}
}
@RequestMapping(value = "/update/{id}", method = RequestMethod.POST)
public Result<User> update(@PathVariable Long id, @RequestBody User user) {
int n = userService.update(id, user);
if(0 < n) {
LOGGER.debug("update user success ====>");
return new Result(n,"update success", new User());
} else {
LOGGER.debug("update user failed ====>");
return new Result(n,"update failed", new User());
}
}
@RequestMapping(value = "/delete/{id}", method = RequestMethod.POST)
public Result<User> delete(@PathVariable Long id) {
int n = userService.delete(id);
if(0 < n) {
LOGGER.debug("delete user success ====> id=");
return new Result(n,"delete success", new User());
} else {
LOGGER.debug("delete user failed ====> id=");
return new Result(n,"delete failed", new User());
}
}
@RequestMapping(value = "/deleteBatch", method = RequestMethod.POST)
public Result<User> deleteBatch(@RequestParam List<String> ids) {
List<Long> ids1 = new ArrayList<>();
for (int i=0; i<ids.size(); i++) {
ids1.add(Long.parseLong(ids.get(i)));
}
int n = userService.deleteBatch(ids1);
if(0 < n) {
LOGGER.debug("deleteBath user success ====> ids=");
return new Result(n,"deleteBatch success", new User());
} else {
LOGGER.debug("deleteBath user failed ====> ids=");
return new Result(n,"deleteBatch failed", new User());
}
}
public UserController(UserService userService) {
this.userService = userService;
}
}
可以了,写代码写的热血沸腾的,喝几口茶冷静冷静先。