登录
注册
开源
企业版
高校版
搜索
帮助中心
使用条款
关于我们
开源
企业版
高校版
私有云
模力方舟
AI 队友
登录
注册
Gitee 2025年度个人数据报告已发布,快来看看你的成长👉
代码拉取完成,页面将自动刷新
开源项目
>
数据库相关
>
数据库开发包
&&
捐赠
捐赠前请先登录
取消
前往登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
Watch
不关注
关注所有动态
仅关注版本发行动态
关注但不提醒动态
31
Star
368
Fork
82
阿库玛
/
dbvisitor
代码
Issues
3
Pull Requests
0
统计
流水线
服务
JavaDoc
质量分析
Jenkins for Gitee
腾讯云托管
腾讯云 Serverless
悬镜安全
阿里云 SAE
Codeblitz
SBOM
我知道了,不再自动展开
发行版
最新版
v6.7.0
d149374
2026-02-14 19:26
对比
v6.7.0
阿库玛
# v6.7.0 (2026-02-15) ```xml <dependency> <groupId>net.hasor</groupId> <artifactId>dbvisitor</artifactId> <version>6.7.0</version> </dependency> ``` ## 主要看点 1. 新增 `jdbc-milvus` 驱动模块和 `VectorSqlDialect` 接口,Lambda API 支持向量范围查询与排序查询,适配 PostgreSQL、Elastic7/8、Milvus 三类数据源。 2. 通过 `JulianDayTypeHandler`、`PgDateTypeHandler`、`PgVectorTypeHandler` 三个 TypeHandler,扩展日期与向量类型处理能力。[详细解读 →](https://www.dbvisitor.net/blog/v670-date-handling) 3. 新增 `queryForPairs` 方法,支持将查询结果两列直接映射为 `Map<K, V>`。[详细解读 →](https://www.dbvisitor.net/blog/v670-query-for-pairs) 4. 修复 `AbstractDialect.fmtName()` 标识符注入漏洞(Freedom 模式),统一所有方言的转义逻辑。 5. 贯通 `@Insert` 注解和 XML 映射器的 `useGeneratedKeys` 执行路径,主键可正确回填。 ## 影响范围 - dbvisitor 核心模块:TypeHandler 扩展、Fluent API(向量查询)、动态 SQL 引擎、分页、DAO 代理、安全性修复。 - dbvisitor-adapter 模块:新增 `jdbc-milvus` 驱动。 - dbvisitor-driver 模块:`JdbcResultSet` Array 类型兼容性增强。 - 方言系统(Dialect):新增 `Elastic8Dialect`、`VectorSqlDialect`;PostgreSQL 方言新增序列支持、SQL 生成修复、标识符转义安全加固。 - 集成模块:新增 Spring Boot 4 兼容示例。 ## 更新内容 - 新增 - 新增 `jdbc-milvus` 驱动模块,完成 Milvus 向量数据库适配(支持 DB/Index/Partition/Table 命令、DML 语句、Hint)。 - 新增 `Elastic8Dialect` 方言,支持 Elasticsearch 8.x。 - 新增 `VectorSqlDialect` 接口,Lambda API 支持向量范围查询和向量排序查询(适配 PostgreSQL、Elastic7/8、Milvus)。 - 新增 `QueryCompare`、`QueryFunc` 接口 6 种向量度量模式的细粒度向量查询支持。 - 新增 `JulianDayTypeHandler`,使用儒略日数统一存储公元前后日期,避免历法转换歧义。 - 新增 `PgDateTypeHandler`,利用 PostgreSQL 原生 BC 后缀格式处理公元前日期。 - 新增 `PgVectorTypeHandler`,处理 PostgreSQL pgvector 向量类型数据读写。[详细解读 →](https://www.dbvisitor.net/blog/v670-vector-type) - 新增 `GeneratedKeyHandler` 接口 `useGeneratedKeys` 方法。 - 新增 `QueryFunc` 接口 `queryForPairs`、`queryForPairsByName` 方法,将查询结果两列直接映射为 `Map<K, V>`。 - 新增 `JsonArrayList`、`JsonHashMap`、`JsonHashSet`、`JsonType` 四个类型,用于 `queryForObject` 查询 JSON 数据类型时的结构转换。 - 新增 Spring Boot 4 兼容示例工程。 - 优化 - 优化 `JdbcResultSet.getArray()` 方法,自动适配 `List`/`Set`/`Object[]`/`Primitive Array` 为 `java.sql.Array`。 - 优化 `#{field, typeHandler=...}` 对 null 值的处理,自动推断 JDBC 类型,无需显式指定 `jdbcType`。 - PostgreSQL 方言实现 `SeqSqlDialect` 接口,新增序列查询支持(`selectSeq`)。 - 修复 - 修复 `@Insert` 注解的 `useGeneratedKeys` 属性行为和 XML 映射器的 `useGeneratedKeys` 行为不一致问题。 - 修复 `queryForMap` 查询全 null 行时抛出 NPE 的问题。 - 修复 `@Table` 注解仅配置 `ddlAuto` 属性时无法被获取到的问题。 - 修复 `JdbcTemplate.loadSplitSQL()` 对注释开头的 SQL 片段被错误跳过的问题。 - 修复 `@BindTypeHandler` 注解的 Map 子类被误当作普通 Map 处理的问题。 - 修复 `ArrayTypeHandler` 对 PostgreSQL 空数组返回 null 的问题(补充内部类型名映射)。 - 修复 `apply()` 拼接原生 SQL 片段时缺少 AND/OR 连接符的问题。 - 修复 `PostgreSqlDialect` 的 `insertIgnore`(缺少 `INTO`)和 `insertReplace`(SET 子句无逗号)SQL 生成错误。 - 修复 `usePage()` 方法中分页偏移计算异常(调用顺序错误)。 - 修复 `<where>`/`<set>` 动态标签对大写前缀(`AND`/`OR`)剥离失败的问题。 - 修复 `@{and}`/`@{or}` 动态规则参数为 null 时条件未跳过的问题。 - 修复 `useGeneratedKeys` 生成的主键无法回填到参数 Map 的问题。 - 修复 DAO 代理接口方法查询为空时抛出 `IndexOutOfBoundsException` 的问题。 - 修复 `queryStatement` 底层返回 null 时被包装为 `[null]` 单元素列表的问题。 - 修复 `BaseMapper.insert()` 方法传入空集合时的处理逻辑。 - 修复 `ColumnMapping.getKeyTpe()` 方法名拼写错误,更正为 `getKeyType()`。 - 修复 `AbstractDialect.fmtName()` 标识符注入漏洞(Freedom 模式),统一转义逻辑到基类。
最后提交信息为:
[maven-release-plugin] prepare release v6.7.0
v6.6.0
855299e
2026-01-28 11:11
对比
v6.6.0
阿库玛
# v6.6.0 (2026-01-25) ```xml <dependency> <groupId>net.hasor</groupId> <artifactId>dbvisitor</artifactId> <version>6.6.0</version> </dependency> ``` ## 主要看点 1. 新增 规则允许嵌套其它规则使用。 2. 新增 规则文档,详细介绍了新增的 case/when/else 规则。 ## 影响范围 - dbvisitor 动态 SQL 规则引擎 (`@{and}`, `@{or}`, `@{in}`, `@{case}` 等),稳定性、安全性、灵活动态 SQL 表达式的能力得到提升。 ## 更新内容 - 新增 - 新增 case/when/else 规则用于实现更加灵活的分支选择。 - 新增 规则允许嵌套其它规则使用。 - 优化 - 优化 jdbc-elastic、jdbc-mongo、jdbc-redis 在链接获取时增加释放资源的防御性编程。 - 优化 `@{and}`, `@{or}` 等规则全面解除多值限制。解除后可以适应如 in 规则的嵌套。 - 修复 - 修复 `MD5Rule`,用于对参数进行 MD5 加密处理,不支持 `SqlArg` 类型参数的问题。 - 修复 `@{and}`, `@{or}` 的空值判断逻辑,现在当条件片段中引用的所有参数均为 `null` 时,该片段会自动正确丢弃(此前行为不一致)。 - 修复 如果动态表达式内部包含的字符串中含有右大括号 `}` (例如 `#{ '}' }`),解析器可能会错误地将其识别为表达式结束符。 - 这会导致后续的内容被直接拼接为 SQL 片段,在特定场景下可能引发 SQL 注入风险。 - 修复 在引号字符串或函数参数中包含逗号 `,` 时,解析器错误地将其识别为规则分隔符的问题(如 `@{rule, 'a,b'}` 曾被错误截断) - 修复 驱动适配器可能获取的属性列表不完全的问题。 - 文档 - 新增 规则文档,详细介绍了新增的 case/when/else 规则和 规则的使用方法。 - 重构了官网动态规则文档,增加了 `Rule` vs `XML` 的直观对比,并补充了高级规则的详细用法。
最后提交信息为:
[maven-release-plugin] prepare release v6.6.0
v6.5.0
f9dfc80
2026-01-15 22:13
对比
v6.5.0
阿库玛
# v6.5.0 (2026-01-15) ```xml <dependency> <groupId>net.hasor</groupId> <artifactId>dbvisitor</artifactId> <version>6.5.0</version> </dependency> ``` 本版本重点对底层的方言系统(Dialect)进行了架构重构,将 “方言元数据” 与 “命令构建能力”高度内聚,解决了旧架构中存在的抽象割裂问题。 ## 影响范围 - 方言系统(Dialect/Builder)及其继承体系 - 自定义方言扩展 API ## 更新内容 - 重构 - **方言即工厂**:引入 `newBuilder()` 工厂方法,`SqlDialect` 实现类现在负责生产对应的构建器实例。 - **原型模式应用**:Dialect 实现类具备双重身份,既作为无状态的元数据单例,也作为有状态的构建器原型。 - **类层级简化**:彻底移除了独立的 `SqlCommandBuilder`、`MongoCommandBuilder` 以及胶水类 `MongoBuilderDialect`。 - **继承体系重组**:如果逻辑下沉至 `AbstractSqlDialect`,形成了 `AbstractBuilderDialect` -> `AbstractSqlDialect` / `MongoDialect` 的清晰层级。 - 优化 - **API 统一**:上层调用不再需要根据数据库类型判断实例化哪个 Builder,统一使用 `dialect.newBuilder()`。 - **内聚性提升**:数据库特定的元数据(如关键字)与构建逻辑(如 SQL 生成)收敛在同一个方言类中。 - **类型安全**:消除了构建器与方言实例不匹配的运行时风险(如 `MongoBuilder` 误用 `MySqlDialect`)。 - 兼容性提示 - 本次重构对普通用户透明,API 保持向下兼容。 - **升级注意**:如果您实现了自定义 Dialect 并依赖了旧版 `SqlCommandBuilder`,请改为继承 `AbstractSqlDialect` 并重写 `newBuilder()` 方法。 ## 相关阅读 - [方言系统架构演进:从分离到统一](https://www.dbvisitor.net/blog/dbvisitor-dialect-refactoring)
最后提交信息为:
[maven-release-plugin] prepare release v6.5.0
v6.4.0
2469819
2026-01-05 13:24
对比
v6.4.0
阿库玛
```xml <dependency> <groupId>net.hasor</groupId> <artifactId>dbvisitor</artifactId> <version>6.4.0</version> </dependency> <dependency> <groupId>net.hasor</groupId> <artifactId>jdbc-elastic</artifactId> <version>6.4.0</version> </dependency> ``` ## 影响范围 - 新增 jdbc-elastic 驱动 及 Es6Dialect、Es7Dialect - dbvisitor-driver 连接管理机制 - jdbc-mongo 驱动稳定性 - TypeHandlerRegistry 类型匹配逻辑 ## 更新内容 - 新增 - 新增 `jdbc-elastic` 驱动,支持使用标准 JDBC 接口使用 QueryDSL 操作 ElasticSearch。 - `jdbc-elastic` 支持原生 REST API 风格命令(GET/POST/PUT/DELETE)及 SQL Hint 语法。 - `jdbc-elastic` 支持 `PreparedStatement` 占位符 `?`,支持 `Statement.RETURN_GENERATED_KEYS` 自动返回 `_id`。 - `jdbc-elastic` 支持 `LambdaTemplate` 和 Mapper 接口,提供类型安全的 CRUD 操作。 - `jdbc-elastic` 支持预读模式(Pre-read),有效处理大结果集,避免内存溢出。 - `SqlDialectRegister` 支持根据驱动提供的数据库版本选择更细粒度的方言实现。 - `jdbc-elastic` 支持 `indexRefresh` 参数,可在写入操作后自动刷新索引。 - 优化 - 优化 `TypeHandlerRegistry` 对抽象类型的匹配逻辑,提高类型处理器的查找准确性。 - 优化 MongoDB 和 Redis 在执行多条语句时的错误处理逻辑,确保单条语句失败能正确中断后续执行。 - 统一项目中的 `ObjectMapper` 对象使用,减少资源消耗。 - 修复 - 修复 `JdbcConnection` 在关闭时未触发 `AdapterConnection` 关闭导致连接泄漏的问题。 - 修复 `MongoResultBuffer` 潜在的文件句柄泄漏问题。 - 修复 MongoDB 在通过 Session 创建 Mapper 时无法自动发现方言的问题。 - 修复 `AdapterContainer` 在 `executeUpdate` 失败后状态未重置,导致后续查询报错的问题。 - 修复 `MongoConn` 和 `JedisConn` 中的响应处理逻辑缺陷。 ## ElasticSearch 如何使用? ```java title='使用 JdbcTemplate 执行命令' // 1. 获取 ElasticSearch 连接 Connection esConn = ...; // 参考文档:驱动适配器 > JDBC Elastic > 安装与配置 JdbcTemplate jdbc = new JdbcTemplate(esConn); // 2. 插入数据 jdbc.execute("POST /my_index/_doc/1 { \"name\": \"mali\", \"age\": 26 }"); // 3. 查询数据 List<Map<String, Object>> list = jdbc.queryForList( "POST /my_index/_search { \"query\": { \"match_all\": {} } }"); // 4. 更新数据 jdbc.execute("POST /my_index/_update/1 { \"doc\": { \"age\": 27 } }"); // 5. 删除数据 jdbc.execute("DELETE /my_index/_doc/1"); ``` ```java title='使用 Mapper 接口操作' // 1. 定义实体类 @Table("my_index") public class UserInfo { @Column(value = "uid", primary = true) private String uid; @Column("name") private String name; // getters and setters } // 2. 定义 Mapper 接口 @SimpleMapper public interface UserInfoMapper extends BaseMapper<UserInfo> { @Insert("POST /my_index/_doc { \"uid\": #{user.uid}, \"name\": #{user.name} }") int saveUser(@Param("user") UserInfo user); @Query("POST /my_index/_search { \"query\": { \"term\": { \"uid\": #{uid} } } }") UserInfo loadUser(@Param("uid") String uid); } // 3. 使用 Mapper try (Session session = config.newSession(esConn)) { UserInfoMapper mapper = session.createMapper(UserInfoMapper.class); // 保存 UserInfo user = new UserInfo(); user.setUid("1111"); user.setName("mali"); mapper.saveUser(user); // 查询 UserInfo loaded = mapper.loadUser("1111"); } ``` ```java title='使用 LambdaTemplate 操作' // 1. 获取 ElasticSearch 连接 LambdaTemplate lambda = new LambdaTemplate(esConn); // 2. 插入数据 UserInfo user = new UserInfo(); user.setUid("1001"); user.setName("test_user"); lambda.insert(user); // 3. 查询数据 UserInfo loaded = lambda.query(UserInfo.class) .eq(UserInfo::getUid, "1001") .queryForObject(); ```
最后提交信息为:
[maven-release-plugin] prepare release v6.4.0
v6.3.0
560ebb7
2025-12-09 14:38
对比
v6.3.0
阿库玛
```xml <dependency> <groupId>net.hasor</groupId> <artifactId>jdbc-mongo</artifactId> <version>6.3.0</version> </dependency> ``` ## 影响范围 - LambdaTemplate 接口和 JdbcTemplate 类 - [jdbc-mongo 驱动](https://www.dbvisitor.net/docs/guides/drivers/mongo/usecase) - [jdbc-redis 驱动](https://www.dbvisitor.net/docs/guides/drivers/redis/usecase) ## 更新内容 - 新增 - 新增 jdbc-mongo 驱动,支持使用 JDBC 协议操作 MongoDB。 - 在 [Mapper 注解化](https://www.dbvisitor.net/docs/guides/core/annotation/about)、[Mapper File](https://www.dbvisitor.net/docs/guides/core/file/about)、[JdbcTemplate](https://www.dbvisitor.net/docs/guides/core/jdbc/about) 级别 API 上适配 jdbc-mongo 驱动。 - 支持使用 [LambdaTemplate](https://www.dbvisitor.net/docs/guides/core/lambda/about) 进行类型安全的 MongoDB 操作。 - 支持 MongoDB 的常用命令,包括 CRUD、聚合、索引管理等。 - 支持在 Mapper File 中使用 动态 SQL 标签生成 MongoDB 执行命令。 - 支持 ResultSetExtractor、RowMapper 等接口接收 MongoDB 查询结果。 - 调整 - 保证不被乱用 JedisCmd 不在可以被公开创建。 - 使用统一的 CommandBuilder 来替代 LambdaTemplate 中已有的 SQL 构建器。 - SqlDialect 方言接口中新增 newBuilder 方法可以创建与其方言适配的命令构建器。 - 在 MapperFile 和 @Column 中 `setColTemplate`、 `groupByColTemplate` 属性被废弃,这两项参数在使用过程中不具备逻辑性。 - 优化 - JedisConn 在初始化获取版本号时如果发生意外将会打印一个 warn 日志。 - 修复 - AdapterContainer 当操作响应速度早于结果返回时在多线程模式中操作共享资源的竞争冲突问题,该问题会导致请求卡死在 syncObj 对象的锁获得上。 - DynamicParsed 修复 SQL 中如果冒号 `:` 后面紧跟空白字符的情况出现口导致解析出现 OOM 的问题。 ## MongoDB 如何使用? ```java title='使用 JdbcTemplate 执行命令' // 1. 获取 MongoDB 连接 Connection mongoConn = ...; // 参考文档:驱动适配器 > JDBC Mongo > 安装与配置 JdbcTemplate jdbc = new JdbcTemplate(mongoConn); // 2. 插入数据 jdbc.execute("test.user_info.insert({name: 'mali', age: 26})"); // 3. 查询数据 List<Map<String, Object>> list = jdbc.queryForList("test.user_info.find({name: 'mali'})"); // 4. 更新数据 jdbc.execute("test.user_info.update({name: 'mali'}, {$set: {age: 27}})"); // 5. 删除数据 jdbc.execute("test.user_info.remove({name: 'mali'})"); ``` ```java title='使用 Mapper 接口操作' // 1. 定义实体类 @Table("test.user_info") public class UserInfo { @Column("uid") private String uid; @Column("name") private String name; // getters and setters } // 2. 定义 Mapper 接口 @SimpleMapper public interface UserInfoMapper extends BaseMapper<UserInfo> { @Query("test.user_info.find({uid: #{uid}})") UserInfo loadUser(@Param("uid") String uid); } // 3. 使用 Mapper try (Session session = config.newSession(mongoConn)) { UserInfoMapper mapper = session.createMapper(UserInfoMapper.class); // 保存 UserInfo user = new UserInfo(); user.setUid("1111"); user.setName("mali"); mapper.insert(user); // 查询 UserInfo loaded = mapper.loadUser("1111"); } ``` ```java title='使用 LambdaTemplate 操作' // 1. 获取 MongoDB 连接 Connection mongoConn = ...; LambdaTemplate lambda = new LambdaTemplate(mongoConn); // 2. 插入数据 UserInfo user = new UserInfo(); user.setUid("1111"); user.setName("mali"); lambda.insert(UserInfo.class).applyEntity(user).executeSumResult(); // 3. 查询数据 UserInfo loaded = lambda.query(UserInfo.class) .eq(UserInfo::getUid, "1111") .queryForObject(); // 4. 更新数据 lambda.update(UserInfo.class) .eq(UserInfo::getUid, "1111") .updateTo(UserInfo::getName, "dative") .doUpdate(); // 5. 删除数据 lambda.delete(UserInfo.class) .eq(UserInfo::getUid, "1111") .doDelete(); ```
最后提交信息为:
[maven-release-plugin] prepare release v6.3.0
v6.2.0
02305a7
2025-11-22 17:17
对比
v6.2.0
阿库玛
```xml <dependency> <groupId>net.hasor</groupId> <artifactId>jdbc-redis</artifactId> <version>6.2.0</version> </dependency> ``` ## 影响范围 - JdbcOperations 接口和 JdbcTemplate 类 - dbvisitor-driver 项目 - [jdbc-redis 驱动](https://www.dbvisitor.net/docs/guides/drivers/redis/usecase) ## 更新内容 - 新增 - 在 [Mapper 注解化](https://www.dbvisitor.net/docs/guides/core/annotation/about)、[Mapper File](https://www.dbvisitor.net/docs/guides/core/file/about)、[JdbcTemplate](https://www.dbvisitor.net/docs/guides/core/jdbc/about) 级别 API 上适配 jdbc-redis 驱动。 - 恢复 5.x 版本中的 BindTypeHandler 注解。 - XmlMapper 和 Query 注解,添加 resultTypeHandler 属性可以配置 TypeHandler - TypeHandlerColumnRowMapper 可以将 TypeHandler 作为 RowMapper 使用。 - jdbc-redis 驱动新支持 PING、ECHO、SELECT、INFO 命令。 - 对于 DataGrip 和 IDEA 内嵌 Database 插件中使用 jdbc-redis 驱动连接 Redis 的支持。 - ResultSetExtractor 接口新增 PairsResultSetExtractor 实现,用于将结果集转换为键值对集合。 - JdbcOperations/JdbcTemplate 新增三个 queryForPairs 方法,可以将查询结果的每一行数据都转换为一个键值对。 - 新的 pairs 规则,用于遍历 Map/List/Array 等集合类型,并使用固定模版生成查询条件。 - 变更 - queryForLong 方法返回值类型从 long 变更为 Long。 - queryForInt 方法返回值类型从 int 变更为 Integer。 - AbstractRowMapper 类的 getResultSetTypeHandler(ResultSet, int, Class) 方法移动到 TypeHandlerRegistry 类中。 - jdbc-redis 驱动在执行 MSET/MSETNX 命令时,返回值为添加的 Key 数量(此之前始终返回 1) - jdbc-redis 驱动中涉及 StoreSet 类型的相关命令在同时输出 SCORE、ELEMENT 字段时,结果集字段顺序调整为 ELEMENT、SCORE。具体命令有: - ZPOPMAX、ZPOPMIN、ZDIFF、ZINTER、ZRANDMEMBER、ZRANGE、ZRANGEBYSCORE、ZREVRANGE、ZREVRANGEBYSCORE、ZUNION、ZMPOP、BZMPOP、BZPOPMAX、BZPOPMIN、ZSCAN - 优化 - jdbc-redis 驱动支持 ResultSet 的 isLast 方法。 - 对于部分命令在执行完毕后通过使用 updateCount 方法返回执行结果,这些命令有: - HKEYS、HDEL、DEL、SET、HSET、HMSET、HSETNX、EXPIRE、EXPIREAT、PEXPIRE、PEXPIREAT、PERSIST、RENAME、RENAMENX、 TOUCH、LINSERT、LPUSH、LPUSHX、RPUSH、RPUSHX、LREM、LSET、LTRIM、MOVE、SADD、SDIFFSTORE、SINTERSTORE、SMOVE、 SREM、SUNIONSTORE、ZDIFFSTORE、ZINTERSTORE、ZRANGESTORE、ZREM、ZREMRANGEBYLEX、ZREMRANGEBYRANK、ZREMRANGEBYSCORE、 ZUNIONSTORE、MSET、MSETNX、PSETEX、SETEX、SETNX、SETRANGE - 对于 antlr4 的依赖,内嵌到 jdbc-redis 驱动 jar 包中,以减少外部依赖。 - 优化 jdbc-redis 驱动报错信息。 - dbvisitor-driver 中的 ConvertUtils 在处理 toBytes 时兼容 Byte[] 类型。 - 修复 - jdbc-redis 驱动中 Statement 的 getLargeUpdateCount 和 getUpdateCount 没有结果集时会抛出 SQLException 的问题。保持和 jdbc 描述一致,在没有更多结果时返回 -1。 - jdbc-redis 驱动中 keys 命令无法执行的问题。 ## queryForPairs 作用 ```java title='使用 JdbcTemplate 查询键值对' // 查询用户表,将用户 ID 和用户名作为 Map 返回 Map<Long, String> userMap = jdbc.queryForPairs("select uid, name from user", Long.class, String.class); ``` ## Redis 兼容如何使用? ```java title='使用 JdbcTemplate 存取对象' // 1. 使用 BindTypeHandler 注释标记 UserInfo 类,指定使用 JsonTypeHandler 来处理该类的序列化和反序列化 @BindTypeHandler(JsonTypeHandler.class) public class UserInfo { ... } // 2. 获取 Redis 连接,并构建 JdbcTemplate Connection redisConn = ...; // 参考文档:驱动适配器 > JDBC Redis > 如何使用 JdbcTemplate jdbc = new JdbcTemplate(redisConn); // 3. 创建 UserInfo 对象,将其插入到 Redis 中,并使用 Json 序列化存储 UserInfo user = new UserInfo(); user.setUid("j1111"); user.setName("username"); user.setLoginName("login_123"); user.setLoginPassword("password"); // 4. 使用 user_ + uid 作为键名,arg0 为 user 对象 int affected = jdbc.executeUpdate("set #{'user_' + arg0.uid} #{arg0}", user); // 5. 从 Redis 中查询 UserInfo 对象,并进行反序列化 UserInfo info = jdbc.queryForObject("get #{'user_' + arg0}", "j1111", UserInfo.class); // 6. 删除 Redis 中的 UserInfo 对象 int deleteCount = jdbc.executeUpdate("del #{'user_' + arg0.uid}", user); ``` ```java title='使用 Mapper 注解存取对象' // 1. 使用 BindTypeHandler 注释标记 UserInfo 类,指定使用 JsonTypeHandler 来处理该类的序列化和反序列化 @BindTypeHandler(JsonTypeHandler.class) public class UserInfo { ... } @SimpleMapper() public interface UserInfo1Mapper { // 1. 生成参数化命令:set ? ? // 2. 决定键名: #{'user_' + info.uid} // 3. 键的值: #{info} @Insert("set #{'user_' + info.uid} #{info}") int saveUser(@Param("info") UserInfo info); // 1. 生成参数化命令:get ? // 2. 决定键名: #{'user_' + uid} @Query("get #{'user_' + uid}") UserInfo loadUser(@Param("uid") String uid); // 1. 生成参数化命令:del ? // 2. 决定键名: #{'user_' + uid} @Delete("del #{'user_' + uid}") int deleteUser(@Param("uid") String uid); } ``` ```java title='使用 Mapper File 管理命令(Mapper)' @RefMapper("dbvisitor_scene/redis/user-mapper.xml") public interface UserInfoMapper { int saveUser(@Param("info") UserInfo info); UserInfo loadUser1(@Param("uid") String uid); UserInfo loadUser2(@Param("uid") String uid); int deleteUser(@Param("uid") String uid); } ``` ```xml title='使用 Mapper File 管理命令(Mapper File)' <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//dbvisitor.net//DTD Mapper 1.0//EN" "https://www.dbvisitor.net/schema/dbvisitor-mapper.dtd"> <mapper namespace="net.hasor.scene.UserInfoMapper"> <insert id="saveUser"> set #{'user_' + uid} #{info} </insert> <select id="loadUser" resultType="net.hasor.scene.UserInfo"> get #{'user_' + uid} </select> <delete id="deleteUser"> del #{'user_' + uid} </delete> </mapper> ```
最后提交信息为:
[maven-release-plugin] prepare release v6.2.0
v6.1.0
5e44f28
2025-11-04 14:26
对比
v6.1.0
阿库玛
## 影响范围 无 ## 更新内容 [新增] 新增 dbvisitor-driver 子项目,它提供了一个灵活的 JDBC 驱动适配器实现。旨在抽象 JDBC 驱动的实现细节,使非关系型数据库能够通过请求/响应模型快速集成到基于 JDBC 的应用程序中。 [新增] 新增 jdbc-redis 驱动适配器,它允许开发者使用标准的 JDBC 接口和命令的方式来操作 Redis 数据。 # jdbc-redis 特性: 支持 140+ 常用命令,涵盖 DB、Server、Keys、List、Set、StoreSet、String、Hash 命令集。 支持 JDBC 标准接口,包括 Connection、Statement、PreparedStatement、ResultSet 等。 支持 命令参数占位符 “?”,并使用 PreparedStatement 设置参数。 支持 多命令执行并通过 JDBC 标准方法获取多命令执行结果。 支持 Statement 的 maxRows、fetchSize、timeoutSec 属性设置。 支持 指令拦截器,可用于日志记录、性能监控等场景。 支持 类型转换,例如 结果集返回为 LONG 类型时,可通过 ResultSet.getInt 或 ResultSet.getString 获取数据。 支持 BLOB、CLOB、NCLOB 方式读取。 ## 功能展示 使用标准的 JDBC URL 格式连接 Redis: ``` String url = "jdbc:dbvisitor:jedis://server:port?database=0¶m1=value1¶m2=value2"; Properties props = new Properties(); props.setProperty("username", "user"); props.setProperty("password", "pass"); Connection conn = DriverManager.getConnection(url, props); ``` 主要的连接参数包括: ``` server:Redis 服务地址,格式为 `ip` 或 `ip:port`,集群模式为 `ip;ip;ip` 或 `ip:port;ip:port`。 username/password:认证信息。 database:默认数据库索引,默认为 0。 connectTimeout:连接超时时间(毫秒),默认 5000。 socketTimeout:套接字超时时间(秒),默认 10。 ``` 详细参数请在 [官网](https://www.dbvisitor.net/docs/guides/drivers/redis/params) 查看。 ## 命令执行 ``` // 创建连接 Connection conn = DriverManager.getConnection("jdbc:dbvisitor:jedis://localhost:6379"); // 执行命令 Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SET mykey hello"); // 处理结果 rs = stmt.executeQuery("GET mykey"); if (rs.next()) { System.out.println(rs.getString(1)); // 输出: hello } // 参数化查询 PreparedStatement pstmt = conn.prepareStatement("HSET ? ? ?"); pstmt.setString(1, "myhash"); pstmt.setString(2, "field1"); pstmt.setString(3, "value1"); ResultSet rs = pstmt.executeQuery(); ``` 感兴趣的朋友可以加入QQ交流群 948706820
最后提交信息为:
[maven-release-plugin] prepare release v6.1.0
v6.0.5
588c4bb
2025-07-21 09:53
对比
v6.0.5
阿库玛
## 影响范围 - MapperRegistry 和 MappingRegistry ## 更新内容 - [新增] MapperRegistry 的 loadMapper 方法新增 2 个重载方法可以接受 InputStream、Document 参数。 - [新增] MappingRegistry 的 loadMapping 方法新增 2 个重载方法可以接受 InputStream、Document 参数。 - [新增] MapperRegistry 新增 removeSqlConfig 方法访问级别为 protected,允许用户扩展后动态删除 SqlConfig。 - [优化] MapperRegistry 的 testMapper、matchType、matchMethod、getMethodDynamicResolve、getXmlDynamicResolve、applyResultConfig 方法访问级别修改为 protected 允许用户扩展。 - [优化] 从 tryLoadNode 方法中分离出 addSqlConfig 方法并修改为 protected 允许用户扩展时动态添加 SqlConfig 配置。 ## 延伸介绍 MapperRegistry 和 MappingRegistry 是 dbVisitor 中用于加载和管理 Mapper 对象映射的注册管理器。本次版本主要目标是恢复 5.x 系列中通过流方式动态添加 Mapper 的能力。 使用 MappingRegistry、MapperRegistry 管理 Mapper 后,在借助 dbVisitor 不和具体数据源(DataSource、Connection)相关联的特性可以帮助用户构建一个基于 SQL 的 API 服务。 感兴趣的朋友可以加入QQ交流群 948706820
最后提交信息为:
[maven-release-plugin] prepare release v6.0.5
v6.0.4
97bc277
2025-05-30 10:58
对比
v6.0.4
阿库玛
## 影响范围 - 使用条件构造器执行查询 - Oracle 数据源使用 DuplicateKeyStrategy.Update 策略插入数据 ## 更新内容 - [优化] 当使用条件构造器生成查询语句时使用了 group by 但未指定 select 时不在自动追加 group by 的语句,而是使用 * 号替代,虽然生成的语句可能无法用于数据库的执行,但可以在开发期间发现并解决它。这可以避免框架层面每次判断进而提升执行效率。 - [修复] OracleDialect 方言,支持 DuplicateKeyStrategy.Update,感谢 [ooknight](https://gitee.com/ooknight/) 的贡献 [相关 Issue](https://gitee.com/zycgit/dbvisitor/pulls/15) - [修复] 当映射中通过 selectTemplate 配置了语句模版并且使用条件构造器生成查询语句时没有指定 select 列的情况下,查询语句没有正确生成带有 selectTemplate 语句模版的 SQL。[相关 Issue](https://gitee.com/zycgit/dbvisitor/issues/ICB8QB) 案例: ```java @Data @Table("t_sample") public class Sample { @Column(name = "id", primary = true) private Long id; @Column(selectTemplate = "AsText(point)", // 会生成 select AsText(point) as point insertTemplate = "GeomFromText(?)", // 会生成 insert ... values (GeomFromText(?)) setValueTemplate = "GeomFromText(?)",// 会生成 update ... set point = GeomFromText(?) whereColTemplate = "AsText(point)" // 会生成 ... where AsText(point) = ? ) private String point; } --- lambdaQuery.eq(Sample::getPoint, "point(11,11)") .queryForList(); --- 使用下列语句执行查询 SELECT id , AsText(point) point FROM point_table WHERE AsText(point) = ? ``` ## 延伸介绍 selectTemplate 是 dbVisitor 的一个特色功能,用于对象映射在操作数据库时的 SQL 语句生成,例如,对带有 point 类型的 MySQL 表进行读写操作时可以利用语句模版特性在生成的语句中使用数据库 PointFromText、AsText 函数。 详细介绍可以查阅官网文档 https://www.dbvisitor.net/docs/guides/core/mapping/template 感兴趣的朋友可以加入QQ交流群 948706820
最后提交信息为:
[maven-release-plugin] prepare release v6.0.4
v6.0.3
1292cf8
2025-05-20 16:49
对比
v6.0.3
阿库玛
## 影响范围 - BaseMapper 接口 - InsertExecute 接口 - JsonTypeHandler 类 ## 更新内容 - [新增] BaseMapper 的 update/upsert 方法(支持联合主键) - [新增] BaseMapper 增加 deleteByMap 可以通过 Map 来替代对象(支持联合主键) - [新增] BaseMapper 新增 replace/replaceByMap 方法,用于整行替换(支持联合主键) - [新增] BaseMapper 新增 updateByMap 方法功能和 update 一致,接受数据载体为 Map(支持联合主键) - [新增] BaseMapper 新增 deleteList/deleteListByMap 可以传递实体对象列表,并在数据库中删除它们(支持联合主键) - [新增] BaseMapper 新增 loadBy/loadListBy 方法参数可以是 Map、实体对象或其它类型。用于根据参考对象加载数据库记录,参考对象必须包含主键字段(支持联合主键) - [新增] 新增 EntityQueryFunc 接口功能和 QueryFunc 一样,为字符串方式传递属性名而设计,用于 EntityQuery 接口。 - [新增] BaseMapper 的 pageBySample 方法增加两个重载方法,可以指定排序字段排序方式以及排序字段的 null 值排序策略。 - [优化] BaseMapper 的 countBySample/pageBySample 方法接受的参考对象可以是 Map、实体对象或其它类型。 - [优化] BaseMapper 的 initPageBySample 方法改名为 pageInitBySample 方便理解。 - [优化] BaseMapper 的 update 方法将不在提供整行更新,通过 update/replace 两种方式更新数据来避免危险的整行跟心操作(支持联合主键) - [优化] BaseMapper 原有 deleteById/deleteByIds 方法简化为只能传递具体 id 来进行删除。新版本不在支持联合主键。并且不在支持直接删除对象(使用 deleteList/deleteListByMap 替代) - [优化] BaseMapper 原有 selectById/selectByIds 简化为只能传递具体 id 来进行查询。新版本中不在支持联合主键(使用 loadBy/loadListBy 替代) - [优化] JsonTypeHandler 在自动选择 Json 序列化器时会优先选择较为稳定的 Jackson,其次选择 Gson,然后是 fastJSON,最后是 fastJSON2 - [优化] PageObject 和 PageResult 的 2 参数构造方法,参数含义从 pageSize, totalCount 修改为更为实用的 pageNumber, pageSize。 - [优化] AbstractSelect 中的 lockGroupBy/lockOrderBy 字段访问修饰符从 private 改为 protected。 - [优化] AbstractSelect 中的 addOrderBy/selectApply 方法不在接收属性类型从 P 改为字符串,方便子类 EntityQueryImpl 复用。 - [优化] OrderNullsStrategy 枚举增加 valueOfCode 工具方法。 - [修复] 查询构造器(Query、Update、Delete)在处理 eq/ne NULL 值情况时,应该使用 is null 或 is not null 而非 = ? - [修复] InsertExecute 接口的 applyEntity(T entity) 和 applyEntity(T... entity) 方法,没有正确识别 Map 类型导致插入数据缺失的问题。
最后提交信息为:
[maven-release-plugin] prepare release v6.0.3
v6.0.2
88bd717
2025-05-06 14:18
对比
v6.0.2
阿库玛
- [新增] 新增 dbvisitor-dependencies 工程用于统一管理 dbvisitor 的依赖。 - [优化] 为所有主要接口 API 的类型和方法补充更加详细的文档。 - [优化] Lambda API Query 模式下 eq/ne 在生成语句时如果传递的为空值,生成语句应该使用 xxx is null。 - [优化] Lambda API Update 模式下 set 的列中如果有空值,生成语句应该使用 xxx = null。 - [优化] Lambda API Update 模式下的 updateRowUsingMap 和 updateRow 两个方法默认不会更新主键列。 - 本次新增:如果对象映射没有标记主键列则会进一步引发 need to flag the primary key to ignore, or allowUpdateKey. 异常。 - 解决办法:标记对象的主键列。或者调用 allowUpdateKey 方法允许主键列更新。 - [优化] jdbcTemplate.queryForList 方法参数支持使用 List 类型传递位置参数,效果等同于使用数组。 - [优化] 删除 ConditionSqlDialect 接口的 randomQuery 方法,及其所有方言中的实现。该方法并未使用到。 - [优化] ChooseDynamicSql 类的 addChildNode 方法在接收 DynamicSql 时如果不是 IfDynamicSql 则会引发异常。 - [优化] XmlSqlConfigResolve 类的在处理文本时如果文本为空白字符序列则自动忽略文本以减少 DynamicSql 对象数量。 - [修复] DefaultSqlDialect 类,不支持 custom.keywords 的问题是其继承自 AbstractDialect。
最后提交信息为:
[maven-release-plugin] prepare release v6.0.2
v6.0.1
fb9e868
2025-05-05 17:05
对比
v6.0.1
阿库玛
[优化] 6.0.1 版本中 WrapperAdapter 命名换回 LambdaTemplate 这个命名接受度更高。 [优化] solon 插件包命名改为 dbvisitor-solon-plugin 符合 solon 的规范标准。 [优化] solon 插件没有配置方言时,使用分页功能会出现 null 异常。这是一个通用问题。 优化为仍然抛出异常但改为由 DefaultSqlDialect 抛出 UnsupportedOperationException 类型异常。 [优化] solon 插件中注入的类型如果没有对应的 dbVisitor 配置会在 dbVisitor 中引发异常,优化为 dbVisitor 什么都不做。 [优化] 订正官网不正确的内容。
最后提交信息为:
[maven-release-plugin] prepare release v6.0.1
v6.0.0
e298125
2025-05-05 17:04
对比
v6.0.0
阿库玛
v6.0.0 是一次重大不兼容升级,架构方面 v6.0 开始所有 API 都遵循统一的 规则、参数、结果接收、类型处理、对象映射 机制。 不兼容更新 - 5.0 系列中的 LambdaTemplate 更名为 WrapperAdapter 功能总体保持一致,细节差异不在一一列出。 - 5.0 事务管理器延续到新版本中。 - 5.0 中的 DalSession 更名为 Session,内部实现机制有重大变化。 - 5.0 中的 TableReader 接口删除。 - 5.0 中 主键生成器存在 GeneratedKeyHandler、KeyHolder 两套机制,现合并为一套。 - 5.0 中 @Query、@Insert 等注解中的 xml 属性被删除,动态 SQL 需要使用规则或者明确使用 Mapper File 来替代。 - 5.0 中 的多值处理策略,在 6.0 中被删除。 - JdbcOperations 接口在 6.0 中有重大变化可能无法与 5.0 保持兼容。 - 6.0 中 LambdaOperations 为 Map 结构提供更加紧密的支持。 - 6.0 开始 dbVisitor 不会在自动探测数据源的方言类型,需要在框架上通过 Option 明确指定。 - 名称参数写法 groupId in (:groupIds) 废弃,因此 @{and, groupId in (:groupIds)} 规则用法也无效了。需要使用 IN 规则来替代。 - MappingRegistry类 loadMapper(InputStream)、loadMapper(URL) 方法删除,使用 loadMapper(String) 或 loadMapper(String, boolean) 替换 官网文档 - 本次更新 5.0 官网文档手册不在提供,如有需要请在源码仓库 v5.4.4 标签中 dbvisitor-doc 目录下自行编译。
最后提交信息为:
[maven-release-plugin] prepare release v6.0.0
v5.4.4
c55aa50
2025-05-05 17:04
对比
v5.4.4
阿库玛
重要更新 - 这里是列表文本移除 JdbcOperations 接口中 6 个属于内部使用的低级 API,这些 API 本身有其它方法可以替代,或者本身使用会有一些限制 executeCreator(PreparedStatementCreator, PreparedStatementCallback<T>)、executeCall(CallableStatementCreator, ResultSetExtractor<T>)、executeCall(CallableStatementCreator, RowCallbackHandler)、executeCall(CallableStatementCreator, RowMapper<T>)、executeCallback(String, PreparedStatementCallback)、executeCallback(String, CallableStatementCallback)、JdbcTemplate 的 boolean execute(String),返回值改为 void。 - 接口底层使用的是 java.sql.Statement.execute(java.lang.String) 由于整个 JdbcTemplate.execute 执行时无法对结果集进行任何处理因此底层返回值已无多大意义。 更新记录 新增:支持 mapper 可以返回基本类型列表的能力 新增:支持 lambdaQuery 可以通过 queryForList 指定类型来返回查询不同封装结果的能力 新增:支持 lambdaQuery 可以通过 queryForList 查询基本类型列表 优化:BaseMapperHandler 接口逻辑使创建 LambdaTemplate 在一开始就被缓存,减少被创建次数。 优化:MappingRegistry 的 loadMapper 方法对于重复资源的加载可以自动识别并过滤,以减少无谓的报错。 优化:在使用 InsertLambda 时候,尽可能减少小对象产生。 修复 DalSession 在执行 createMapper 方法时标有 @RefMapper 注解的资源没有被加载的问题
最后提交信息为:
1. 切换到新的控制台
v5.4.3
6dfb7ef
2025-05-05 17:02
对比
v5.4.3
阿库玛
- 新增:支持 SpringBoot 3 - 修复:DalMapperBean 在被加载多次时触发配置文件重复加载的问题。
最后提交信息为:
[maven-release-plugin] prepare release v5.4.3
v5.4.2
b600381
2025-05-05 17:02
对比
v5.4.2
阿库玛
- 新增:单表模式下 lambda 方法新增一组带有 boolean 参数的方法。 - 优化:升级 cobble 依赖到 v4.6.3.
最后提交信息为:
[maven-release-plugin] prepare release v5.4.2
v5.4.1
951102e
2025-05-05 17:01
对比
v5.4.1
阿库玛
- 修复:DataSourceUtils 在动态 DataSource 情况下的内存泄漏问题 - 修复:OracleDialect 拼写 tableName 时 catalog/schema 的处理问题
最后提交信息为:
[maven-release-plugin] prepare release v5.4.1
v5.4.0
3abdfea
2025-05-05 17:01
对比
v5.4.0
阿库玛
不兼容更新 - 新增:SelectKeyHandler 类新增参数标识是 before 调用还是 after 调用 - 新增:KeySeqHolder 增加 onBefore/onAfter 方法用于标识调用阶段 - 优化:LambdaTemplate Map 模式下不在依赖任何数据库元信息,至此 dbVisitor 不会查询任何数据库元信息数据 - 优化:重写 InsertLambda 的逻辑可以有效处理 Entity 和 Map 两个模式下的差异点 - 移除:PhoenixDialect 方言 变更日志 - 新增:@BindTypeHandler 注解方便使用自定义 TypeHandler - 新增:URITypeHandler、URLTypeHandler 两个 TypeHandler 及Types.DATALINK 和 Types.ROWID JDBC Type 支持 - 新增:h2/db2/derby/hive/hsql/impala/informix/sqllite/sqlserver/达梦/虚谷数据的关键字字典文件 - 新增:mapper 文件级可以配置 useDelimited 属性 - 新增:lambdaUpdate UpdateExecute 接口中增加一组 Condition 方法 - 新增:DalRegistry 增加两个 hasScope 方法,用于判断某个 scope 是否存在 - 新增:Lambda Delete/Insert/Select/Update for Map 支持 MappingOptions选项 - 移除 dbVisitor generate 相关未完成的功能和代码 - 优化:升级 cobble 包版本为 4.5.4 - 优化:IncludeRule 逻辑使其拼出的 SQL 不在出现多余的空格 - 优化:lambdaUpdate/Delete/Query 兼容 tableMapping 没有匹配到任何列的极端情形 - 优化:Mapping 逻辑减少 TableDefaultInfo 的构建次数 - 优化:dtd/xsd 验证逻辑调整,entity 的 table 属性是可选的,如果省略 table 配置则实体类必须标有 @Table 注解 - 优化:针对 H2 2.2.220 版本的兼容性问题 - 优化:单元测试代码,提升覆盖率/修复测试Case问题,目前 834 个单元测试全部正常,行覆盖率提升到 77%,类覆盖率提升到 92% - 优化:DalSession 在调用 createMapper 时候不必强制要求 Mapper 接口必须标记 @xxMapper 注解,它会自动探测 DalRegistry - 优化:ExecuteInvocationHandler 逻辑针对接口 default 调用实现参考 mybatis 兼容 java8 和 java9 - 修复:报错内容不正确,始终是空指针异常的问题(社区用户 aqnghu 贡献) - 修复:lambdaInsert 当自增列配置为不参与 insert 时自增数据不回填的问题 - 修复:mapper 文件级 MappingOptions 不生效的问题(优先级顺序为:table -> mapper 文件级 -> 全局) - 修复:Oracle 使用 InsertLambda 批量 insert 失败的问题 - 修复:SqlXmlForReaderTypeHandler 类无法正常工作的问题 - 修复:BaseMapper 接口中 updateById 会强制把 id 也带上的问题
最后提交信息为:
[maven-release-plugin] prepare release v5.4.0
v5.3.3
2be3abb
2025-05-05 17:00
对比
v5.3.3
阿库玛
- 新增:达梦数据库分页方言支持 InsertSqlDialect 接口实现,可以在单表操作时使用 Insert 冲突策略(报错、替换(暂不支持)、忽略) - 新增:达梦数据库分页方言支持 randomQuery 方法实现,可以提供随机查询能力 - 新增:dbvisitor-faker 支持达梦数据库造数据 - 新增:LocalTimeTypeHandler 类型读写器并设置为 java.time.LocalTime 类型的默认选项,在此之前 java.time.LocalTime 类型会使用 LocalDateTimeAsLocalTimeTypeHandler 读写器 - 修复:ParsedSql 的 buildSql 方法未解析 ognl 表达式(感谢来自社区 aqnghu 的贡献) - 优化:使用 PostgreSqlDialect、MySqlDialect 替代 KingbaseDialect、MariaDBDialect 两个方言 - 优化:达梦数据库 方言实现,tableName 的生成 catalog/schema 参数都可以用于定义数据库名,其中 catalog 优先级更高 - 优化:dbVisitor-faker 反查机制当 WherePolitic 策略使用 KeyCol 或 RandomKeyCol 时候反查器将只会查询主键列(无主键表仍然会反查所有列) - 优化:DalRegistry 在 loadMapper 没有匹配到 XML 时会报错的问题,改为可忽略错误防止应用启动阻塞
最后提交信息为:
[maven-release-plugin] prepare release v5.3.3
v5.3.2
aebc3aa
2025-05-05 16:59
对比
v5.3.2
阿库玛
- 修复:BaseMapperHandler 类的Bug,错误的使用了列名称而非属性名 - 修复:SqlDialect 在格式化名称时候自动判断第一个字符如果是数字或符号则会强制添加限定符 - 优化:增加查询语句sql打印 * 增加查询语句 SQL 打印
最后提交信息为:
[maven-release-plugin] prepare release v5.3.2
下载
请输入验证码,防止盗链导致资源被占用
取消
下载
Java
1
https://gitee.com/zycgit/dbvisitor.git
git@gitee.com:zycgit/dbvisitor.git
zycgit
dbvisitor
dbvisitor
点此查找更多帮助
搜索帮助
Git 命令在线学习
如何在 Gitee 导入 GitHub 仓库
Git 仓库基础操作
企业版和社区版功能对比
SSH 公钥设置
如何处理代码冲突
仓库体积过大,如何减小?
如何找回被删除的仓库数据
Gitee 产品配额说明
GitHub仓库快速导入Gitee及同步更新
什么是 Release(发行版)
将 PHP 项目自动发布到 packagist.org
评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册