mybatis数据输入-实体类型的参数
1、建库建表
CREATE DATABASE `mybatis-example`;USE `mybatis-example`;CREATE TABLE `t_emp`(emp_id INT AUTO_INCREMENT,emp_name CHAR(100),emp_salary DOUBLE(10,5),PRIMARY KEY(emp_id) );INSERT INTO `t_emp`(emp_name,emp_salary) VALUES("tom",200.33); INSERT INTO `t_emp`(emp_name,emp_salary) VALUES("jerry",666.66); INSERT INTO `t_emp`(emp_name,emp_salary) VALUES("andy",777.77);2、pom.xml
<dependencies><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId></dependency><!-- MySQL驱动 mybatis底层依赖jdbc驱动实现,本次不需要导入连接池,mybatis自带! --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--junit5测试--><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies>3、Employee.java(pojo)
package com.atguigu.mybatis.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor public class Employee {private Integer empId;private String empName;private Double empSalary; }4、EmpMapper.java
package com.atguigu.mybatis.mapper; import com.atguigu.mybatis.pojo.Employee; public interface EmpMapper {void addEmp(Employee employee);}5、mybatis-config.xml(mybatis的总配置文件)
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><!-- environments表示配置Mybatis的开发环境,可以配置多个环境,在众多具体环境中,使用default属性指定实际运行时使用的环境。default属性的取值是environment标签的id属性的值。 --><environments default="development"><!-- environment表示配置Mybatis的一个具体的环境 --><environment id="development"><!-- Mybatis的内置的事务管理器 --><transactionManager type="JDBC"/><!-- 配置数据源 --><dataSource type="POOLED"><!-- 建立数据库连接的具体信息 --><property name="driver" value="com.mysql.cj.jdbc.Driver"/><property name="url" value="jdbc:mysql://localhost:3306/mybatis-example"/><property name="username" value="root"/><property name="password" value="123456"/></dataSource></environment></environments><mappers><!-- Mapper注册:指定Mybatis映射文件的具体位置 --><!-- mapper标签:配置一个具体的Mapper映射文件 --><!-- resource属性:指定Mapper映射文件的实际存储位置,这里需要使用一个以类路径根目录为基准的相对路径 --><!-- 对Maven工程的目录结构来说,resources目录下的内容会直接放入类路径,所以这里我们可以以resources目录为基准 --><mapper resource="mapper/EmpMapper.xml"/></mappers></configuration>6、EmpMapper.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace等于mapper接口类的全限定名,这样实现对应 --> <mapper namespace="com.atguigu.mybatis.mapper.EmpMapper"><!-- 查询使用 select标签id = 方法名resultType = 返回值类型标签内编写SQL语句--><!--演示数据类型--><!--单个实体类型作为输入参数--><insert id="addEmp"><!--此处的empName和empSalary不能随便写,必须是参数中的属性名称-->insert into t_emp values(0,#{empName},#{empSalary})<!--Preparing: insert into t_emp values(0,?,?)--></insert> </mapper>7、MybatisTest3.java
package com.atguigu.mybatis; import com.atguigu.mybatis.mapper.EmpMapper; import com.atguigu.mybatis.pojo.Employee; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.io.IOException; import java.io.InputStream; public class MybatisTest3 {SqlSessionFactory sqlSessionFactory;SqlSession sqlSession;EmpMapper empMapper;@BeforeEachpublic void setup() throws IOException {// 获取资源流,读取"mybatis-config.xml"文件InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");// 使用资源流创建SqlSessionFactorysqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);// 使用SqlSessionFactory打开一个SessionsqlSession = sqlSessionFactory.openSession();// 使用Session获取EmpMapper的Mapper对象empMapper = sqlSession.getMapper(EmpMapper.class);}// 在每个测试用例之后执行的清理方法@AfterEachpublic void teardown() {sqlSession.commit(); // 提交事务sqlSession.close(); // 关闭SqlSession}@Testpublic void addEmpTest() {Employee employee = new Employee(0, "鸠摩智", 8080.0);empMapper.addEmp(employee);} }8、logback
D:\Java\jdk-17\bin\java.exe -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar=54009:D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\bin" -Dfile.encoding=UTF-8 -classpath "D:\develop\maven\repository\org\junit\platform\junit-platform-launcher\1.3.1\junit-platform-launcher-1.3.1.jar;D:\develop\maven\repository\org\apiguardian\apiguardian-api\1.0.0\apiguardian-api-1.0.0.jar;D:\develop\maven\repository\org\junit\platform\junit-platform-engine\1.3.1\junit-platform-engine-1.3.1.jar;D:\develop\maven\repository\org\junit\platform\junit-platform-commons\1.3.1\junit-platform-commons-1.3.1.jar;D:\develop\maven\repository\org\opentest4j\opentest4j\1.1.1\opentest4j-1.1.1.jar;D:\develop\maven\repository\org\junit\jupiter\junit-jupiter-engine\5.3.1\junit-jupiter-engine-5.3.1.jar;D:\develop\maven\repository\org\junit\jupiter\junit-jupiter-api\5.3.1\junit-jupiter-api-5.3.1.jar;D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\lib\idea_rt.jar;D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\plugins\junit\lib\junit5-rt.jar;D:\BaiduNetdiskDownload\IntelliJ IDEA 2023.2\plugins\junit\lib\junit-rt.jar;F:\IdeaProjects\workspace\pro-ssm\pro18-mybatis-begin\target\test-classes;F:\IdeaProjects\workspace\pro-ssm\pro18-mybatis-begin\target\classes;F:\my_java\maven_repository\org\mybatis\mybatis\3.5.11\mybatis-3.5.11.jar;F:\my_java\maven_repository\mysql\mysql-connector-java\8.0.25\mysql-connector-java-8.0.25.jar;F:\my_java\maven_repository\com\google\protobuf\protobuf-java\3.11.4\protobuf-java-3.11.4.jar;F:\my_java\maven_repository\org\junit\jupiter\junit-jupiter-api\5.3.1\junit-jupiter-api-5.3.1.jar;F:\my_java\maven_repository\org\apiguardian\apiguardian-api\1.0.0\apiguardian-api-1.0.0.jar;F:\my_java\maven_repository\org\opentest4j\opentest4j\1.1.1\opentest4j-1.1.1.jar;F:\my_java\maven_repository\org\junit\platform\junit-platform-commons\1.3.1\junit-platform-commons-1.3.1.jar;F:\my_java\maven_repository\org\projectlombok\lombok\1.18.20\lombok-1.18.20.jar;F:\my_java\maven_repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;F:\my_java\maven_repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;F:\my_java\maven_repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar" com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit5 com.atguigu.mybatis.MybatisTest3,addEmpTest 09:51:08,942 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml] 09:51:08,943 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy] 09:51:08,943 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/F:/IdeaProjects/workspace/pro-ssm/pro18-mybatis-begin/target/classes/logback.xml] 09:51:09,020 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender] 09:51:09,023 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [STDOUT] 09:51:09,029 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property 09:51:09,058 |-INFO in ch.qos.logback.classic.joran.action.RootLoggerAction - Setting level of ROOT logger to DEBUG 09:51:09,058 |-INFO in ch.qos.logback.core.joran.action.AppenderRefAction - Attaching appender named [STDOUT] to Logger[ROOT] 09:51:09,060 |-INFO in ch.qos.logback.classic.joran.action.LoggerAction - Setting level of logger [com.atguigu.mybatis] to DEBUG 09:51:09,060 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration. 09:51:09,061 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@3d1cfad4 - Registering current configuration as safe fallback point [09:51:09.067] [DEBUG] [main] [org.apache.ibatis.logging.LogFactory] [Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.] [09:51:09.085] [DEBUG] [main] [org.apache.ibatis.datasource.pooled.PooledDataSource] [PooledDataSource forcefully closed/removed all connections.] [09:51:09.085] [DEBUG] [main] [org.apache.ibatis.datasource.pooled.PooledDataSource] [PooledDataSource forcefully closed/removed all connections.] [09:51:09.085] [DEBUG] [main] [org.apache.ibatis.datasource.pooled.PooledDataSource] [PooledDataSource forcefully closed/removed all connections.] [09:51:09.085] [DEBUG] [main] [org.apache.ibatis.datasource.pooled.PooledDataSource] [PooledDataSource forcefully closed/removed all connections.] [09:51:09.168] [DEBUG] [main] [org.apache.ibatis.transaction.jdbc.JdbcTransaction] [Opening JDBC Connection] [09:51:09.674] [DEBUG] [main] [org.apache.ibatis.datasource.pooled.PooledDataSource] [Created connection 494953170.] [09:51:09.675] [DEBUG] [main] [org.apache.ibatis.transaction.jdbc.JdbcTransaction] [Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@1d8062d2]] [09:51:09.679] [DEBUG] [main] [com.atguigu.mybatis.mapper.EmpMapper.addEmp] [==> Preparing: insert into t_emp values(0,?,?)] [09:51:09.723] [DEBUG] [main] [com.atguigu.mybatis.mapper.EmpMapper.addEmp] [==> Parameters: 鸠摩智(String), 8080.0(Double)] [09:51:09.726] [DEBUG] [main] [com.atguigu.mybatis.mapper.EmpMapper.addEmp] [<== Updates: 1] [09:51:09.730] [DEBUG] [main] [org.apache.ibatis.transaction.jdbc.JdbcTransaction] [Committing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@1d8062d2]] [09:51:09.733] [DEBUG] [main] [org.apache.ibatis.transaction.jdbc.JdbcTransaction] [Resetting autocommit to true on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@1d8062d2]] [09:51:09.736] [DEBUG] [main] [org.apache.ibatis.transaction.jdbc.JdbcTransaction] [Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@1d8062d2]] [09:51:09.736] [DEBUG] [main] [org.apache.ibatis.datasource.pooled.PooledDataSource] [Returned connection 494953170 to pool.]Process finished with exit code 0
9、<transactionManager type="JDBC"/>
在MyBatis的配置文件中,
<transactionManager type="JDBC"/>元素用于指定使用JDBC事务管理器来管理数据库事务。JDBC事务管理器通过JDBC连接进行事务管理,它支持普通的数据库连接事务。当使用JDBC事务管理器时,MyBatis将使用JDBC的提交和回滚来控制事务的提交和回滚。
在MyBatis的配置文件中,使用
<transactionManager>元素可以指定使用不同的事务管理器。除了JDBC事务管理器,MyBatis还支持其他的的事务管理器,例如Spring事务管理器。使用
<transactionManager type="JDBC"/>元素告诉MyBatis在事务管理方面使用JDBC事务管理器,而不是其他的事务管理器。这对于与数据库交互的Java应用程序非常有用,因为它们通常使用JDBC连接来执行数据库操作。
在 MyBatis 中,<transactionManager type="JDBC"/> 用于指定事务管理器的类型是 JDBC,也就是采用 JDBC 的方式来管理事务。
JDBC 事务管理器是 MyBatis 默认的事务管理器类型,它会在每个 SQL 会话中使用 JDBC 的自动提交(auto-commit)特性来实现事务的提交和回滚。也就是说,当一个 SQL 语句执行成功时,它会自动提交事务,如果执行失败,则会自动回滚事务。
需要注意的是,如果我们想要对事务进行更加细粒度的控制,比如手动提交或回滚事务,那么就需要使用其他类型的事务管理器,比如 JTA 或 Spring 管理的事务管理器。
相关文章:
mybatis数据输入-实体类型的参数
1、建库建表 CREATE DATABASE mybatis-example;USE mybatis-example;CREATE TABLE t_emp(emp_id INT AUTO_INCREMENT,emp_name CHAR(100),emp_salary DOUBLE(10,5),PRIMARY KEY(emp_id) );INSERT INTO t_emp(emp_name,emp_salary) VALUES("tom",200.33); INSERT INTO…...
Java-接口
目录 定义 格式 使用 接口中成员的特点 成员变量 构造方法 成员方法 JDK8新特性:可以定义有方法体的方法 默认方法 作用 定义格式 注意事项 静态方法 定义格式 注意事项 JDK9新特性:可以定义私有方法 私有方法的定义格式 接口和接口之…...
mysql常用命令行代码
连接到 MySQL 服务器: mysql -u your_username -p替换 your_username 为你的 MySQL 用户名。系统会提示你输入密码。 退出 MySQL 命令行: EXIT;或者按 Ctrl D。 显示所有数据库: SHOW DATABASES;选择数据库: USE your_database…...
Python压缩、解压文件
#!/usr/bin/python3 # -*- coding:utf-8 -*- """ author: JHC file: util_compress.py time: 2023/5/28 14:58 desc: rarfile 使用需要安装 rarfile 和 unrar 并且将 unrar.exe 复制到venv/Scrpits目录下 (从WinRar安装目录下白嫖的) 下载…...
面试就是这么简单,offer拿到手软(一)—— 常见非技术问题回答思路
面试系列: 面试就是这么简单,offer拿到手软(一)—— 常见非技术问题回答思路 面试就是这么简单,offer拿到手软(二)—— 常见65道非技术面试问题 文章目录 一、前言二、常见面试问题回答思路问…...
134. 加油站(贪心算法)
根据题解 这道题使用贪心算法,找到当前可解决问题的状态即可 「贪心算法」的问题需要满足的条件: 最优子结构:规模较大的问题的解由规模较小的子问题的解组成,规模较大的问题的解只由其中一个规模较小的子问题的解决定ÿ…...
Springboot3+vue3从0到1开发实战项目(二)
前面完成了注册功能这次就来写登录功能, 还是按照这个方式来 明确需求: 登录接口 前置工作 : 想象一下登录界面(随便在百度上找一张) 看前端的能力咋样了, 现在我们不管后端看要什么参数就好 阅读接口文档…...
Spring中Bean的生命周期
1.生命周期 Spring应用中容器管理了我们每一个bean的生命周期,为了保证系统的可扩展性,同时为用户提供自定义的能力,Spring提供了大量的扩展点。完整的Spring生命周期如下图所示,绿色背景的节点是ApplictionContext生命周期特有的…...
IndexOutOfBoundsException: Index: 2048, Size: 2048] Controller接收对象集合长度超过2048错误
完整异常信息: org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [spring] in context with path [/jsgc] threw exception [Request processing failed; nested exception is org.springframework.beans.InvalidPropertyExce…...
2023年中国消费金融行业研究报告
第一章 行业概况 1.1 定义 中国消费金融行业,作为国家金融体系的重要组成部分,旨在为消费者提供多样化的金融产品和服务,以满足其消费需求。这一行业包括银行、消费金融公司、小额贷款公司等多种金融机构,涵盖了包括消费贷款在内…...
深度学习:什么是知识蒸馏(Knowledge Distillation)
1 概况 1.1 定义 知识蒸馏(Knowledge Distillation)是一种深度学习技术,旨在将一个复杂模型(通常称为“教师模型”)的知识转移到一个更简单、更小的模型(称为“学生模型”)中。这一技术由Hint…...
【Go】protobuf介绍及安装
目录 一、Protobuf介绍 1.Protobuf用来做什么 2. Protobuf的序列化与反序列化 3. Protobuf的优点和缺点 4. RPC介绍 <1>文档规范 <2>消息编码 <3>传输协议 <4>传输性能 <5>传输形式 <6>浏览器的支持度 <7>消息的可读性和…...
c语言编程题经典100例——(41~45例)
1,实现动态内存分配。 在C语言中,动态内存分配使用malloc、calloc、realloc和free函数。以下是一个示例: #include <stdio.h> #include <stdlib.h> int main() { int *ptr NULL; // 初始化为空 int n 5; // 假设我们想要分配5个整数…...
计算机毕业设计|基于SpringBoot+MyBatis框架健身房管理系统的设计与实现
计算机毕业设计|基于SpringBootMyBatis框架的健身房管理系统的设计与实现 摘 要:本文基于Spring Boot和MyBatis框架,设计并实现了一款综合功能强大的健身房管理系统。该系统涵盖了会员卡查询、会员管理、员工管理、器材管理以及课程管理等核心功能,并且…...
java学习part27线程死锁
基本就是操作系统的内容 138-多线程-线程安全的懒汉式_死锁_ReentrantLock的使用_哔哩哔哩_bilibili...
(二)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
一、无人机模型简介: 单个无人机三维路径规划问题及其建模_IT猿手的博客-CSDN博客 参考文献: [1]胡观凯,钟建华,李永正,黎万洪.基于IPSO-GA算法的无人机三维路径规划[J].现代电子技术,2023,46(07):115-120 二、Tiki-taka算法(TTA…...
区间预测 | Matlab实现BP-KDE的BP神经网络结合核密度估计多变量时序区间预测
区间预测 | Matlab实现BP-KDE的BP神经网络结合核密度估计多变量时序区间预测 目录 区间预测 | Matlab实现BP-KDE的BP神经网络结合核密度估计多变量时序区间预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.BP-KDE多变量时间序列区间预测,基于BP神经网络多…...
LD_PRELOAD劫持、ngixn临时文件、无需临时文件rce
LD_PRELOAD劫持 <1> LD_PRELOAD简介 LD_PRELOAD 是linux下的一个环境变量。用于动态链接库的加载,在动态链接库的过程中他的优先级是最高的。类似于 .user.ini 中的 auto_prepend_file,那么我们就可以在自己定义的动态链接库中装入恶意函数。 也…...
循环神经网络训练情感分析
文章目录 1 循环神经网络训练情感分析2 完整代码3 代码详解 1 循环神经网络训练情感分析 下面介绍如何使用长短记忆模型(LSTM)处理情感分类LSTM模型是循环神经网络的一种,按照时间顺序,把信息进行有效的整合,有的信息…...
如何绕过某讯手游保护系统并从内存中获取Unity3D引擎的Dll文件
某讯的手游保护系统用的都是一套,在其官宣的手游加固功能中有一项宣传是对比较热门的Unity3d引擎的手游保护方案,其中对Dll文件的保护介绍如下, “Dll加固混淆针对Unity游戏,对Dll模块的变量名、函数名、类名进行加密混淆处理&…...
2025届毕业生推荐的六大AI学术方案解析与推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 不能让文章有明显人工智能生成的迹象,得从好些方面着手。用词处,别用…...
旧Mac焕新:使用OpenCore Legacy Patcher让2008-2017年设备支持最新macOS系统
旧Mac焕新:使用OpenCore Legacy Patcher让2008-2017年设备支持最新macOS系统 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 老旧设备升级正成为越…...
Qwen2.5-VL-7B-Instruct新手必看:无需网络,纯本地部署的多模态AI工具
Qwen2.5-VL-7B-Instruct新手必看:无需网络,纯本地部署的多模态AI工具 你是不是经常遇到这样的场景:看到一张复杂的图表,想快速提取里面的数据;收到一张产品照片,需要生成详细的描述文案;或者想…...
智能型碧蓝航线自动化助手:AzurLaneAutoScript全方位游戏管理方案
智能型碧蓝航线自动化助手:AzurLaneAutoScript全方位游戏管理方案 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript …...
数仓分层设计避坑指南:从ODS到ADS,我的团队踩过的5个典型雷区与优化方案
数仓分层设计避坑指南:从ODS到ADS,我的团队踩过的5个典型雷区与优化方案 三年前接手公司数据中台重构项目时,我们团队曾天真地认为数仓分层不过是教科书式的流程化操作。直到某次大促期间,凌晨三点被警报吵醒——ADS层报表查询超时…...
成本优化实战:gemma-3-12b-it本地部署为OpenClaw节省40%Token
成本优化实战:gemma-3-12b-it本地部署为OpenClaw节省40%Token 1. 为什么我要做这次优化 上个月我统计OpenClaw的账单时,发现一个惊人的现象:我的自动化助手每天要消耗近3万Token。最夸张的是,其中70%的Token都花在了"鼠标移…...
Qwen2.5-14B-Instruct部署优化:像素剧本圣殿FlashAttention-2加速实测
Qwen2.5-14B-Instruct部署优化:像素剧本圣殿FlashAttention-2加速实测 1. 项目背景与优化目标 像素剧本圣殿是一款基于Qwen2.5-14B-Instruct深度微调的专业剧本创作工具。这款工具将AI推理能力与8-Bit复古美学相结合,为创作者提供沉浸式的剧本开发体验…...
Unity性能优化终极利器:MeshFusion Pro
在现代游戏开发中,性能优化始终是一个核心问题。尤其是在大型场景或高复杂度模型的项目中,Draw Call 过多、顶点数量庞大以及实时生成对象都会严重拖慢游戏帧率,影响用户体验。为了应对这些挑战,Unity 开发者社区中出现了大量优化…...
OpenClaw替代方案:Qwen2.5-VL-7B与其他自动化工具对比
OpenClaw替代方案:Qwen2.5-VL-7B与其他自动化工具对比 1. 自动化工具选型的核心考量 当我们需要选择一款自动化工具时,通常会面临几个关键问题:这个工具能否理解我的需求?它能在我的设备上安全运行吗?它是否足够灵活…...
基于stm32的公司考勤系统[单片机]-计算机毕业设计源码+LW文档
摘要:本文设计了一款基于STM32单片机的公司考勤系统,详细阐述了其硬件组成和软件算法。该系统利用RFID(或指纹识别等)技术进行员工身份识别,结合实时时钟模块记录考勤时间,并通过OLED显示屏实时显示考勤信息…...
