返回
BeetSql V2022 正式版

BeetSql

立即下载

小编提示:PC版不适合移动端,如下载有问题点击反馈!

软件介绍

BeetSql是一款能够轻松进行数据库管理的工具。数据库管理必备神器BeetSql。软件结合了Hibernate,Mybatis等许多优点,它是一个功能齐全,专业且实用的DAO工具。它适用于以SQL为中心的应用程序,这些应用程序可以自动生成大量常用的SQL。它是一个特殊的程序,用于数据库设计用户的编程,设计和开发,非常方便实用。 BeetSql是一种数据库管理软件,具有很高的开发效率,跨多个数据库并且对DBA友好。它还指出了语法突出显示,错误提示和模型指针等多种功能,可以帮助用户减少代码数据库代码编辑错误,提高数据库设计和数据库管理效率,这是一种罕见的数据库管理软件。

软件功能:

BeetlSQL的目标是提供一个开发效率高,维护效率高且操作效率高的数据库访问框架。在系统中有多个库的情况下,它提供了一致的代码编写方式。支持以下数据平台

传数据库:MySQL,MariaDB,Oralce,Postgres,DB2,SQL Server,H2,SQLite,Derby,Magic Power,Dream,Huawei Gauss,Renda Jincang,PolarDB等。

大数据:HBase,ClickHouse,Cassandar,Hive

物联网时间序列数据库:Machbase,TD-Engine,IotDB

SQL查询引擎:Drill,Presto,Druid

内存数据库:点燃,CouchBase

BeetlSQL不仅类似于MyBatis或Hibernate,或者二者的结合。 BeetlSQL雄心勃勃的理想是基准测试甚至超越Spring Data。它是用于数据访问的统一框架,无论是传统数据库,大数据还是查询引擎。或定时库,内存数据库。

BeetSql

安装方式:

蜜蜂

Beetlsql

2.13.0。发布

蜜蜂

贝特尔

$ {最新版本}

或下载beetlsql(最新版本的beetl)并将其放在类路径中

准备工作要快速尝试BeetlSQL,您需要准备Mysql数据库或beetlsql支持的任何其他数据库,然后执行以下sql脚本

创建表`user`(

`id` int(11)NOT NULL AUTO_INCREMENT,

`name` varchar(64)DEFAULT NULL,

`age` int(4)默认为NULL,

`ceate_date` datetime NULL DEFAULT NULL,

主键(`id`)

)ENGINE = InnoDB DEFAULT CHARSET = utf8;

编写一个对应的Pojo类

到数据库表(或者您可以通过SQLManager的gen方法生成此类,请参阅以下部分)

导入java.math。*;

导入java.util.Date;

/ *

*

* en由beetlsql 2016-01-06

公共类用户{

整数ID;

私人整数年龄;

私有字符串名称;

私人日期createDate;

}

主键需要用注解来解释,例如@AutoID或@AssignID等,但是如果它是自动递增的主键并且属性名称是id,则不需要注解,并且自动将其视为自动递增的主键

代码示例写了一个java Main方法,内容如下

ConnectionSource源= ConnectionSourceHelper.getSimple(驱动程序,URL,用户名,密码);

DBStyle mysql =新的MySqlStyle();

// sql语句放在classpagth的/ sql目录中

SQLLoader loader = new ClasspathLoader(“ / sql”);

//数据库命名与Java命名相同,因此使用DefaultNameConversion,另一个是UnderlinedNameConversion,带下划线的样式,

UnderlinedNameConversion nc = new UnderlinedNameConversion();

//最后,创建一个SQLManager,不需要DebugInterceptor,但是您可以使用它来查看SQL执行

SLManager sqlManager =新的SQLManager(mysql,loader,source,nc,new Interceptor [] {new DebugInterceptor()});

//使用内置的生成的sql添加新用户,如果需要获取主键,可以传入KeyHolder

用户用户=新用户();

User.setAge(19);

User.setName(“ xiandafu”);

SqlManager.insert(用户);

/使用内置的sql查询用户

整数ID = 1;

用户= sqlManager.unique(User.class,id);

//模板更新,仅根据id更新值不为null的列

用户newUser = new User();

NewUser.setId(1);

NewUser.setAge(20);

SqlManager.updateTemplateById(newUser);

//模板查询

户查询= new User();

Query.setName(“ xiandafu”);

清单清单= sqlManager.template(query);

//询问

查询userQuery = sqlManager.getQuery(User.class);

列出用户= userQuery.lambda()。andEq(User :: getName,“ xiandafy”)。select();

//使用user.md文件中的select语句,请参阅下一节。

用户query2 = new User();

Query.setName(“ xiandafu”);

列表list2 = sqlManager.select(“ user.select”,User.class,query2);

//这部分需要参考mapper章节

UserDao dao = sqlManager.getMapper(UserDao.class);

列表list3 = dao.select(query2);

BeetlSql2.8.11提供了SQLManagerBuilder以在链中创建SQLManager

SQL文件示例通常,项目中仍然包含少量复杂的SQL,可能只有5或6行,或者可能有数百行。在单独的SQL文件中编写和维护更容易。为了执行user.select,在上例中,您需要在类路径中创建一个sql目录(在src目录中创建一个sql目录,或者在maven项目的资源目录中创建。将classpathLoader配置为该sql目录,请参见到上一节中的ClasspathLoader的初始化代码和随后的user.md文件中,内容如下

===

从用户中选择*,其中1 = 1

@If(!isEmpty(age)){和年龄=#age#

@}

@If(!isEmpty(name)){

和名称=#name#

@}

关于如何编写sql模板,我将在下一章中进行解释,以下是一些简单的说明。

是d格式,===上面是该文件中sql语句的唯一标记,下面是sql语句。

@和回车符是定界符,并且beetl语句可以写在其中。

“#”是一个占位符。生成SQL语句时,将其输出吗? ,如果要输出表达式值,则需要使用text函数或任何以db开头的函数,引擎会认为它直接输出文本。

IsEmpty是beetl的函数,用于确定变量是否为空或不存在。

文件名通常用作类名,首字母小写。

在SQL模板中使用beetl的原因是因为beetl语法类似于js,并且模板渲染已优化。与mybatis相比,它更易于掌握和强大,可读性更好,并且易于在Java和数据库之间迁移sql语句

注意:sqlId到sql文件的映射是通过类SQLIdNameConversion完成的。默认情况下提供DefaultSQLIdNameConversion实现,即最后一部分是带有“。”的sql片段的名称。区分最后一部分是文件相对路径,例如sqlId是user.select,然后select是sql片段名称,user是文件名,beetlsql将在根目录中查找/user.sql,/user.md。 ,并查找数据库方言目录。例如,如果使用mysql数据库,则将首先查找/ mysql /user.md,/mysql/user.sql,然后查找

寻找/user.md、/user.sql。

果sql是test.user.select,它将在/test/user.md(sql)或/mysql/test/user.md(sql)下查找“ select”片段。

生成用户所需的代码和sql不需要自己编写,一个好的做法是在项目中编写一个特殊的类来协助生成pojo和sql片段,代码如下

公共静态void main(String [] args){

SqlManager sqlManager = ...... //同上

SqlManager.genPojoCodeToConsole(“ user”);

SqlManager.genSQLTemplateToConsole(“ user”);

}

意:我经常在项目中编写这样的辅助类,以基于表或视图生成各种代码和SQL片段,以便快速开发。

GenPojoCodeToConsole方法可以根据数据库表生成相应的Pojo代码,并将其输出到控制台。开发人员可以根据这些代码创建相应的类。如上例所示,控制台将输出

打包com.test;

导java.math。*;

导入java.util.Date;

导入java.sql.Timestamp;

/ *

*

en由beetlsql 2016-01-06

* /

共类用户{

私人整数ID;

私人整数年龄;

私有字符串名称;

私人日期createDate;

}

注意,生成属性时,id始终位于最前面,然后是Integer的类型,最后一个是日期类型,其余的则按字母顺序放在中间。

拥有User类后,如果需要编写SQL语句,那么genSQLTemplateToConsole将是一个很好的辅助方法,它可以输出一系列SQL语句片段,还可以将它们分配并粘贴到代码或SQL模板文件中(如上所述,如示例中所述,当调用genSQLTemplateToConsole时,将生成以下内容

样本

===

* 评论

从用户中选择#use(“ cols”)#,其中#use(“ condition”)#

科尔斯

===

ID,名称,年龄,创建日期

更新样本

===

id =#id#,name == name#,age =#age#,create_date` =#date#

健康)状况

===

1 = 1

@If(!isEmpty(name)){

和name` =#name#

@}

@If(!isEmpty(age)){

和`age` =#age#

@}

Beetlsql生成sql片段和用于查询,更新,条件的简单示例。您可以根据需要将其复制到sql模板文件。实际上,如果您熟悉gen方法,则可以直接将gen代码和sql导入您的项目中,或者甚至可以通过一次调用genAll来生成整个数据库。

请注意,sql片段的生成顺序以数据库表定义的顺序显示

指示

BeetlSQL解释说,获取SQLManagerSQLManager是系统的核心,它提供了所有dao方法。要获取SQLManager,可以直接构造SQLManager。并通过单例获得,例如:

ConnectionSource源= ConnectionSourceHelper.getSimple(驱动程序,URL,“”,用户名,密码);

DBStyle mysql =新的MySqlStyle();

// sql语句放在classpagth的/ sql目录中

SQLLoader loader = new ClasspathLoader(“ / sql”);

//数据库命名与Java命名相同,因此使用DefaultNameConversion,另一个是UnderlinedNameConversion,带有下划线的样式

UnderlinedNameConversion nc = new UnderlinedNameConversion();

//最后,创建一个SQLManager,不需要DebugInterceptor,但是您可以使用它来查看SQL执行

SQLManager sqlManager =新的SQLManager(mysql,loader,source,nc,new Interceptor [] {new DbugInterceptor()});

更常见的是,已经有一个数据源,下面的代码可用于创建一个连接源

ConnectionSource源= ConnectionSourceHelper.getSingle(数据源);

如果是主从数据源

ConnectionSource源= ConnectionSourceHelper.getMasterSlave(主,从属)

关于使用Sharding-JDBC实现子数据库子表,请参见主从章节

查询API简单查询(自动生成的sql)public T unique(Class clazz,Object pk)基于主键的查询,如果找不到,则将引发异常。

Public T single(Class clazz,Object pk)根据主键查询,如果找不到,则返回null。

公开列出所有(Class clazz)查询出所有结果集

public全部列出(类别clazz,int开头,int大小)翻页

public int allCount(Class clazz)总计

(查询)单表查询SQLManager提供查询类以实现单表查询操作

SQLManager SQL = ...

清单清单= sql.query(User.class).andEq(“ name”,“ hi”)。orderBy(“ create_date”)。select();

Sql.query(User.class)返回单表查询的Query类

如果是Java8,则可以使用lambda表示列名称

列表ist1 = sql.lambdaQuery(User.class).andEq(User :: getName,“ hi”)。orderBy(User :: getCreateDate).select();

lamdba()方法返回LamdbaQuery类,并且列名称支持lambda。

有关查询操作的具体用法,请参阅第25.1节

查询对象通常适合在业务操作中使用,并且不能代替通常的前端接口查询。建议使用sqlId来回查询

nt-end接口查询

查询提供了两个静态方法filterEmpty和filterNull。这两个方法返回StrongValue的子类。当诸如andEq之类的方法的参数是StrongValue的子类时,SQL语句将根据条件进行拼接。 StrongValue定义如下

公共接口StrongValue {

*

*是有效值

*返回false不执行SQL汇编

* @返回

* /

布尔值isEffective();

/ **

获取实际值

* @返回

* /

对象getValue();

}

以下是使用示例

博客博客= query.andEq(Blog :: getTitle,Query.filterNull(null))

.AndIn(博客:: getId,Arrays.asList(1,2,3,4,5,6,7))

.AndNotIn(博客:: getId,Query.filterEmpty(Collections.EMPTY_LIST))

.AndNotEq(Blog :: getId,Query.filterEmpty(“”))

.ndLess(博客:: getId,Query.filterEmpty(2))

.AndGreatEq(博客:: getId,Query.filterEmpty(0))。single()

模板查询public List template(T t)根据模板查询,返回与此模板匹配的所有数据库。与上面相同,映射器可以提供其他映射,例如一对多,一对一处理

Public T templateOne(T t)根据模板查询,返回结果,如果找不到,则返回null

公共列表模板(T t,int开头,int大小)与上面相同,您可以翻页

Public long templateCount(T t)获取符合条件的数量

Public List模板(Class target,Object paras,long start,long size)模板查询,参数为paras,可以是Map或普通对象

公共ong templateCount(Class target,Object paras)获得合格的数量

从页面翻动开始,系统的默认位置从1开始。为了与各种数据库系统兼容,它将自动转换为数据库惯例。例如,如果start为1,则将认为mysql和postgres从0开始(start-1),oralce,sqlserver,db2从1开始(start-0)。

但是,如果仅使用特定数据库,则可以遵循特定数据库的习惯。例如,如果仅使用mysql,则start记录的起始值为0,需要进行配置

OFFSET_START_ZERO = true

这样,翻页参数start可以传入0。

模板查询通常是简单的查询,例如用户登录验证

用户模板= new User();

Template.setName(...);

Teplate.setPassword(...);

Template.setStatus(1);

用user = sqlManager.templateOne(template);

通过sqlid查询,md文件公共列表中的sql语句根据sqlid查询(字符串sqlId,Class clazz,Map paras)以进行查询,参数为map

Public List select(String sqlId,clazz,Object paras)根据sqlid查询,参数为pojo

公共列表select(String sqlId,Class clazz)根据sqlid查询,无参数

公共T selectSingle(String id,Object paras,Class target)根据sqlid查询,输入为Pojo,并且相应的唯一值映射到指定的目标对象。如果找不到,则返回空。当需要注意时,有时结果集本身为空,此时建议使用唯一

Public T selectSingle(String id,Map paras,Class target)根据sqlid查询,输入为Map,对应的是

列表列表= sqlManager.execute(新的SQLReady(“从用户中选择*,其中name =?并且age =?”,“ xiandafu”,18),User.class);)

公共PageQuery执行(SQLReady p,Class clazz,PageQuery pageQuery)

字符串jdbcSql =“从ID按用户顺序选择*”;

PageQuery查询=新的PageQuery(1,20);

查询= sql.execute(新的SQLReady(jdbcSql),User.class,查询);

注意:sql参数是通过SQLReady而不是PageQuery传递的。

Update public int executeUpdate(SQLReady p)SQLReady包含需要执行的SQL语句和参数,并返回更新结果

公共int [] executeBatchUpdate(SQLBatchReady批处理)批处理更新(插入)

直接使用Connection public T executeOnConnection(OnConnection call),用户需要实现onConnection方法的调方法,例如调用存储过程

列用户= sql.executeOnConnection(new OnConnection(){

@Override

公用列表调用(连接conn)抛出SQLException {

CallableStatement cstmt = conn.prepareCall(“ {?=调用md5(?)}”);

ResultSet rs = callableStatement.executeQuery();

返回this.sqlManagaer.getDefaultBeanProcessors()。toBeanList(rs,User.class);

}

});

主服务器或从服务器的其他强制性使用如果为SQLManager提供了多个数据源,则默认情况下第一个是主数据库,其他是从库。更新语句将使用主数据库,查询语句将使用从属数据库。

可以强制SQLManager使用主服务器或从服务器

公共无效useMaster(DBRunner f)DBRunner中的beetlsql调用将使用主数据库库

公共无效useSlave(DBRunner f)DBRunner中的beetlsql调用将使用从属数据库库

对于普通事务,只读事务来自库,而写事务始终是主事务。有关主从支持,请参阅第17章。

在开发阶段生成Pojo代码和SQ片段,以根据表名生成Pojo代码和相应的sql文件

GenPojoCodeToConsole(String table),根据表名生成一个pojo类,并将其输出到控制台。

GenSQLTemplateToConsole(String table),生成查询,条件,更新sql模板,输出到控制台。

GenPojoCode(String table,String pkg,String srcPath,GenConfig config)根据表名称,包名称,生成路径和配置,生成pojo代码

GenPojoCode(String table,String pkg,GenConfig config)与上面相同,生成路径自动为项目src路径,或src / main / java(如果它是Maven项目)

GenPojoCode(String table,String pkg),与上面相同,使用默认生成配置

GenSQLFile(String table)与上面相同,但输出到项目并成为sql模板。 sql模板文件的位置在src目录或src / main / reources(如果是maven)项目中。

GenALL(String pkg,GenConfig config,GenFilter filter)生成所有pojo代码和sql模板,

GenBuiltInSqlToConsole(Class z)根据该类生成内置的添加,删除和更改,以检查SQL语句并将其打印到控制台

Sql.genAll(“ com.test”,新的GenConfig(),新的GenFilter(){

尔布尔值accept(String tableName){

If(tableName.equalsIgnoreCase(“ user”)){

返回true;

}别的{

返回false;

}

//返回false

}

});

第一个参数是pojo类包的名称。 GenConfig是用于生成pojo的配置,GenFilter是过滤。只有返回true的那些才会生成。如果GenFilter为null,则必须生成数据库中的所有表

警告,您必须小心覆盖最初编写的类和方法。不要轻易使用genAll。如果使用它,最好立即将其注释掉,或在genFilter中编写一些逻辑以确保不会生成所有代码。好的SQL模板文件

悲观锁lockSQLManager提供以下API来实现悲观锁,clazz对应于数据库表,主键是pk记录以实现悲观锁

公共T锁(等级clazz,对象pk)

等效于sql语句

从xx中选择*,其中id =?更新

必须在事务环境中使用lock方法才能生效。交易结束后,自动释放

软件特色:

便于使用

Beetl的简单易用类似于Javascript语法和习惯。通过半学习和半猜测,只需半小时即可掌握使用情况。拒绝其他模板引擎的不人道语法和习惯。它还支持html标记,使开发CMS系统更加容易

易于整合

Beetl可以轻松地与各种Web框架集成,例如Act框架,Spring MVC,Struts,Nutz,Jodd,Servlet,JFinal等。支持模板独立开发和测试,即在MVC架构中,即使没有M和C部分,可以开发和测试模板。

完美的表现

Beetl远远超过了主流Java模板引擎的性能(引擎性能是5-6倍,freemaker,JSP的2倍),在宏观上通过优化的呈现引擎,IO二进制输出,字节码属性访问增强,在微观上通过一维数组可以节省在上下文中,静态文本被合并,字节数组被重以防止Java频繁创建和破坏该数组。它还使用模板缓存,运行时优化和其他方法。

发效率高

无需注释,自动使用大量内置SQL,添加,删除,修改和检查功能轻松完成,节省了50%的开发工作量。数据模型支持Pojo,快速模型(例如Map / List)和混合模型。 SQL模板是基于Beetl实现的,它更易于编写,调试和扩展。可以为单个表(或视图)代码甚至整个数据库生成Pojo类和sql模板。可以减少编码的工作量。

易于维护的SQL

以更简洁的方式,Markdown方式集中管理,同时促进程序开发和数据库SQL调试。可以自动将sql文件映射到dao接口类。灵活而直观的支持支持一对一,一对多和多对多关系映射,而无需引入复杂的OR映射概念和技术。使用拦截器功能,您可以调试和诊断SQL性能,并扩展其他功能

其它功能

内置的开源工具支持主从数据库支持,支持跨数据库平台,并将开发人员所需的工作减少到最低限度。当前,跨数据库支持MySql,Postgres,Oracle,SQLServer,h2,SQLite,DB2,Clickhouse,HBase,Cassandar,Hive,TD-Engine,Drill,Presto,ignite,CouchBase等。

精品推荐
猜你喜欢
用户评论