尝试基于spring + SpringBoot + MybatisPlus + axios + ElementUi实现的一个小小的系统,感兴趣可以来看看哦,一步一步的实现,详细步骤都有。
第一次尝试功能不太完整。
- 成果
- 1、登录界面
- 2、注册界面
- 3、菜单
- 4、水果信息表
- SSMP整合↓
- 一、导入依赖
- 二、数据库创建
- 三、实体类的创建
- 三、DAO层
- 1、配置信息
- 2、编写接口
- 3、功能测试
- 四、Service层
- 1、接口
- 2、实现类
- 3、功能测试
- 五、Controller层
- 1、创建Result类
- 2、创建Code响应状态码
- 3、controller
mysql
mysql-connector-java
runtime
org.projectlombok
lombok
true
com.baomidou
mybatis-plus-boot-starter
3.4.1
com.alibaba
druid-spring-boot-starter
1.2.9
二、数据库创建
我只是简单的基于登录注册以及对一张表的增删除,所以就只创建了一个user表和一个fruits表,里面简单添加了一点数据,方便后面查询。
-- ----------------------------
-- Table structure for fruits
-- ----------------------------
DROP TABLE IF EXISTS `fruits`;
CREATE TABLE `fruits` (
`f_id` char(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`s_id` int NOT NULL,
`f_name` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`f_price` decimal(8, 2) NOT NULL,
`quantity` int NULL DEFAULT 1000,
PRIMARY KEY (`f_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
-- ----------------------------
-- Records of fruits
-- ----------------------------
INSERT INTO `fruits` VALUES ('002', 100, '苹果', 3.50, 975);
INSERT INTO `fruits` VALUES ('003', 100, '梨', 3.60, 1000);
INSERT INTO `fruits` VALUES ('004', 100, '香蕉', 3.60, 1000);
INSERT INTO `fruits` VALUES ('005', 100, '芒果', 5.00, 988);
INSERT INTO `fruits` VALUES ('1', 100, '香蕉', 3.50, 989);
INSERT INTO `fruits` VALUES ('10', 100, 'peanut', 3.50, 1000);
INSERT INTO `fruits` VALUES ('10a', 100, 'peanut', 3.50, 1000);
INSERT INTO `fruits` VALUES ('11', 107, 'pear', 3.60, 1000);
INSERT INTO `fruits` VALUES ('11a', 107, 'pear', 3.60, 1000);
INSERT INTO `fruits` VALUES ('12', 102, 'orange', 11.20, 1000);
INSERT INTO `fruits` VALUES ('12a', 102, 'orange', 11.20, 1000);
INSERT INTO `fruits` VALUES ('13', 105, 'melon', 8.20, 1000);
INSERT INTO `fruits` VALUES ('13a', 105, 'melon', 8.20, 1000);
INSERT INTO `fruits` VALUES ('14', 101, 'plum', 3.20, 1000);
INSERT INTO `fruits` VALUES ('14a', 101, 'plum', 3.20, 1000);
INSERT INTO `fruits` VALUES ('15', 104, 'lemon', 6.40, 1000);
INSERT INTO `fruits` VALUES ('15a', 104, 'lemon', 6.40, 1000);
INSERT INTO `fruits` VALUES ('16', 106, 'mango', 15.60, 1000);
INSERT INTO `fruits` VALUES ('16a', 106, 'mango', 15.60, 1000);
INSERT INTO `fruits` VALUES ('17', 105, 'watermelon', 2.60, 1000);
INSERT INTO `fruits` VALUES ('17a', 105, 'watermelon', 2.60, 1000);
INSERT INTO `fruits` VALUES ('18', 105, 'cherry', 11.60, 1000);
INSERT INTO `fruits` VALUES ('18a', 105, 'cherry', 11.60, 1000);
INSERT INTO `fruits` VALUES ('19', 103, 'coconut', 9.20, 1000);
INSERT INTO `fruits` VALUES ('19a', 103, 'coconut', 9.20, 1000);
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int NOT NULL AUTO_INCREMENT,
`username` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`password` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
PRIMARY KEY (`id`) USING BTREE,
UNIQUE INDEX `username`(`username`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 76 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = DYNAMIC;
三、实体类的创建
@Data
public class User {
private Integer id;
private String username;
private String password;
}
@Data
public class Fruits {
@TableId(value = "f_id", type = IdType.ASSIGN_UUID)
private String fId;
private Integer sId;
private String fName;
private Float fPrice;
private Integer quantity;
}
三、DAO层
1、配置信息
# 数据库连接信息
spring:
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/fruits
username: root
password: 1234
mybatis-plus:
configuration:
#mp日志
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
2、编写接口
@Mapper public interface UserDao extends BaseMapper{ }
@Mapper public interface FruitsDao extends BaseMapper3、功能测试{ }
@SpringBootTest
public class DaoTest {
@Autowired
private UserDao userDao;
@Autowired
private FruitsDao fruitsDao;
@Test
public void test01(){
userDao.selectList(null);
}
@Test
public void test02(){
fruitsDao.selectList(null);
}
}
只要表里面的数据能过查询出来,接口基本都没有问题
public interface UserService extends IService{ }
public interface FruitsService extends IService2、实现类{ }
@Service public class UserServiceImpl extends ServiceImplimplements UserService { }
@Service public class FruitsServiceImpl extends ServiceImpl3、功能测试implements FruitsService { }
@SpringBootTest
public class ServiceTest {
@Autowired
private UserService userService;
@Autowired
private FruitsService fruitsService;
@Test
public void test01(){
userService.list();
}
@Test
public void test02(){
fruitsService.list();
}
}
同样,能够查询出数据就基本没错了。
@Data
public class Result {
// 响应状态码
private Integer code;
// 响应数据
private Object data;
// 响应信息
private String msg;
public Result() {
}
public Result(Object data) {
this.data = data;
}
public Result(Integer code, Object data) {
this.data = data;
this.code = code;
}
public Result(Integer code, Object data, String msg) {
this.data = data;
this.code = code;
this.msg = msg;
}
}
2、创建Code响应状态码
public class Code {
public static final Integer INSERT_OK = 20011;//添加成功
public static final Integer DELETE_OK = 20021;//删除成功
public static final Integer UPDATE_OK = 20031;//修改成功
public static final Integer SELECT_OK = 20041;//查询成功
public static final Integer INSERT_ERR = 20010;//添加失败
public static final Integer DELETE_ERR = 20020;//删除失败
public static final Integer UPDATE_ERR = 20030;//修改失败
public static final Integer SELECT_ERR = 20040;//查询失败
public static final Integer OTHER_ERR = 40001;//其它异常
public static final Integer SYSTEM_ERR = 50001;//系统异常
public static final Integer BUSINESS_ERR = 60001;//业务异常
}
3、controller
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@PostMapping()
public Result insertUser(@RequestBody User user) {
boolean save = userService.save(user);
return new Result(save ? Code.INSERT_OK:Code.INSERT_ERR,save);
}
@PostMapping(value = "/select")
public Result selectUser(@RequestBody User user){
QueryWrapper qw = new QueryWrapper<>(user);
List list = userService.list(qw);
Integer code = list.size()>0 ? Code.SELECT_OK:Code.SELECT_ERR;
String msg = list.size()>0 ? "":"查询失败,请重试!";
return new Result(code,null,msg);
}
@GetMapping
public Result getAllUser(){
List users = userService.list();
Integer code = users.isEmpty() ? Code.SELECT_ERR : Code.SELECT_OK;
String msg = users.isEmpty() ? "查询失败,请重试!!!" : "";
return new Result(code,users,msg);
}
}
@RestController
@RequestMapping("/fruits")
public class FruitsController {
@Autowired
private FruitsService fruitsService;
@GetMapping
public Result selectAllFruits() {
List fruits = fruitsService.list();
Integer code = fruits != null ? Code.SELECT_OK:Code.SELECT_ERR;
String msg = fruits != null ? "":"查询失败,请重试!";
return new Result(code,fruits,msg);
}
@PostMapping
public Result insertFruits(@RequestBody Fruits fruits) {
boolean flag =fruitsService.save(fruits);
return new Result(flag ? Code.INSERT_OK:Code.INSERT_ERR,flag);
}
@DeleteMapping("/{fid}/{sid}")
public Result deleteFruits(@PathVariable String fid, @PathVariable Integer sid) {
LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(Fruits::getFId,fid).eq(Fruits::getSId,sid);
boolean flag =fruitsService.remove(wrapper);
return new Result(flag ? Code.INSERT_OK:Code.INSERT_ERR,flag);
}
@PutMapping
public Result updateFruits(@RequestBody Fruits fruits) {
LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(Fruits::getFId,fruits.getFId()).eq(Fruits::getSId,fruits.getSId()).
set(Fruits::getFName,fruits.getFName()).set(Fruits::getFPrice,fruits.getFPrice()).
set(Fruits::getQuantity,fruits.getQuantity());
boolean flag =fruitsService.update(wrapper);
return new Result(flag ? Code.UPDATE_OK:Code.UPDATE_ERR,flag);
}
@GetMapping("/{fid}")
public Result selectFruits(@PathVariable String fid) {
Fruits fruits = fruitsService.getById(fid);
Integer code = fruits != null ? Code.SELECT_OK:Code.SELECT_ERR;
String msg = fruits != null ? "":"查询失败,请重试!";
return new Result(code,fruits,msg);
}
@PostMapping("/search")
public Result selectByInput(@RequestBody Fruits fruits){
LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>();
wrapper.eq(StringUtils.isNotBlank(fruits.getFId()),Fruits::getFId,fruits.getFId())
.eq(fruits.getSId()!=null,Fruits::getSId,fruits.getSId())
.eq(StringUtils.isNotBlank(fruits.getFName()),Fruits::getFName,fruits.getFName())
.le(fruits.getFPrice()!=null,Fruits::getFPrice,fruits.getFPrice());
List list = fruitsService.list(wrapper);
Integer code = list != null ? Code.SELECT_OK:Code.SELECT_ERR;
String msg = list != null ? "":"查询失败,请重试!";
return new Result(code,list,msg);
}
}
前端代码不好贴,私信我可以拿哦~~~



