BeetSql

BeetSql提供数据库管理功能,可以在软件编辑SQL,可以在软件查询表单内容,可以在软件生成脚本,支持定义变量、属引用、算数表达式、逻辑表达式、循环、条件、函数调用、格式化、class方法调用、错误处理、安全输出、注释、类型说明等多种内容,用户可以直接在软件复制代码运行,可以立即分析你的数据库,可以调用数据内容创建可视化的表单,为用户管理数据库提供帮助,软件支持DAO,您可以在软件编辑数据模型,可以将数据映到模型,可以直接在模板混合数据生成模型!

BeetSql软件功能

BeetlSQL 超过MyBatis的全功能Java DAO工具

BeetSql是一个全功能DAO工具, 同时具有Hibernate 优点 & Mybatis优点功能,适用于承认以SQL为中心,同时又需求工具能自动能生成大量常用的SQL的应用。

开发效率高

无需注解,自动使用大量内置SQL,轻易完成增删改查功能,节省50%的开发工作量。 数据模型支持Pojo,也支持Map/List这种快速模型,也支持混合模型。 SQL 模板基于Beetl实现,更容易写和调试,以及扩展。 可以针对单个表(或者视图)代码生成pojo类和sql模版,甚至是整个数据库。能减少代码编写工作量。

易于

SQL 以更简洁的方式,Markdown方式集中管理,同时方便程序开发和数据库SQL调试。可以自动将sql文件映为dao接口类。灵活直观的支持支持一对一,一对多,多对多关系映而不引入复杂的OR Mapping概念和技术。具备Interceptor功能,可以调试,能诊断SQL,以及扩展其他功能

BeetSql软件特色

BeetlSql可以通过sql文件的管理和搜索来支持跨数据库开发,先搜索特定数据库,再查找常见。另外BeetlSql也提供了一些夸张的数据库解决方案

DbStyle描述了数据库特,注入插入,翻页都通过其子类完成,用户无需心

提供一些最小的函数扩展,代替各个数据库的函数,如时间和时间作函数date等

MySqlStyle mysql数据库支持

OracleStyleoralce支持

PostgresStyle postgresql数据库支持

其他还有SQLServer,H2,SQLLite,DB2数据库支持

BeetSql使用说明

缓存

缓存功能同DebugInterceptor构造方式一样,SimpleCacheInterceptor能缓存指定的sql查询结果

如上例,指定所有名称空间为用户查询都将被缓存,如果此名称空间有更新作,则缓存清除,输出如下

第二条查询的时间为0,这是因为直接使用了缓存缘故。

SimpleCacheInterceptor构造的时候接受一个类列表,所有sqlid的名称空间,称为“ user.queryUser”的名称空间是“ user”,如果beetlsql的查询sqlid此列表里,将参与缓存处理,否则,不参与缓存处理

默认的缓存实现是使用内存映,也可以使用其他实现方式,例如redies,只需要实现如下接口

功能BeetlSql可以在执行sql前后执行双向的Intercetor,从而有机会执行各种扩展和监控,这比已知的通过数据库连接池做Interceptor更容易。如下Interceptor都是有可能的

监控sql执行缩短时间,打印并收集。TimeStatInterceptor类完成

对每一条sql执行后输出其sql和参数,也可以根据条件只输出特定的sql的sql。方便用户调试。DebugInterceptor完成

汇总sql执行情况(未完成,需要集成第三方sql分析工具)

跟踪执行的sql和响应的参数

DebugInterceptor类是常用类,可以通过sql和参数打印到控制台,如果你想收集log4j等工具,你需要继承DebugInterceptor,实现pntln方法,使用你的志框架打印

如下,在执行数据库作前会执行之前,通过ctx可以获取执行的参数参数,数据库成功执行后,会执行方法之后

对于查询,执行结果是查询返回的结果集条数,对于更新,返回的是成功条数,如果是批量更新,则为InterceptorContext如下,包含了sqlId,实际得sql,和实际得参数,也包括执行结果结果。 ,则是一个枚举。可以参考源码DebugInterceptor

对于批处理更新,使用BatchUpdateInterceptorContext代替InterceptorContext,paras参数为空,增加了batchParas,保留了所有的参数,定义如下

数据库主从

内置支持主从数据库BeetlSql管理数据源,如果只提供一个数据源,则认为读写器均作此数据源,如果提供多个,则替换第一个为写库,其他为读库。用户在开发代码的时候,不必担心作的是哪个数据库,因为调用sqlScpt的select相关API的时候,总是去读取从库,添加/更新/删除的时候,总是读取主库(如下是主从实现原理,大部分情况下无需关心如何实现)

主从库的逻辑是由ConnectionSource来决定的,如下DefltConnectionSource的逻辑

forceStatus可以强制SQLMar使用主或从数据库。参考api SQLMar.useMaster(DBRunner f),SQLMar.useSlave(DBRunner f)

对于不同的ConnectionSource完成逻辑不一样,对于spng,jfinal这样的框架,如果sqlMar在事务环境里,总是作主数据库,如果是并行事务环境则作从数据库。如果没有事务环境,则根据sql是查询还是更新来决定。

如下是SpngConnectionSource提供的主从逻辑

注意,对于使用者而言,无需担心本节说的内容,仅供要定制主从逻辑的架构师。

分片JD支持

分片-JD支持开发者可以使用Sharding-JD来支持数据库分库分表,Sharding-JD对外提供一个封装好的数据源。只要将数据源当成普通数据源配置给BeetlSQL就可以,唯一的问题是因为Sharding-JD的数据源提供的MetaData功能较弱,因此构造BeetlSQL的ConnectionSource的时候还需要额外指定一个真正的数据源

connectionSource唯一不同地方是重载了getMetaData,从而从一个真实的DataSource上获取数据库元

对于分表应用,例如创建了user001,user002 ..用户对象必须对应用户表,如果未创建用户表,这样会报错,可以通过SQLMar.addVirtualTable(“ user001”,“ user”),告诉BeetlSQL,通过user001来获得“用户”的元数据

上一篇 2022-11-28

相关推荐

  • BeetSql

    BeetSql提供数据库管理功能,可以在软件编辑SQL,可以在软件查询表单内容,可以在软件生成脚本,支持定义变量、属引用、算数表达式、逻辑表达式、循环、条件、函数调用、格式化、...
正在提交中,请稍等片刻...

发表回复

请登录后评论...
登录后才能评论

评论列表 (0条)