智慧门禁系统

本文详细描述了如何使用SpringBoot、myBatis和uniapp框架开发一个物联网智慧门禁系统,包括环境配置、整体架构、代码示例和数据库操作。还介绍了如何使用接口技术,如Knife4j和Swagger2,实现用户注册、登录和门牌号查询功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概要

利用SpringBoot+myBatis技术以及uniapp框架,构建一个物联安防产品——智慧门禁系统。

开发所需环境:

1.JDK8  https://blog.youkuaiyun.com/engineer_why/article/details/126278075?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169724975716800180684170%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=169724975716800180684170&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-2-126278075-null-null.142^v96^pc_search_result_base3&utm_term=jdk8%E4%B8%8B%E8%BD%BD&spm=1018.2226.3001.4187

2.IDEA 2022  

2022IDEA的下载、安装、配置与使用_idea2022下载-优快云博客

3.mySQL服务器(PHPStudy),MySQL客户端

https://blog.youkuaiyun.com/wangyuxiang946/article/details/128732133?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169727000116800211557924%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=169727000116800211557924&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-2-128732133-null-null.142^v96^pc_search_result_base3&utm_term=PHPStudy&spm=1018.2226.3001.4187

4.maven

Maven安装与配置,Idea配置Maven_idea配置javaweb开发环境-优快云博客

整体架构流程

整体项目分为前后端开发。并适当拓展其他智慧社区功能模块。

后端:SpringBoot+myBatis

前端:uniapp框架

代码框架搭建

代码完整框架如图:

controller:做Springboot的代码,接收请求,返回响应结果

dao:做myBatis的代码,操作数据库

1.新建一个maven的module,pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>menjin</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
</project>

2.在com.zlt.controller包中,编写DoorController

package com.zlt.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController //DoorController是SpringBoot框架下的类
public class DoorController {
//SpringBoot提供能够被APP找到的方式以及能够返回数据给APP的方式
//app:open地址,return会回到app
//http协议的调用,url地址
@RequestMapping(value="open",method = RequestMethod.GET)
public String open(String userToken,String doorID){
//根据用户token和doorID验证该用户是否有权限开门
//给门禁设备发信号:开门
String result = "门已打开"+doorID;
return result;
}
}

3.框架配置,在resource中,添加application.yml文件

server:
  port: 8088

4.启动框架,在com.zlt文件中编写框架文件

package com.zlt.dao;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//启动框架
@SpringBootApplication
public class StartSpringBoot {
public static void main(String[] args) {
SpringApplication.run(StartSpringBoot.class,args);//框架启动
}
}

  5.访问连接,实验对open的调用

   localhost:8088/open?doorID=4-3-1002

以上步骤仅能实现开门这一功能,若想开启门禁系统,对进出人员进行识别,需要设置数据访问层myBatis

1.利用sqlyog建立一个人员信息的数据库(或使用其他数据库),收录进出人员相关信息。

       2.引入要跟数据库连接的框架的依赖,pom.xml

     (完整版,直接复制抹除之前的代码即可)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>menjin</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--连接数据库的依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.3.1</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
    </dependencies>
</project>

     3.链接数据库,完成配置

点击数据库左上角“文件”,选择“新建连接”

即可查看数据库相关信息

将获取到的数据库信息写到resource中

server:
   port: 8088

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver  //驱动
    url: jdbc:mysql://127.0.0.1:3306/chengli  
    username: root
    password: root //自设

4.要想接收并存储数据库的人员信息,还需要在IDEA中建立与数据库中信息相对应的类

在com.zlt软件包下重新建立一个entity包,在该软件包中建立UserInfo类,来存储信息。

package com.zlt.entity;
//与数据库一一映射
public class UserInfo {
    int id;
    String username;
    String phone;
    String houseId;
    //alt+insert
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    public String getHouseId() {
        return houseId;
    }
    public void setHouseId(String houseId) {
        this.houseId = houseId;
    }
}

5.编写myBatis,即使用myBatis查询数据库

package com.zlt.dao;
import com.zlt.entity.UserInfo;//引入依赖:alt+enter
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface UserInfoDao {
    //SELECT * FROM userinfo WHERE phone = ''
   //告诉mybatis框架执行这个SQL,执行结果会作为该方法的返回值
    @Select("SELECT * FROM userinfo WHERE phone = #{phone}")
     UserInfo findUserInfoByPhone(String phone);
}

6.调用myBatis,查看业主信息与开门的id是否一致

写入到com.zlt.controller软件包下DoorController中 

  @Autowired
    UserInfoDao userInfoDao;

    @RequestMapping(value = "open2", method = RequestMethod.GET)
    public String open2(String phone, String doorID) {
//根据该SQL语句查询该用户的房产信息,与doorID比对
        boolean flag = false;//比对结果
//SELECT * FROM userinfo WHERE phone = ''
        UserInfo userInfo = userInfoDao.findUserInfoByPhone(phone);
        if (userInfo.getHouseId().equals(doorID)) {//业主信息登记的房产信息跟要开门的id一致

            flag = true;
        }
        if (flag) {

            return "门已打开";
        } else {

            return "没有权限开门";
        }
    }

7.若以上步骤准确无误,运行代码后打开链接

localhost:8088/open2?phone=133111111111&doorID=4-2-1001

当数据库里面的用户可以打开门后,我们就要考虑如何在网页上,对数据库进行查询,登录和用户注册,而不是直接对数据库进行操作。这时我们就要用到接口技术。

要使用接口技术,我们首先要想清楚接口所需要的功能。

(1)实现用户在APP端发送开门信息,后台管理系统接收到信息,验证之后 找门禁设备开门

返回用户 app 开门成功的信息。
(2)实现用户信息注册
(3)实现用户登录
(4)实现用户门牌号查询
实现步骤:
1.我们需要用到的接口文档为knife4j,所以首先向pom.xml中添加依赖
  <!-- knife4j 接口文档工具 -->
<dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
            <version>3.0.3</version>
        </dependency>
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-springdoc-ui</artifactId>
            <version>3.0.3</version>
        </dependency>
2.在工程目录下创建config.knife4jConfig
package com.zlt.config;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2

public class knife4jConfig{

    @Bean
    public Docket defaultApi2() {
        Docket docket=new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(new ApiInfoBuilder()
                        //.title("swagger-bootstrap-ui-demo RESTful APIs")
                        .description("实战接口文档")
                        .termsOfServiceUrl("http://www.xx.com/")
                        .contact(new Contact("lee", "http://www.zlt.com/", "abc@imooc.com"))
                        .version("1.0")
                        .build())
                //分组名称
                .groupName("2.X版本")
                .select()
                //这里指定Controller扫描包路径
                .apis(RequestHandlerSelectors.basePackage("com.zlt.controller"))
                .paths(PathSelectors.any())
                .build();
        return docket;
    }
}

3.在com.zlt.dao文件包中创建UserInfoDao类,实现以上接口需求
package com.zlt.dao;

import com.zlt.entity.UserInfo;//引入依赖:alt+enter
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;


@Mapper
public interface UserInfoDao {

    //SELECT * FROM userinfo WHERE phone = ''

    //告诉mybatis框架执行这个SQL,执行结果会作为该方法的返回值
    @Select("SELECT * FROM userinfo WHERE phone = #{phone}")
    public UserInfo findUserInfoByPhone(String phone);

    @Insert("insert into userinfo(username,phone,password,houseId) values(#{username},#{phone},#{password},#{houseId})")
    public int addUser(UserInfo userInfo);

    @Select("select * from userinfo where phone = #{phone} and password = #{password}")
    public UserInfo findUser(String phone,String password);

}

4.建立接口需求的类后,就下来就要实现这些类。在com.zlt.controller文件包DoorController类中添加以下代码

@RequestMapping(value="reg",method=RequestMethod.POST)
    @ApiOperation("用户注册")
    public String reg(UserInfo userInfo) {
       int result= userInfoDao.addUser(userInfo);
       if(result==1)
          {return "注册成功";}
       else{
           return "注册成功";
       }
     }

    @RequestMapping(value="login",method=RequestMethod.POST)
    @ApiOperation("用户登录")
    public String login(String phone,String password) {

        UserInfo userInfo=userInfoDao.findUser(phone,password);
       if(userInfo!=null)
       {return "登录成功";}
       else {
           return "登录失败";
       }
    }

    @RequestMapping(value="getKeys",method=RequestMethod.GET)
    @ApiOperation("根据用户手机号,获取用户房产信息")
    public String findKeys(String phone) {

        UserInfo userInfo=userInfoDao.findUserInfoByPhone(phone);
        if(userInfo!=null)
        {
            return userInfo.getHouseId();
        }
        return null;
    }

}

到此就可以点开接口文档地址查看接口功能

接口文档地址:Knife4j 接口文档

未完待续......

小结

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值