2021-09-04

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

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

Step 1

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

所需环境:

  • jdk1.8
  • Maven 3.6.1
  • mysql 5.7

1.1搭建初始化项目

(1)使用IDEA创建新工程

在这里插入图片描述

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

在这里插入图片描述

(3) 点击Next
在这里插入图片描述

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

在这里插入图片描述

(5) 创建项目

在这里插入图片描述

(6) 项目创建完成
在这里插入图片描述

(7) 添加依赖
在这里插入图片描述

(8) 项目结构
在这里插入图片描述

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

(1)创建数据库

在这里插入图片描述

(2) 创建表user
在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

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先启动浏览器访问接口,查看是否成功

启动项目
在这里插入图片描述

项目启动成功,访问8088端口
在这里插入图片描述出现此页面代表项目启动成功

由于浏览器只能发送get请求,所以我们先测试controller中的get请求接口
在这里插入图片描述

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

在这里插入图片描述

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

后台也显示sql信息

在这里插入图片描述

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

在这里插入图片描述

新建测试集合

在这里插入图片描述

在下栏url地址中输入请求
在这里插入图片描述

get请求成功

在这里插入图片描述

测试delete请求

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

删除成功

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

在这里插入图片描述

在postman中传递json字符串
在这里插入图片描述

添加成功

在这里插入图片描述

在这里插入图片描述

测试PUT请求 :

在这里插入图片描述

更新成功

在这里插入图片描述

在这里插入图片描述

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

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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用python的pymsql完成如下:表结构与数据创建 1. 建立 `users` 表和 `orders` 表。 `users` 表有用户ID、用户名、年龄字段,(id,name,age) `orders` 表有订单ID、订单日期、订单金额,用户id字段。(id,order_date,amount,user_id) 2 两表的id作为主键,`orders` 表用户id为users的外键 3 插入数据 `users` (1, '张三', 18), (2, '李四', 20), (3, '王五', 22), (4, '赵六', 25), (5, '钱七', 28); `orders` (1, '2021-09-01', 500, 1), (2, '2021-09-02', 1000, 2), (3, '2021-09-03', 600, 3), (4, '2021-09-04', 800, 4), (5, '2021-09-05', 1500, 5), (6, '2021-09-06', 1200, 3), (7, '2021-09-07', 2000, 1), (8, '2021-09-08', 300, 2), (9, '2021-09-09', 700, 5), (10, '2021-09-10', 900, 4); 查询语句 1. 查询订单总金额 2. 查询所有用户的平均年龄,并将结果四舍五入保留两位小数。 3. 查询订单总数最多的用户的姓名和订单总数。 4. 查询所有不重复的年龄。 5. 查询订单日期在2021年9月1日至9月4日之间的订单总金额。 6. 查询年龄不大于25岁的用户的订单数量,并按照降序排序。 7. 查询订单总金额排名前3的用户的姓名和订单总金额。 8. 查询订单总金额最大的用户的姓名和订单总金额。 9. 查询订单总金额最小的用户的姓名和订单总金额。 10. 查询所有名字含有“李”的用户,按照名字升序排序。 11. 查询所有年龄大于20岁的用户,按照年龄降序排序,并只显示前5条记录。 12. 查询每个用户的订单数量和订单总金额,并按照总金额降序排序。
06-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值