sqltoy是一款orm框架,如果你会使用这种框架就可以直接下载这款软件使用,软件基于Java编辑,满足大部分用户开发需求,让用户可以通过orm框架快速部署数据库相关的功能,提供丰富的SQL查询功能,可以在代码中查询SQL,可以基于表单对象查询sql,可以对查询到的内容编辑,直接在软件编辑新的sql,提供更简单的sql写法,让sql更容易理解,后期调整也比较简单,添加到数据库就可以直接执行,比mybatis编辑的sql要简单得多,写法上也比较清晰,方便后期,这款框架比mybatis强大得多!
sqltoy软件功能
基于java语言开发的一套数据库ORM框架
同时拥有hibernate对象作的简洁、以及比mybatis(或plus)等更强大、更简洁的sql查询
最为贴切项目实践,提供了绝大多数用户项目过程中的最直接处理问题的方法调用,除了常用的查询和分页外,还提供如:
1、取随机记录、取top记录(固定数量和按比例)
2、锁记录修改并返回结果updateFetch
3、树形表结构递归查询,利用表结构设计实现无关数据库的递归查询
4、行列互转无限级的分组汇总平均,极为简单的sql加短短的配置代替:晦涩冗长还自以为很牛的大sql
sqltoy软件特色
sqltoy-orm是比hibernate+myBatis更加贴合项目的orm框架(依赖spng),具有jpa式的对象CRUD的同时具有比myBatis(plus)更直观简洁能强大的查询功能。 支持以下数据库:
oracle 11g+
db2 9.5+,建议从10.5 开始
mysql(maadb/innosql)支持5.6、5.7、8.0 版本
postgresql(greenplum) 支持9.5 以及以上版本
sql 2012+
sqlite
DM达梦数据库
elasticsearch 只支持查询,版本支持5.7+版本,建议使用7.3以上版本
clickhouse
dosdb
oceanBase
guassdb
tidb
kingbase
mongodb (只支持查询)
sybase_iq 支持15.4以上版本,建议使用16版本
sqltoy教程
1.查询分库分表定义分库分表策略,参见sqltoy-showcase范例下resources/spng/spng-sqltoy-sharding.xml 配置
查询使用范例,参见sql配置上的sharding-datasource 和sharding-table
2.对象作分库分表涉及增加、修改、删除作的分库需要用到分布式事务管理,
使用jta进行事务管理
在对象上进行注解,sharding配置文件参见:src/java/resources/spng-sqltoy-sharding.xml
进行对象保存作
弹支持
1.集成背景elasticsearch具有极高的查询效率,十亿级上百个分段的查询基本上在0.2秒(pcie存储+占用内存,2017年背景)
极为适合大规模流水数据查询,某些客户过往交易记录等
具有极强的横向扩展能力
一般只用于查询,通过logstash或spark,flink等方式将数据ETL到elastic上
sqltoy支持es就是利用es的极高的查询效率来纠正关系型数据库大规模查询能问题,解决当初拉卡拉数据平台均千万笔(按年存储即30亿以上规模)的交易查询能(传统关系型数据库各种策略用尽都无法跟es的能想比)。
2.配置集成,请参见trunk / sqltoy-showcase / src / java / main / resources / spng / spng-sqltoy.xml
pom要增加httpclient,elastic-rest-client的依赖
3.查询编写,使用eql模式,弹支持sql和json模式,通过mode = sql来区分是否使用sqlsrc / java / main / com / sagframe / sqltoy / showcase目录下的sqltoy-showcase.sql.xml文件
elastic只支持单查询
缓存翻译,数据旋转等用法跟普通sql一致
4.java调用,参见测试目录下的ElasticCaseServiceTest,通过sqlToyLazyDao.elastic()调用
sqltoy常见问题
1. sqltoy的sql只能写在xml中吗?
不是的,sql可以直接写在代码中也可以通过@ListSql和@PageSql两个注解完成(但一般很少用注解)。
sql参数的名字是sqlOrNamedSql表示可以直接是sql也可以是xml中定义的sql id。
@todo通过sql获取单条记录
@param sqlOrNamedSql直接代码中写的sql或xml中定义的sql id
@param paramsNamed
@param paramsValue
@param voClass
@返回
/ 上市 T loadBySql(final Stng sqlOrNamedSql,final Stng [] paramsNamed,final Object [] paramsValue,
2. sqltoy的查询结果只能是VO list吗?
不是的,所有的查询ClassvoClass这里分1,voClass常规的vo类型; 2,null表示ArrayList; 3,HashMap.class LinkedHashMap.class```/ **
@TODO查询
@param
@param SQL
@param paramsNamed
@param paramsValue
@param voClass分零(返回二维列表),voClass,HashMap.class,LinkedHashMap.class等
@返回
/受保护 列表 findBySql(final Stng sql,final Stng [] paramsNamed,final Object [] paramsValue,
3. sqltoy查询#[]支持嵌入吗?
sqltoy动态作#[]是支持嵌套的且是无限层嵌套的,可以#[和t.status =:status#[和t.xxx =:xxx]]
4. sqltoy-orm可以不用写sql完成crud吗?
orm的概念其实就是基于对象完成对数据库的作,sqltoy-orm提供了基于对象的数据库作,从而休眠了jpa!
5.如何开始?
请参照sqltoy-showcase / tools / quickvo先通过数据库产生POJO,参照showcase下面/ src / test / java下面的CrudCaseServiceTest!
6. quickvo支持yml配置文件吗?
不支持,不用纠结这个转移,quickvo只是一个工具,如果项目使用的是yml则可以给quickvo单独一个属配置文件,或者直接通过quickvo.xml中的属来定义,如下
7. quickvo提示没有匹配到表生成vo
请catalog或schema配置是否正确,且大小写正确正确!oracle,sqlServer,postgresql用schema,mysql DB2则需配置:catalog!具体可以了解jdbc的conn.getMetaData()。getTables(catalog,schemaPattern,tablePattern ,types)方法规范
8.为什么SqlToyLazyDao保存或更新作数据库未发生改变?
这个属于事务配置文件,lazyDao应该在服务层调用,服务层上应该配置事务,事务配置可以注解模式,也可以通过aop在方法规则上进行控制,注解配置示例可以参照SqlToyCRUDServiceImpl类
如果在控制器层调用SqlToyCRUDService并自动完成数据库保存,因为SqlToyCRUDService方法已已经加了事务注释解。
9.为什么我手写VO和表映无法执行
请使用quickvo生成跟数据库的映关系,sqltoy从来不鼓励手工写跟数据库映,也没有必要去尝试!
是不是因为复杂所以不鼓励?不是,是因为从来就没有手工写过,再简单也记不住!
10.多数据源如何实现事务管理
请约会Jta进行事务管理,Atomikos + spng Jta,多数据源同时要支持读和写本身就是一个特有的场景,建议可以针对此进行服务化
参照地址:https ://www.cnblogs.com/wangyong/p/4174326.html
sqltoy一写多读可以按照常规模式进行配置,无需使用Jta。
近期热门