概要
利用SpringBoot+myBatis技术以及uniapp框架,构建一个物联安防产品——智慧门禁系统。
开发所需环境:
2.IDEA 2022
2022IDEA的下载、安装、配置与使用_idea2022下载-优快云博客
3.mySQL服务器(PHPStudy),MySQL客户端
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.若以上步骤准确无误,运行代码后打开链接

当数据库里面的用户可以打开门后,我们就要考虑如何在网页上,对数据库进行查询,登录和用户注册,而不是直接对数据库进行操作。这时我们就要用到接口技术。
要使用接口技术,我们首先要想清楚接口所需要的功能。
(1)实现用户在APP端发送开门信息,后台管理系统接收到信息,验证之后 找门禁设备开门
实现步骤:
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;
}
}