当前位置: 首页 > article >正文

数据库访问工具 dbVisitor v6.0.0 发布

dbVisitor 是一款轻量小巧、功能完备的 Java 数据库 ORM 工具,它的前身是 HasorDB,历经 8 年迭代后正式更名为 dbVisitor 并开始独立发展4。以下是关于 dbVisitor v6.0.0 发布的相关信息:

发布说明

在 Maven Central 上可查询到 dbVisitor 相关模块的最新版本为 6.0.1,其中包含 dbVisitor - spring - starter、dbVisitor - solon - plugin 等多个模块,均基于 Apache Software License 2.0 开源,且经 OSS Index 检测无漏洞。

功能特性

  • 全面的功能支持:提供对象映射、丰富的类型处理、动态 SQL、存储过程、内置分页方言 20 多种、支持嵌套事务、多数据源、条件构造器、INSERT 策略、多语句 / 多结果等功能。支持 5 个事务隔离级别、7 个事务传播行为(与 Spring tx 相同),支持分页查询以及多种数据库方言,还支持 JDBC 4.2 和 Java 8 中的时间类型。
  • 框架兼容性好:不依赖任何其他框架,可方便地与任意框架整合使用,兼容 Spring JdbcTemplate 和 MyBatis 映射文件,支持单表 ActiveRecord 方式,能让开发者以熟悉的方式进行数据库操作。
  • 独特的扩展机制:提供独特的 <代码开始>@{xxx, expr, xxxxx }< 代码结束 > 规则扩展机制,让动态 SQL 更加简单。

dbVisitor v6.0.0 的发布,为 Java 开发者提供了一个更高效、更灵活的数据库访问工具,有助于提升数据库操作的效率和代码的可维护性。

dbVisitor 作为一款数据库 ORM 工具,INSERT 策略通常是为了更灵活地处理数据插入场景而设计的。不过,关于 dbVisitor 具体有几种 INSERT 策略,官方文档或公开资料可能未广泛提及。下面为你推测一些常见的 INSERT 策略类型:

1. 全量插入策略

在这种策略下,会将实体对象中的所有属性值插入到数据库表对应的列中。即使某些属性值为 null,也会插入 null 到数据库。比如你有一个 User 实体,包含 idnameage 等属性,使用全量插入策略时,会将这些属性对应的值全部插入到数据库表的 user 表中。示例代码可能如下(假设为伪代码):

java

User user = new User();
user.setId(1);
user.setName("John");
user.setAge(25);
// 全量插入
dbVisitor.insert(user);

2. 非空插入策略

该策略只插入实体对象中值不为 null 的属性。这样可以避免向数据库插入不必要的 null 值。还是以 User 实体为例,如果 age 属性为 null,那么插入时只会将 id 和 name 对应的值插入到数据库表中。示例如下:

java

User user = new User();
user.setId(1);
user.setName("John");
// 非空插入
dbVisitor.insertNotNull(user);

3. 忽略已有主键插入策略

当插入数据时,如果数据库表中已经存在相同主键的数据,这种策略会忽略此次插入操作,避免主键冲突错误。例如:

java

User user = new User();
user.setId(1);
user.setName("John");
// 忽略已有主键插入
dbVisitor.insertIgnoreDuplicate(user);

4. 存在则更新,不存在则插入策略(Upsert)

若数据库表中已存在相同主键的数据,就更新该条数据;若不存在,则执行插入操作。示例代码如下:

java

User user = new User();
user.setId(1);
user.setName("John");
// 存在则更新,不存在则插入
dbVisitor.upsert(user);

要确切知晓 dbVisitor v6.0.0 的 INSERT 策略种类,你可以查阅 dbVisitor 的官方文档、API 参考或者源代码。

相关文章:

数据库访问工具 dbVisitor v6.0.0 发布

dbVisitor 是一款轻量小巧、功能完备的 Java 数据库 ORM 工具&#xff0c;它的前身是 HasorDB&#xff0c;历经 8 年迭代后正式更名为 dbVisitor 并开始独立发展4。以下是关于 dbVisitor v6.0.0 发布的相关信息&#xff1a; 发布说明 在 Maven Central 上可查询到 dbVisitor …...

01背包问题详解 具体样例模拟版

01背包 有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。 第 i 件物品的体积是 v i v_i vi​&#xff0c;价值是 w i w_i wi​。 求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。 输出最大价值。 输入格式 …...

网络初识 - Java

网络发展史&#xff1a; 单机时代&#xff08;独立模式&#xff09; -> 局域网时代 -> 广域网时代 -> 移动互联网时代 网络互联&#xff1a;将多台计算机链接再一起&#xff0c;完成数据共享。 数据共享的本质是网络数据传输&#xff0c;即计算机之间通过网络来传输数…...

zk基础—5.Curator的使用与剖析一

大纲 1.基于Curator进行基本的zk数据操作 2.基于Curator实现集群元数据管理 3.基于Curator实现HA主备自动切换 4.基于Curator实现Leader选举 5.基于Curator实现分布式Barrier 6.基于Curator实现分布式计数器 7.基于Curator实现zk的节点和子节点监听机制 8.基于Curator创…...

大模型快速 ASGI 服务器uvicorn

基础概念类 1. 什么是 Uvicorn&#xff0c;它的作用是什么&#xff1f; 答案&#xff1a;Uvicorn 是一个基于 Python 的快速 ASGI&#xff08;异步服务器网关接口&#xff09;服务器。它的主要作用是作为 Web 应用程序的服务器&#xff0c;负责接收客户端的请求&#xff0c;并…...

每日一题(小白)回溯篇4

深度优先搜索题&#xff1a;找到最长的路径&#xff0c;计算这样的路径有多少条&#xff08;使用回溯&#xff09; 分析题意可以得知&#xff0c;每次向前后左右走一步&#xff0c;直至走完16步就算一条走通路径。要求条件是不能超出4*4的范围&#xff0c;不能重复之前的路径。…...

消息队列基础概念及选型,常见解决方案包括消息可靠性、消息有序、消息堆积、重复消费、事务消息

前言 是时候总结下消息队列相关知识点啦&#xff01;我搓搓搓搓 本文包括消息队列基础概念介绍&#xff0c;常见解决方案包括消息可靠性、消息有序、消息堆积、重复消费、事务消息 参考资料&#xff1a; Kafka常见问题总结 | JavaGuide RocketMQ常见问题总结 | JavaGuide …...

基于STM32与应变片的协作机械臂力反馈控制系统设计与实现---3.3 机械结构改装

3.3 机械臂结构改装设计与实施 一、改装需求分析 1.1 改装类型分级 改装级别涉及范围典型改动周期成本I级(小型)末端执行器工具快换装置1-3天$500-2000II级(中型)关节模块电机/减速器升级1-2周$2000-8000III级(大型)本体结构材质/拓扑优化1-3月$8000+1.2 关键参数变更评…...

k8s进阶之路:本地集群环境搭建

概述 文章将带领大家搭建一个 master 节点&#xff0c;两个 node 节点的 k8s 集群&#xff0c;容器基于 docker&#xff0c;k8s 版本 v1.32。 一、系统安装 安装之前请大家使用虚拟机将 ubuntu24.04 系统安装完毕&#xff0c;我是基于 mac m1 的系统进行安装的&#xff0c;所…...

云服务器实战:用 Nginx 搭建高性能 API 网关与反向代理服务(附完整配置流程)

在如今的 Web 系统架构中&#xff0c;“接口统一出口”已成为必备设计模式——无论是前后端分离、微服务架构&#xff0c;还是多端接入&#xff08;Web、小程序、App&#xff09;&#xff0c;一个稳定、高性能、可扩展的 API 网关至关重要。 而 Nginx&#xff0c;作为轻量级高…...

C++ STL 详解 ——list 的深度解析与实践指南

在 C 的标准模板库&#xff08;STL&#xff09;中&#xff0c;list作为一种重要的序列式容器&#xff0c;以其独特的双向链表结构和丰富的操作功能&#xff0c;在许多编程场景下发挥着关键作用。深入理解list的特性与使用方法&#xff0c;能帮助开发者编写出更高效、灵活的代码…...

按键切换LCD显示后,显示总在第二阶段,而不在第一阶段的问题

这是一个密码锁的程序&#xff0c;当在输入密码后&#xff0c;原本是要重置密码&#xff0c;但是程序总是在输入密码正确后总是跳转置设置第二个密码&#xff0c;而第一个密码总是跳过。 不断修改后&#xff0c; 解决方法 将if语句换成switch语句&#xff0c;这样就可以分离程序…...

护网蓝初面试题

《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇网安资料库https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39…...

C++11: 智能指针

C11: 智能指针 &#xff08;一&#xff09;智能指针原理1.RAll2.智能指针 (二)C11 智能指针1. auto_ptr2. unique_ptr3. shared_ptr4. weak_ptr &#xff08;三&#xff09;shared_ptr中存在的问题std::shared_ptr的循环引用 &#xff08;四&#xff09;删除器&#xff08;五&a…...

去中心化预测市场

去中心化预测市场 核心概念 预测市场类型&#xff1a; 类别型市场&#xff1a;二元结果&#xff08;YES/NO&#xff09;&#xff0c;例如“BTC在2024年突破10万美元&#xff1f;” 多选型市场&#xff1a;多个选项&#xff08;如总统候选人&#xff09;&#xff0c;赔付基于…...

从零实现本地大模型RAG部署

1. RAG概念 RAG&#xff08;Retrieval-Augmented Generation&#xff09;即检索增强生成&#xff0c;是一种结合信息检索与大型语言模型&#xff08;大模型&#xff09;的技术。从外部知识库&#xff08;如文档、数据库或网页&#xff09;中实时检索相关信息&#xff0c;并将其…...

使用 Python 连接 PostgreSQL 数据库,从 `mimic - III` 数据库中筛选数据并导出特定的数据图表

要使用 Python 连接 PostgreSQL 数据库&#xff0c;从 mimic - III 数据库中筛选数据并导出特定的数据图表&#xff0c;你可以按照以下步骤操作&#xff1a; 安装所需的库&#xff1a;psycopg2 用于连接 PostgreSQL 数据库&#xff0c;pandas 用于数据处理&#xff0c;matplot…...

【Linux系统篇】:探索文件系统原理--硬件磁盘、文件系统与链接的“三体宇宙”

✨感谢您阅读本篇文章&#xff0c;文章内容是个人学习笔记的整理&#xff0c;如果哪里有误的话还请您指正噢✨ ✨ 个人主页&#xff1a;余辉zmh–CSDN博客 ✨ 文章所属专栏&#xff1a;Linux篇–CSDN博客 文章目录 一.认识硬件--磁盘物理存储结构1.存储介质类型2.物理存储单元3…...

Tracing the thoughts of a large language model 简单理解

Tracing the thoughts of a large language model 这篇论文通过电路追踪方法(Circuit Tracing)揭示了大型语言模型Claude 3.5 Haiku的内部机制,其核心原理可归纳为以下几个方面: 1. 方法论核心:归因图与替换模型 替换模型(Replacement Model) 使用跨层转码器(CLT)将原…...

OpenCV边缘检测技术详解:原理、实现与应用

概述 边缘检测是计算机视觉和图像处理中最基本也是最重要的技术之一&#xff0c;它通过检测图像中亮度或颜色急剧变化的区域来识别物体的边界。边缘通常对应着场景中物体的物理边界、表面方向的变化或深度不连续处。 分类 OpenCV提供了多种边缘检测算法&#xff0c;下面我们介…...

Java学习——day22(Java反射基础入门)

文章目录 1.反射的定义2. 认识反射的关键API2.1 Class2.2 Field2.3 Method2.4 Constructor 3. 示例代码讲解与分析4. 编写反射示例代码的步骤4.1 定义测试类4.2 编写主程序&#xff0c;使用反射获取信息4.3 通过反射创建对象并调用方法 5. 总结6.今日生词 Java反射笔记 1.反射的…...

BN 层做预测的时候, 方差均值怎么算

✅ 一、Batch Normalization&#xff08;BN&#xff09;回顾 BN 层在训练和推理阶段的行为是不一样的&#xff0c;核心区别就在于&#xff1a; 训练时用 mini-batch 里的均值方差&#xff0c;预测时用全局的“滑动平均”均值方差。 &#x1f9ea; 二、训练阶段&#xff08;Trai…...

JS 其他事件类型

页面加载 事件 window.addEvent() window.addEventListener(load,function(){const btn document.querySelector(button)btn.addEventListener(click,function(){alert(按钮)})})也可以给其他标签加该事件 HTML加载事件 找html标签 也可以给页面直接赋值...

AI Agent设计模式五:Orchestrator

概念 &#xff1a;中央任务调度中枢 ✅ 优点&#xff1a;全局资源协调&#xff0c;确保任务执行顺序❌ 缺点&#xff1a;单点故障风险&#xff0c;可能成为性能瓶颈 import operator import osfrom langchain.schema import SystemMessage, HumanMessage from langchain_opena…...

在Hive中,将数据从一个表查询并插入到另一个表

1. 确认目标表结构 确保目标表已存在且结构与查询结果匹配。若不存在&#xff0c;需先创建&#xff1a; CREATE TABLE target_table ( id INT, name STRING ) PARTITIONED BY (dt STRING) STORED AS ORC; 2. 选择插入方式 覆盖插入&#xff08;替换现有数据&#xff0…...

Android Fresco 框架缓存模块源码深度剖析(二)

Android Fresco 框架缓存模块源码深度剖析 一、引言 本人掘金号&#xff0c;欢迎点击关注&#xff1a;https://juejin.cn/user/4406498335701950 在 Android 应用开发中&#xff0c;图片加载和处理是常见且重要的功能。频繁的图片加载不仅会消耗大量的网络流量&#xff0c;还…...

MySQL基础 [三] - 数据类型

目录 数据类型分类 ​编辑 数值类型 tinyint bit 浮点类型 float decimal 字符串类型 char varchar varchar和char的比较和选择 日期和时间类型 enum和set enum类型 set类型 enum和set的类型查找 数据类型分类 数值类型 tinyint TINYINT[(M)] [UNSIGNED]是 …...

不用训练,集成多个大模型产生更优秀的输出

论文标题 Collab: Controlled Decoding using Mixture of Agents for LLM Alignment 论文地址 https://arxiv.org/pdf/2503.21720 作者背景 JP摩根&#xff0c;马里兰大学帕克分校&#xff0c;普林斯顿大学 动机 大模型对齐&#xff08;alignment&#xff09;的主要目的…...

随笔1 认识编译命令

1.认识编译命令 1.1 解释gcc编译命令: gcc test1.cpp -o test1 pkg-config --cflags --libs opencv 命令解析&#xff1a; gcc&#xff1a;GNU C/C 编译器&#xff0c;用于编译C/C代码。 test1.cpp&#xff1a;源代码文件。 -o test1&#xff1a;指定输出的可执行文件名为t…...

【数据结构】并查集应用

修改数组 题目&#xff1a;检查ai是否出现过&#xff0c;出现过就不断1&#xff0c;使成为第一个没有出现过的。这样得到一个不重复数组。 祖先是该数字能使用的最小数字&#xff0c;当使用完后&#xff0c;祖先把这个格子占了&#xff0c;下次再来&#xff0c;就得使用后一个…...