提升插入效率5倍!:MyBatis结合ON DUPLICATE KEY实现高性能UPSERT

第一章:提升插入效率5倍!MyBatis结合ON DUPLICATE KEY实现高性能UPSERT

在高并发数据写入场景中,频繁的“先查后插或更新”操作会导致数据库性能急剧下降。使用 MySQL 的 `ON DUPLICATE KEY UPDATE`(又称 UPSERT)语句,配合 MyBatis 框架,可将插入效率提升 5 倍以上,同时避免唯一键冲突异常。

核心 SQL 实现

MySQL 提供的 `INSERT ... ON DUPLICATE KEY UPDATE` 能在遇到唯一索引冲突时自动转为更新操作,避免额外查询。以下是一个典型的应用示例:

<insert id="upsertUser" parameterType="User">
  INSERT INTO user_info (id, name, email, update_time)
  VALUES (#{id}, #{name}, #{email}, NOW())
  ON DUPLICATE KEY UPDATE
    name = #{name},
    email = #{email},
    update_time = NOW()
</insert>
上述 MyBatis 映射语句直接嵌入原生 SQL,当插入记录的主键或唯一索引已存在时,自动执行更新字段操作,无需应用层判断。

使用优势与适用场景

  • 减少数据库往返次数,由“查 + 插/更”合并为单条语句
  • 避免乐观锁或分布式锁带来的复杂性
  • 适用于用户行为日志、缓存同步、配置表更新等高频写入场景

性能对比参考

写入方式10万条数据耗时(ms)CPU 平均占用
传统先查后插入1240078%
MyBatis + ON DUPLICATE KEY236041%
通过合理设计表结构并确保存在唯一约束,该方案能显著降低数据库负载,提升系统吞吐能力。建议在批量数据同步和实时写入服务中优先采用。

第二章:ON DUPLICATE KEY UPDATE 核心机制解析

2.1 MySQL中UPSERT语义与唯一键约束基础

在MySQL中,UPSERT(Update or Insert)是一种根据记录是否存在来决定更新或插入的操作。该语义依赖于**唯一键约束**(Unique Key Constraint)来判断数据是否已存在。
唯一键的作用
唯一键确保列或列组合的值在整个表中不重复,是实现UPSERT逻辑的前提。当尝试插入重复唯一键值时,数据库将抛出冲突,触发替代操作。
使用 INSERT ... ON DUPLICATE KEY UPDATE
MySQL通过扩展语法支持原生UPSERT行为:
INSERT INTO users (id, name, score) 
VALUES (1, 'Alice', 100) 
ON DUPLICATE KEY UPDATE score = score + 100;
上述语句尝试插入新用户,若id已存在,则将score增加100。其中,id 必须是主键或具有唯一约束。
字段说明
id主键,用于触发唯一性检查
name普通字段,插入时赋值
score更新表达式中的目标字段

2.2 ON DUPLICATE KEY UPDATE 执行流程深入剖析

执行机制解析
`ON DUPLICATE KEY UPDATE` 是 MySQL 特有的语法,用于在 INSERT 语句执行时遇到唯一键冲突时,自动转为更新操作。其核心在于避免因主键或唯一索引重复导致的插入失败。
典型应用场景
该语句常用于数据同步、计数器更新等幂等性要求高的场景。例如:
INSERT INTO user_stats (user_id, login_count) 
VALUES (1001, 1) 
ON DUPLICATE KEY UPDATE login_count = login_count + 1;
上述语句尝试插入新记录,若 `user_id` 已存在,则将 `login_count` 原有值加一。这种“插入或更新”模式显著提升了并发写入效率。
底层执行流程
MySQL 在执行时首先尝试插入,若检测到唯一键冲突,则内部转换为 UPDATE 操作,并触发相应的更新逻辑,包括字段赋值、触发器调用及日志记录。整个过程在单条语句内原子完成,无需额外事务控制。

2.3 批量插入场景下的SQL生成原理与优化策略

在处理大量数据写入时,批量插入是提升数据库性能的关键手段。其核心在于减少网络往返次数和事务开销。
SQL生成原理
批量插入通常通过单条 INSERT 语句附加多行值实现:
INSERT INTO users (id, name, email) VALUES 
(1, 'Alice', 'alice@example.com'),
(2, 'Bob', 'bob@example.com'),
(3, 'Charlie', 'charlie@example.com');
该方式将多条记录合并为一次SQL传输,显著降低解析与执行开销。数据库仅需一次语法分析和执行计划生成。
优化策略
  • 控制批次大小:建议每批500~1000条,避免锁表和内存溢出
  • 禁用自动提交,显式管理事务以提升吞吐
  • 使用预编译语句防止SQL注入并提高执行效率
结合连接池与异步写入,可进一步提升整体吞吐能力。

2.4 MyBatis如何适配多值插入与冲突处理

在实际开发中,批量插入数据并处理主键或唯一索引冲突是常见需求。MyBatis 通过动态 SQL 和数据库特性结合,实现高效的多值插入与冲突策略控制。
使用 foreach 实现多值插入
<insert id="batchInsert">
  INSERT INTO user (id, name, email) VALUES
  <foreach collection="list" item="item" separator=",">
    (#{item.id}, #{item.name}, #{item.email})
  </foreach>
</insert>
该语句利用 <foreach> 遍历传入的集合,生成多组值插入语句,显著提升插入效率。
MySQL 的 ON DUPLICATE KEY UPDATE 处理冲突
<insert id="upsert">
  INSERT INTO user (id, name, email) VALUES
  <foreach collection="list" item="item" separator=",">
    (#{item.id}, #{item.name}, #{item.email})
  </foreach>
  ON DUPLICATE KEY UPDATE
    name = VALUES(name), email = VALUES(email)
</insert>
当发生主键或唯一索引冲突时,自动执行更新操作,实现“存在即更新,否则插入”的语义。

2.5 性能瓶颈分析:单条执行 vs 批量合并的对比

在数据密集型应用中,数据库操作的执行方式对系统性能有显著影响。单条执行指逐条提交SQL语句,而批量合并则是将多个操作合并为一组统一处理。
执行模式对比
  • 单条执行:每次操作都发起一次数据库往返,网络延迟和事务开销累积明显。
  • 批量合并:减少通信次数,充分利用数据库的批处理优化机制,显著提升吞吐量。
性能数据示例
操作数量单条执行耗时(ms)批量合并耗时(ms)
1,0001,200120
10,00012,500680
代码实现对比
// 单条执行
for _, user := range users {
    db.Exec("INSERT INTO users(name) VALUES(?)", user.Name)
}

// 批量合并
values := []interface{}{}
for _, user := range users {
    values = append(values, user.Name)
}
query := "INSERT INTO users(name) VALUES " + strings.Repeat("(?),", len(values)-1) + "(?)"
db.Exec(query, values...)
批量方式通过构造参数化SQL一次性插入,避免重复解析与计划生成,降低锁竞争和日志写入频率。

第三章:MyBatis批量插入实践准备

3.1 数据库表结构设计与唯一索引定义

合理的表结构设计是数据库性能与数据一致性的基础。在设计阶段,应根据业务实体抽象出核心字段,并明确主键、外键关系。
字段类型与约束规范
优先选择语义明确且空间利用率高的数据类型。例如用户ID使用 BIGINT UNSIGNED,状态字段采用 TINYINT 配合枚举注释。
唯一索引的定义策略
为防止重复数据插入,需在关键字段上建立唯一索引。例如在用户邮箱注册场景中:
CREATE TABLE users (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  email VARCHAR(255) NOT NULL,
  username VARCHAR(50) NOT NULL,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
  UNIQUE INDEX uk_email (email)
);
上述语句中,UNIQUE INDEX uk_email 确保邮箱全局唯一,避免重复注册。索引名采用前缀 uk_ 明确标识其为唯一索引,提升可维护性。

3.2 MyBatis映射文件配置与参数封装技巧

映射文件基础结构
MyBatis 的映射文件通过 XML 定义 SQL 操作,核心元素包括 <select>、<insert>、<update> 和 <delete>。每个语句需指定唯一 ID 与参数类型。
<select id="selectUserById" parameterType="int" resultType="User">
    SELECT * FROM users WHERE id = #{id}
</select>
上述代码中,#{id} 是预编译占位符,防止 SQL 注入;parameterType 声明输入参数为整型,resultType 指定返回结果映射为 User 实体类。
参数封装高级用法
当方法需要多个参数时,MyBatis 默认将其封装为 Map,键名为 param1、param2 或使用 @Param 注解自定义命名。
  • 使用 @Param("userId") 可在 SQL 中直接引用 #{userId}
  • 传递 JavaBean 对象时,可通过 #{property} 访问其属性
  • 支持 Map 类型参数,灵活处理动态字段

3.3 开启批处理模式:ExecutorType.BATCH 的正确使用方式

在 MyBatis 中,通过设置 `ExecutorType.BATCH` 可显著提升批量数据操作的性能。该模式下,MyBatis 会将多条相似 SQL 语句合并为批处理任务,减少与数据库的通信次数。
启用 BATCH 执行器
创建 SqlSession 时需显式指定执行器类型:
SqlSession session = sqlSessionFactory.openSession(ExecutorType.BATCH);
此方式确保所有操作均以批处理形式提交,适用于大批量插入或更新场景。
事务管理与提交时机
批处理模式下,必须手动控制事务提交,否则数据不会持久化。建议累积一定数量后调用 flushStatements() 清空批处理缓存:
if (i % 500 == 0) {
    session.flushStatements();
}
该机制避免内存溢出,同时保证高效的数据吞吐。
适用场景对比
场景推荐执行器
单条增删改查ExecutorType.SIMPLE
批量插入/更新ExecutorType.BATCH

第四章:高性能UPSERT实现全流程实战

4.1 构建支持ON DUPLICATE KEY的动态SQL模板

在处理高频数据写入场景时,INSERT ... ON DUPLICATE KEY UPDATE 是保障数据一致性的关键机制。为提升灵活性,需构建可动态生成字段与更新逻辑的SQL模板。
动态字段映射
通过反射或元数据解析目标结构体,自动生成插入列与值占位符:

func buildInsertFields(data map[string]interface{}) (string, []interface{}) {
    var columns, values []string
    var args []interface{}
    for k, v := range data {
        columns = append(columns, k)
        values = append(values, "?")
        args = append(args, v)
    }
    sql := fmt.Sprintf("INSERT INTO table (%s) VALUES (%s)",
        strings.Join(columns, ","), strings.Join(values, ","))
    return sql, args
}
该函数提取键值对生成标准插入语句,后续拼接 ON DUPLICATE KEY UPDATE 子句即可实现UPSERT语义。
冲突处理策略注入
使用
  • 定义更新行为:
  • IGNORE:保留原记录
  • REPLACE:覆盖为新值
  • ACCUMULATE:数值型字段累加
  • 最终SQL形如:
    
    INSERT INTO user_stats (id, views) VALUES (1, 10)
    ON DUPLICATE KEY UPDATE views = views + VALUES(views);
    

    4.2 多记录批量插入的Java Service层逻辑编写

    在处理大批量数据插入时,Service层需兼顾性能与事务控制。采用批量操作可显著减少数据库交互次数,提升吞吐量。
    核心实现策略
    通过Spring的`JdbcTemplate`或MyBatis结合`foreach`标签实现批量插入,推荐使用分批提交机制避免内存溢出。
    
    @Service
    public class UserService {
        @Autowired
        private JdbcTemplate jdbcTemplate;
    
        public void batchInsert(List<User> users) {
            String sql = "INSERT INTO user (name, age) VALUES (?, ?)";
            List<Object[]> batchArgs = users.stream()
                .map(u -> new Object[]{u.getName(), u.getAge()})
                .collect(Collectors.toList());
    
            jdbcTemplate.batchUpdate(sql, batchArgs);
        }
    }
    
    上述代码将用户列表转换为参数数组集合,调用`batchUpdate`执行批量操作。每批次建议控制在500~1000条以内,以平衡执行效率与事务开销。
    异常处理与事务管理
    使用`@Transactional`注解确保操作原子性,配合`BatchUpdateException`捕获部分失败场景,实现精细化错误控制。

    4.3 冲突数据更新字段的精准控制与业务逻辑融合

    在分布式系统中,多节点并发写入常引发数据冲突。为实现更新字段的精准控制,需结合乐观锁与版本号机制,确保关键字段按业务优先级更新。
    基于版本号的更新控制
    // 更新用户余额,仅当版本号匹配时生效
    func UpdateBalance(userID int, amount float64, version int) error {
        result := db.Exec(
            "UPDATE accounts SET balance = ?, version = version + 1 WHERE user_id = ? AND version = ?",
            amount, userID, version)
        if result.RowsAffected() == 0 {
            return errors.New("data conflict: version mismatch")
        }
        return nil
    }
    
    该代码通过 SQL 的 WHERE version = ? 条件实现乐观锁,防止旧版本数据覆盖最新状态,保障字段更新的原子性与一致性。
    业务逻辑融合策略
    • 识别核心字段(如余额、库存),强制串行化更新
    • 非核心字段采用“最后写入胜出”或合并策略
    • 通过事件驱动机制触发后续业务校验

    4.4 实际压测结果:吞吐量与响应时间对比验证

    在高并发场景下,对系统进行压力测试是验证其性能表现的关键环节。本次测试采用 JMeter 模拟 1000 并发用户持续请求,记录不同负载下的吞吐量(Throughput)与平均响应时间(Avg Response Time)。
    压测数据汇总
    并发用户数吞吐量 (req/sec)平均响应时间 (ms)错误率
    5002,3402120.2%
    10002,4104100.5%
    关键代码片段分析
    func BenchmarkHandleRequest(b *testing.B) {
        for i := 0; i < b.N; i++ {
            resp, _ := http.Get("http://localhost:8080/api/data")
            io.ReadAll(resp.Body)
            resp.Body.Close()
        }
    }
    
    该基准测试代码模拟重复请求,b.N 由 Go 运行时自动调整以完成指定性能评估周期。通过 go test -bench=. 可输出函数级吞吐能力,辅助定位瓶颈模块。

    第五章:总结与展望

    技术演进的持续驱动
    现代软件架构正加速向云原生演进,微服务、Serverless 与边缘计算的融合成为主流趋势。企业级系统需具备跨平台部署能力,Kubernetes 已成为事实上的编排标准。
    • 服务网格(如 Istio)提升流量管理精细化程度
    • OpenTelemetry 统一观测性数据采集,实现全链路追踪
    • GitOps 模式推动 CI/CD 向声明式流水线转型
    代码实践中的优化策略
    在高并发场景下,合理使用连接池与异步处理机制可显著提升系统吞吐量。以下为 Go 语言中基于 database/sql 的连接池配置示例:
    // 设置最大空闲连接数
    db.SetMaxIdleConns(10)
    // 设置最大打开连接数
    db.SetMaxOpenConns(100)
    // 设置连接最大存活时间
    db.SetConnMaxLifetime(time.Hour)
    // 实际查询调用保持不变
    rows, err := db.Query("SELECT name FROM users WHERE id = ?", userID)
    
    未来架构的关键方向
    技术领域当前挑战发展趋势
    数据一致性分布式事务开销大事件溯源 + CQRS 模式普及
    安全防护零信任落地复杂自动化策略生成与动态授权
    资源调度异构硬件支持不足AI 驱动的智能调度器
    单体架构 微服务 Service Mesh AI-Native
MyBatis批量更新性能优化:四种方案原理、选型与实战避坑指南 在数据库操作中,批量更新是提升数据处理效率的关键技术,尤其在面对大量数据同步、状态批量变更等场景时,其性能直接影响系统吞吐量。其核心原理在于减少应用与数据库之间的网络往返次数,并利用数据库自身的批处理优化机制。从技术价值看,有效的批量更新能显著降低数据库连接压力、缩短事务时间,是后端性能优化的重要环节。常见应用场景包括后台管理系统的批量审核、订单物流状态批量更新以及数据清洗校正等。本文聚焦于MyBatis框架下的批量更新实现,深入解析了foreach动态SQL、Batch执行器、ON DUPLICATE K 阅读详情

相关推荐

从JDBC到MyBatis:持久层技术演进与SQL注入防护实战

在Java企业级开发中,数据库持久层技术是构建稳定应用的核心基础。JDBC作为Java连接数据库的标准接口,提供了最底层的数据库操作能力,但其样板代码多、资源管理繁琐、手动映射易错等痛点影响了开发效率。为了解决这些问题,ORM框架应运而生,通过对象关系映射将数据库表与Java对象关联,实现了SQL与业务代码的解耦。MyBatis作为一款半自动ORM框架,在保留SQL灵活性的同时,通过Mapper接口与XML配置实现了参数安全映射和动态SQL,显著提升了开发效率和代码可维护性。特别是在安全层面,MyBatis

weixin_30266885的博客 600

MySQL 8.0 ON DUPLICATE KEY UPDATE 批量更新:3种MyBatis写法与性能实测

本文详细解析了MySQL 8.0中`ON DUPLICATE KEY UPDATE`语法在MyBatis中的三种实现方式,包括单条记录处理、批量VALUES写法和批量#{参数}写法,并通过性能实测对比了它们的效率。文章还提供了生产实践中的注意事项和高级技巧,帮助开发者优化批量数据插入与更新操作,提升数据库性能。

weixin_30768881的博客 343

MyBatis-Plus批量更新实战:CASE WHEN解决不同ID不同值更新难题

在数据库操作中,批量更新是提升数据处理效率的关键技术,尤其在高并发后台管理系统和数据处理平台中应用广泛。其核心原理是通过减少数据库交互次数,将多条更新操作合并优化,从而显著降低网络I/O和事务开销,提升系统吞吐量。从技术价值看,高效的批量更新能直接优化应用性能,是处理大量数据同步、状态批量变更等场景的工程实践要点。针对MyBatis-Plus框架,虽然其内置的updateBatchById方法适用于相同模板的批量操作,但在需要根据不同ID更新不同字段值的灵活场景下存在局限。此时,结合SQL的CASE WHE

weixin_34218579的博客 413

关于在MySQL中实现upsert操作

关于在MySQL中实现upsert操作该操作的实现原理是通过判断插入的记录里是否存在主键冲突来决定是插入还是更新,当出现主键冲突时则进行更新操作(使用 ON DUPLICATE KEY UPDATE 语句后面的参数),若无冲突则进行插入操作。INSERT INTO t_pro_gift ( _id, name, age ) VALUES

abfunnyboy的博客 1万+

MLC-LLM框架在安卓设备上的模型编译与部署全流程解析

本文详细解析了如何利用MLC-LLM框架在安卓设备上编译与部署大语言模型。从环境搭建、模型获取与量化编译,到最终的安卓应用打包与调试,提供了完整的实战流程。重点介绍了如何通过MLC-LLM将大型模型优化为适合移动端运行的格式,实现本地、低延迟、隐私安全的AI应用部署。

weixin_29251337的博客 475

物理机centos7系统重启后直接进入dracut

Warning: /dev/centos/root does not exist Warning: /dev/mapper/centos-root does not exist 在shell命令行执行以下: dracut:/# lvm vgscan dracut:/# lvm vgchange -ay dracut:/# exit 之后可以正常进入系统(测试正常)。 但是重启之后依然会进入dracut模式,永久解决如下: 查看kernel文件 [root@ecs ~]# ls -ltrh /boot

魏志标的博客 1万+

【MySQL+MyBatis深度优化】:利用ON DUPLICATE KEY实现高效批量 Upsert 操作

解决MySQL批量插入更新难题,本文详解MyBatis批量插入ON DUPLICATE KEY实现方案,适用于高频数据同步场景。通过SQL优化与Mapper配置提升性能,避免重复查询,显著降低数据库压力。掌握高效Upsert技巧,值得收藏。

LogicNest的博客 930

PCB阻焊工艺全解析:从油墨选择到显影测试的完整指南

本文深入解析PCB阻焊工艺全流程,从材料科学角度对比液态光成像(LPI)油墨、干膜阻焊等核心材料特性,系统阐述前处理、涂覆、预烤曝光、显影固化等关键步骤的工艺要点与参数控制。重点探讨了如何通过优化油墨选择与工艺参数,解决常见缺陷,提升PCB的可靠性、美观度及可制造性,为工程师提供从理论到产线实战的完整指南。

s3t4u的博客 553

【MyBatis批量插入性能飞跃】:掌握ON DUPLICATE KEY UPDATE的5大核心技巧

提升MyBatis批量插入效率?掌握ON DUPLICATE KEY UPDATE的5大技巧,解决唯一键冲突场景下的数据 Upsert 需求。涵盖SQL优化、参数映射、性能调优等核心方法,显著提升数据库写入速度与稳定性,值得收藏。

VarChat的博客 926

硬件原理图:从软件思维到硬件接口的嵌入式开发破局指南

本文为软件开发者提供了读懂硬件原理图的嵌入式开发破局指南。文章将硬件原理图类比为“硬件系统的架构图”,引导读者将软件API调用思维迁移到硬件接口理解上,详细解析了电阻、电容、二极管等常见元器件的“硬件API”功能与选型逻辑,并通过实战电路拆解,阐述了从原理图分析到驱动代码编写的完整思维链条,帮助开发者建立软硬件协同的系统级视角。

lg888的博客 495

西门子SMART PLC增量式PID(完整梯形图FC)

西门子PLC自带的PID指令是基于位置型的PID,位置型PID的算法公式和详细介绍,大家可以参看《PID专栏》的其它文章,这里不再赘述。本篇博文直接给出代码部分的讲解,不设计太多公式和理论的推导。限于本人能力,文中难免出现错误和不足之处,诚恳欢迎大家的批评和指正。同时感谢大家的订阅和关注。SMART200 PLC系统自带的PID指令解析,可以参看下面这篇文章:SMART PLC PID算法基本解析(附公式)_RXXW_Dor的博客-优快云博客_plc的pid算法在态运行中,控制器调节输出值,使偏差 (e

RXXW_Dor的博客 8147

MyBatis批量Upsert终极方案:ON DUPLICATE KEY结合动态SQL的高级应用

解决MyBatis批量插入冲突难题,本文深入讲解ON DUPLICATE KEY结合动态SQL的高级应用,适用于高并发数据写入场景。通过灵活的SQL构造实现高效Upsert操作,提升性能与稳定性,避免重复查询,开发效率倍增,值得收藏。

VarFlow的博客 729

52、Power BI Desktop 数据筛选全攻略

本文全面介绍了Power BI Desktop中各类数据筛选功能的使用方法,涵盖布尔型数据筛选、高级文本筛选、Top N筛选、可视化级别、页面级别和报告级别筛选等核心操作。通过详细步骤、流程图和实际案例,帮助用户深入理解筛选器的层级关系与综合应用技巧,并提供常见问题解决方案,助力高效精准的数据分析与可视化展示。

linux6sysadmin的博客 110

【MyBatis批量插入性能优化】:掌握ON DUPLICATE KEY UPDATE的5大高效写法

掌握MyBatis批量插入性能优化核心技巧,详解ON DUPLICATE KEY UPDATE的5种高效写法,适用于高并发数据入库场景。解决主键冲突、提升插入效率,支持MySQL批量处理与动态SQL构建,显著降低数据库负载。实战方案值得收藏。

ProceSeed的博客 293

【RT-DETR有效改进】轻量级网络ShuffleNetV2(附代码+修改教程)

从今天开始正式开始更新RT-DETR剑指论文专栏,本专栏的内容会迅速铺开,在短期呢大量更新,价格也会乘阶梯性上涨,所以想要和我一起学习RT-DETR改进,可以在前期直接关注,本文专栏旨在打造全网最好的RT-DETR专栏为想要发论文的家进行服务。RT-DETR剑指论文专栏,持续复现各种顶会内容——论文收割机RT-DETR​​。

Snu77的博客 1994

Ubuntu系统等保3级配置核查与加固

虽然这种方法在某些老旧的系统中仍然有效,但现代Linux发行版通常不推荐使用hosts.deny和hosts.allow文件来管理防火墙规则,因为它们的功能已经被更现代的防火墙管理工具(如iptables或firewalld)所取代。如果你想禁止特定的环境变量,可以从这个列表中移除它们,或者如果你想完全阻止所有环境变量的传递,可以将其设置为空。你可以通过ssh-keygen生成密钥对,并将公钥添加到用户的~/.ssh/authorized_keys文件中。修改配置后,需要重启SSH服务以使更改生效。

悦分享 183

批量插入总是失败?你必须知道的MyBatis ON DUPLICATE KEY 3种正确用法

解决MyBatis批量插入冲突难题,掌握ON DUPLICATE KEY UPDATE的3种高效用法。适用于MySQL数据库下数据去重更新场景,支持动态字段更新与性能优化,避免主键冲突导致的插入失败。实用方案值得收藏。

BytePerch的博客 714

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

表数据冲突频发?,一文搞懂MyBatis中ON DUPLICATE KEY的正确使用姿势

解决数据冲突难题,掌握MyBatis批量插入ON DUPLICATE KEY正确用法。适用于唯一键冲突场景,通过SQL语句实现插入更新一体化,提升性能与数据一致性。结合实战示例解析核心配置与注意事项,值得收藏。

BreakVein的博客 325

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

【资深架构师经验分享】:高并发下MyBatis批量插入数据冲突的终极应对策略

解决高并发下数据冲突难题,深入解析MyBatis批量插入ON DUPLICATE KEY实现方案。适用于订单、日志等高频写入场景,结合数据库特性提升性能与一致性。高效、稳定、避免主键冲突,值得收藏。

CompiWander的博客 426

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

MYSQL批量UPDATE的两种方式

建议使用方式一,或者其优化方式(JDBC批处理)。各位也可以与AI对话看看给出的建议是什么。有问题一定要留言啊各位。及时发现及时改错。

2611_94926613的博客 244

MyBatis-Plus批量操作性能优化:从saveBatch陷阱到高效数据导入实战

在数据库操作中,批量处理是提升数据写入性能的核心技术,其原理在于通过减少网络往返次数和数据库事务开销来优化IO效率。JDBC的批处理机制与SQL的VALUES合并语法是实现批量操作的两大底层技术,它们能显著降低系统负载,尤其适用于数据同步、报表生成和业务日志入库等高吞吐场景。然而,在实际工程中,若未正确配置事务或执行器,框架提供的便捷方法(如MyBatis-Plus的saveBatch)可能退化为逐条操作,引发严重的性能瓶颈。本文聚焦于批量插入与存在即更新(upsert)这两个高频热词,深入剖析常见陷阱,并

weixin_30394981的博客 504
上一篇: 你真的会用@ManyToMany吗?级联删除背后的持久化机制全曝光
下一篇: 从源码看Files.mismatch()行为:偏移计算机制与跨平台兼容性问题
ByteGlow
博客等级 码龄1年 149粉丝 1998原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值