实现: 搭建物联网管理平台

实现设备(单片机)接入平台 并能上报数据下发命令 远程控制

Step 1

1.利用springboot框架搭建服务后端

所需环境:

  • jdk1.8
  • Maven 3.6.1
  • mysql 5.7

1.1搭建初始化项目

(1)使用IDEA创建新工程

idea 开发 spark java IDEA 开发物联网_物联网

(2) 点击Spring Initializr ==>选择jdk版本1.8 ==>点击Next

idea 开发 spark java IDEA 开发物联网_spring boot_02

(3) 点击Next

idea 开发 spark java IDEA 开发物联网_spring_03

(4)选择开发的需要的依赖,也可以创建项目后再添加

idea 开发 spark java IDEA 开发物联网_物联网_04

(5) 创建项目

idea 开发 spark java IDEA 开发物联网_spring_05

(6) 项目创建完成

idea 开发 spark java IDEA 开发物联网_java_06

(7) 添加依赖

idea 开发 spark java IDEA 开发物联网_spring boot_07

(8) 项目结构

idea 开发 spark java IDEA 开发物联网_spring boot_08

1.2创建数据库detest,创建表user

(1)创建数据库

idea 开发 spark java IDEA 开发物联网_idea 开发 spark java_09

(2) 创建表user

idea 开发 spark java IDEA 开发物联网_物联网_10

(3) 用IDEA连接数据库,向表中插入数据

idea 开发 spark java IDEA 开发物联网_spring boot_11

idea 开发 spark java IDEA 开发物联网_java_12

1.3集成mybatis-plus 实现CRUD

编写springboot核心配置文件 application.yml

server:
  port: 8088
  servlet:
    context-path: /

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/dbtest?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=true
    username: root
    password: 123456
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
    serialization:
      write-dates-as-timestamps: false

mybatis-plus:
  configuration:
    map-underscore-to-camel-case: true
    auto-mapping-behavior: full
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl   # 控制台显示 sql语句
  mapper-locations: classpath*:mapper/**/*Mapper.xml
  global-config:
    # 逻辑删除配置
    db-config:
      # 删除前
      logic-not-delete-value: 1
      # 删除后
      logic-delete-value: 0

(1) springboot 集成 mybatis-plus

  • 添加依赖(从mybatis-plus官网中找)
<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>
  • 编写Mybatis-plus 配置类

(2) 编写pojo一般类 ===>User

User.java

package com.b5.springboot.pojo;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private long id;
    private String name;
    private int age;
    private String email;
}

(3)采用MVC架构从数据库中获取数据

1)、编写mapper层

  • springboot 集成 mybatis-plus 进行CRUD
  • mapper 层提供接口 ,集成 Mybatis-plus 的BaseMapper接口
package com.b5.springboot.mapper;

import com.b5.springboot.pojo.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.springframework.stereotype.Repository;

@Repository  //代表持久层
public interface UserMapper extends BaseMapper<User> {
}

2)、编写service层

一、编写接口

package com.b5.springboot.service;

import com.b5.springboot.pojo.User;

import java.util.List;

public interface UserService {
    //查询所有消息
    List<User> findAll();

    //通过id查询单个用户
    User findById(Long id);

    //通过名字查询用户
    User findByName(String name);

    //新增用户
    Integer add(User user);

    //修改
    Integer updateById(User user);

    //删除
    Integer deleteById(Long id);

}

2)、编写实现类

UserServiceImpl.java

package com.b5.springboot.service.impl;


import com.b5.springboot.mapper.UserMapper;
import com.b5.springboot.pojo.User;
import com.b5.springboot.service.UserService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service  //代表业务层
public class UserServiceImpl implements UserService {


    @Autowired   //自动注入
    private UserMapper userMapper;

    @Override
    public List<User> findAll() {
        return userMapper.selectList(null);
    }

    @Override
    public User findById(Long id) {
        return userMapper.selectById(id);
    }

    @Override
    public User findByName(String name) {
        // 创建条件构造器
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        wrapper.like("name",name); //模糊查询
        return (User) userMapper.selectList(wrapper);  //查询时添加条件构造器
    }

    @Override
    public Integer add(User user) {
        return userMapper.insert(user);
    }

    @Override
    public Integer updateById(User user) {
        return userMapper.updateById(user);
    }

    @Override
    public Integer deleteById(Long id) {
        return userMapper.deleteById(id);
    }
}

3)、编写controller层

采用Result请求

  • 编写需要返回的json类 R(封装数据信息)
    R.java
package com.b5.springboot.utils;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class R {
    
    private int Code;
    private Object object;
    private String message;
}

UserController.java

package com.b5.springboot.controller;

import com.b5.springboot.pojo.User;
import com.b5.springboot.service.UserService;
import com.b5.springboot.utils.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController  //代表控制层,且只所有方法结果返回json字符串
public class UserController {

    @Autowired
    private UserService userService;


    @GetMapping("/findAll")
    public R findAll() {
        List<User> list = userService.findAll();
        R r = new R();
        if (list != null) {  //能从数据库中查出数据 则代表查询成功 ,否则失败
            r.setCode(200);
            r.setObject(list);
            r.setMessage("查询成功");
        } else {
            r.setCode(400);
            r.setObject(list);
            r.setMessage("查询成功");
        }
        return r;
    }

    @PostMapping("/add")
    public R add(@RequestBody User user) {
        Integer result = userService.add(user);
        R r = new R();

        if (result == 1) {  //返回结果为1,则代表添加成功
            r.setCode(200);
            r.setObject(result);
            r.setMessage("添加成功");
        } else {  //否则 ,添加失败
            r.setCode(400);
            r.setObject(result);
            r.setMessage("添加失败");
        }
        return r;
    }

    @PutMapping("/update")
    public R updateUserById (@RequestBody User user) {
        Integer result = userService.updateById(user);
        R r = new R();

        if (result == 1) {  //返回结果为1,则代表更新成功
            r.setCode(200);
            r.setObject(result);
            r.setMessage("更新成功");
        } else {  //否则 ,更新失败
            r.setCode(400);
            r.setObject(result);
            r.setMessage("更新失败");
        }
        return r;
    }

    @DeleteMapping("/delete/{id}")
    public R deleteUserById(@PathVariable("id") Long id) {
        Integer result = userService.deleteById(id);

        R r = new R();

        if (result == 1) {  //返回结果为1,则代表删除成功
            r.setCode(200);
            r.setObject(result);
            r.setMessage("删除成功");
        } else {  //否则 ,删除失败
            r.setCode(400);
            r.setObject(result);
            r.setMessage("删除失败");
        }
        return r;
    }
}

2. 启动浏览器,或用工具PostMan测试接口

2.1先启动浏览器访问接口,查看是否成功

启动项目

idea 开发 spark java IDEA 开发物联网_java_13

项目启动成功,访问8088端口

idea 开发 spark java IDEA 开发物联网_java_14

出现此页面代表项目启动成功由于浏览器只能发送get请求,所以我们先测试controller中的get请求接口

idea 开发 spark java IDEA 开发物联网_spring_15

在浏览器地址栏输入以下url :http://localhost:8088/findAll ==>访问

idea 开发 spark java IDEA 开发物联网_spring boot_16

出现json字符串则代表数据查询成功!

后台也显示sql信息

idea 开发 spark java IDEA 开发物联网_spring boot_17

2.2使用postman测试 post、put 、delete接口

idea 开发 spark java IDEA 开发物联网_spring boot_18

新建测试集合

idea 开发 spark java IDEA 开发物联网_idea 开发 spark java_19

在下栏url地址中输入请求

idea 开发 spark java IDEA 开发物联网_spring_20

get请求成功

idea 开发 spark java IDEA 开发物联网_物联网_21

测试delete请求

idea 开发 spark java IDEA 开发物联网_spring boot_22

由于采用Restful,所以要在路径后面直接添加要删除的id : http://localhost:8088/delete/5

idea 开发 spark java IDEA 开发物联网_idea 开发 spark java_23


idea 开发 spark java IDEA 开发物联网_spring_24

删除成功

测试post请求 : http://localhost:8088/add

idea 开发 spark java IDEA 开发物联网_spring boot_25

在postman中传递json字符串

idea 开发 spark java IDEA 开发物联网_idea 开发 spark java_26

添加成功

idea 开发 spark java IDEA 开发物联网_spring_27

idea 开发 spark java IDEA 开发物联网_java_28

测试PUT请求 :

idea 开发 spark java IDEA 开发物联网_spring boot_29

更新成功

idea 开发 spark java IDEA 开发物联网_spring_30

idea 开发 spark java IDEA 开发物联网_idea 开发 spark java_31

至此,后端的CRUD接口都测试成功

接下来只需通过前端页面调用后端接口就可以进行CRUD