Spring boot+mybatis


前言

由于这次Arduino实验需要spring boot框架,所以记录一下项目搭建过程


一、Spring boot是什么?

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的创建、运行、调试、部署等。使用Spring Boot可以做到专注于Spring应用的开发,而无需过多关注XML的配置。Spring Boot使用“习惯优于配置”的理念,简单来说,它提供了一堆依赖打包,并已经按照使用习惯解决了依赖问题。使用Spring Boot可以不用或者只需要很少的Spring配置就可以让企业项目快速运行起来。

Spring Boot是开发者和Spring 本身框架的中间层,帮助开发者统筹管理应用的配置,提供基于实际开发中常见配置的默认处理(即习惯优于配置),简化应用的开发,简化应用的运维;总的来说,其目的Spring Boot就是为了对Java web 的开发进行“简化”和加“快”速度,简化开发过程中引入或启动相关Spring 功能的配置。这样带来的好处就是降低开发人员对于框架的关注点,可以把更多的精力放在自己的业务代码上。

同时随着微服务概念的推广和实践,Spring Boot的精简理念又使其成为Java微服务开发的不二之选,也可以说,Spring Boot其实就是为了微服务而生的Java web框架。

先如今,Spring Boot已经在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

二、使用步骤

1.打开IDEA,新建项目

选择Spring boot,注意换成阿里云的源(https://start.aliyun.com/)选择maven类型,注意JDK,最好选择JDK17,老版本的一些依赖不支持
新建项目
如果是要下载JDK,可以在file的project structure里面下载JDK选项点+然后下载
JDK下载
下载完了之后继续上面步骤点next,注意选低版本的框架,然后添加web还有数据库的一下依赖,系统可以自己导入
步骤二
然后点产生,系统就新建好了

注意:可以采用系统的Maven,但是它是国外的,速度慢,可以设置setting.xml换成国内源,先找到路径
找路径
打开系统路径(里面是没有这个xml的),新建xml
系统文件
将下面代码直接复制进去

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository/>
  <interactiveMode/>
  <usePluginRegistry/>
  <offline/>
  <pluginGroups/>
  <servers/>
  <mirrors>
    <mirror>
     <id>aliyunmaven</id>
     <mirrorOf>central</mirrorOf>
     <name>阿里云公共仓库</name>
     <url>https://maven.aliyun.com/repository/central</url>
    </mirror>
    <mirror>
      <id>repo1</id>
      <mirrorOf>central</mirrorOf>
      <name>central repo</name>
      <url>http://repo1.maven.org/maven2/</url>
    </mirror>
    <mirror>
     <id>aliyunmaven</id>
     <mirrorOf>apache snapshots</mirrorOf>
     <name>阿里云阿帕奇仓库</name>
     <url>https://maven.aliyun.com/repository/apache-snapshots</url>
    </mirror>
  </mirrors>
  <proxies/>
  <activeProfiles/>
  <profiles>
    <profile>  
        <repositories>
           <repository>
                <id>aliyunmaven</id>
                <name>aliyunmaven</name>
                <url>https://maven.aliyun.com/repository/public</url>
                <layout>default</layout>
                <releases>
                        <enabled>true</enabled>
                </releases>
                <snapshots>
                        <enabled>true</enabled>
                </snapshots>
            </repository>
            <repository>
                <id>MavenCentral</id>
                <url>http://repo1.maven.org/maven2/</url>
            </repository>
            <repository>
                <id>aliyunmavenApache</id>
                <url>https://maven.aliyun.com/repository/apache-snapshots</url>
            </repository>
        </repositories>             
     </profile>
  </profiles>
</settings>

2.配置mybatis

打开application.properties,配置数据库即可:
配置新建映射xml
xml
将下面代码直接复制进去

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <!-- Globally enables or disables any caches configured in any mapper under this configuration -->
        <setting name="cacheEnabled" value="true"/>
        <!-- Sets the number of seconds the driver will wait for a response from the database -->
        <setting name="defaultStatementTimeout" value="3000"/>
        <!-- Enables automatic mapping from classic database column names A_COLUMN to camel case classic Java property names aColumn -->
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <!-- Allows JDBC support for generated keys. A compatible driver is required.
        This setting forces generated keys to be used if set to true,
         as some drivers deny compatibility but still work -->
        <setting name="useGeneratedKeys" value="true"/>
    </settings>
    <!-- Continue going here -->
</configuration>

新建Bean类,注意和数据库里面的名字要一模一样(不然有些数据操作会出现NULL的现象),生成get/set方法

package com.example.demo.mybatis.entry;

import java.sql.Timestamp;
import java.time.LocalDateTime;

public class SensorBean {
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }



    public Timestamp getDate() {
        return timestamp;
    }

    public void setDate(Timestamp date) {
        this.timestamp = date;
    }

    public double getTemperature() {
        return temperature;
    }

    public void setTemperature(double temperature) {
        this.temperature = temperature;
    }

    public double getHumidity() {
        return humidity;
    }

    public void setHumidity(double humidity) {
        this.humidity = humidity;
    }

    public Timestamp getTimestamp() {
        return timestamp;
    }

    public void setTimestamp(Timestamp timestamp) {
        this.timestamp = timestamp;
    }
    private int id;
    private Timestamp timestamp;

    private double temperature;
    private double humidity;
    @Override
    public String toString() {
        return "SensorBean{" +
                "id=" + id +
                ", date=" + timestamp +
                ", temperature=" + temperature +
                ", humidity=" + humidity +
                '}';
    }



}

写一个DAO类用来实现数据库操作的接口,用注解的方式实现数据库的操作(正规还是要用xml映射方法,但是这种比较简单好理解)

package com.example.demo.mybatis.dao;

import com.example.demo.mybatis.entry.SensorBean;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper
public interface SensorDao {
    @Select("select * from sensordata")
    List<SensorBean> getAllSensorData(); // 返回所有传感器数据

    @Insert("insert into sensordata(id,temperature,humidity,timestamp) values (#{id}, #{temperature}, #{humidity}, #{date})")
    void insertUser(SensorBean sensor);
}

写一个service层代码用来实现功能,例如将查询到结果存入链表里

package com.example.demo.mybatis.controller;
import com.example.demo.mybatis.dao.SensorDao;
import com.example.demo.mybatis.entry.SensorBean;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.stereotype.Service;

import java.util.LinkedList;
import java.util.List;
@Service
public class SensorServiceImpl {
    private final SqlSessionFactory sqlSessionFactory;

    public SensorServiceImpl(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    public LinkedList<SensorBean> fetchAndStoreSensorData() {
        try (SqlSession session = sqlSessionFactory.openSession()) {
            SensorDao sensorDao = session.getMapper(SensorDao.class);
            List<SensorBean> sensorDataList = sensorDao.getAllSensorData(); // 获取所有数据

            // 将查询结果转换为LinkedList(如果有必要的话,通常List已经足够使用)
            LinkedList<SensorBean> sensorDataLinkedList = new LinkedList<>(sensorDataList);

            return sensorDataLinkedList;
        }
    }
}

接下来写一个控制层程序用来实现功能,例如用来实现查询数据和插入数据

package com.example.demo.mybatis.controller;
import com.example.demo.mybatis.dao.SensorDao;
import com.example.demo.mybatis.entry.SensorBean;
import com.example.demo.mybatis.entry.UserBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.UUID;

@Controller
@RequestMapping(value = "/sensorbean")
public class SensorController {
    private final SensorServiceImpl sensorService;
    private final SensorDao sensorDao;

    @Autowired
    public SensorController(SensorServiceImpl sensorService, SensorDao sensorDao) {
        this.sensorService = sensorService;
        this.sensorDao = sensorDao;
    }

    @GetMapping("/getData")
    public ResponseEntity<List<SensorBean>> getData() {
        List<SensorBean> sensorBeans = sensorService.fetchAndStoreSensorData();
        return ResponseEntity.ok(sensorBeans);
    }

    public Response<List<SensorBean>> getAllSensorData() {
        List <SensorBean> sensorList =sensorDao.getAllSensorData();
        return Response.newSuccess(sensorList);
    }

    @PostMapping("/data")
    @ResponseBody
    public String receiveData(@RequestBody Map<String, Double> payload) {
        double humidity = payload.get("humidity");
        double temperature = payload.get("temperature");

        SensorBean sensor = new SensorBean();
        //user.setId(UUID.randomUUID().toString()); // 生成唯一ID
        sensor.setTemperature(temperature);
        sensor.setHumidity(humidity);
        // 获取当前日期和时间
        LocalDateTime currentDateTime = LocalDateTime.now();

        // 将日期和时间格式化为只到秒的精度
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String formattedDateTime = currentDateTime.format(formatter);

        // 将格式化后的日期和时间转换为 LocalDateTime(因为 Timestamp.valueOf 需要 LocalDateTime)
        LocalDateTime truncatedDateTime = LocalDateTime.parse(formattedDateTime, formatter);

        // 将 LocalDateTime 转换为 Timestamp
        Timestamp timestamp = Timestamp.valueOf(truncatedDateTime);

        // 设置给 sensor 对象
        sensor.setDate(timestamp);
        sensorDao.insertUser(sensor);
        // 构建响应消息
        String responseMessage = String.format("Received data - temperature: %s, humidity: %s,time:%s", temperature, humidity,timestamp);
       //SensorBean userBean = sensorDao.getUserById();
        // 返回包含接收到的数据的响应
        return responseMessage;
    }
    @ExceptionHandler(HttpMessageNotReadableException.class)
    public ResponseEntity<String> handleHttpMessageNotReadable(HttpMessageNotReadableException e) {
        // 记录日志或其他处理
        return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("Invalid request body");
    }
}


到这里差不多就配置完成了,运行项目(里面包含main的文件右击运行)
运行
注意:不能直接运行HTML文件,端口会错误,一定要手动输入地址,还有看代码里面的API接口地址是什么,例如现在查看数据库里面的数据
在这里插入图片描述

查看数据
数据库配置成功,现在可以开始你的项目


总结

以上就是简单的配置过程,本文仅仅简单介绍了项目框架配置,而如果是大型项目可能不适用。

  • 29
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值