BeetlSQL 3.12.5 发布,流行的 Java ORM 工具
修复了最近一系列调整带来的Bug。建议升级到此版本
- 修复重用输出流导致Where标签无法正常使用问题
- 修复了JsonConfig,自定义映射中几种未考虑到的映射规则的Bug
- 修复了UpdateTemplateById中如果有@Version注解,生成的SQL的Bug
- 代码生成,名称为Dao改为Mapper
<dependency> <groupId>com.ibeetl</groupId> <artifactId>beetlsql</artifactId> <version>3.12.5-RELEASE</version> </dependency>
BeetlSQL 自主研发自 2015 年,目标是提供开发高效,维护高效,运行高效的数据访问框架,它适用范围广,定制性强,写起数据库访问代码特别顺滑,不亚于 MyBatis。你不想写 SQL 也好,或者想更好地写 SQL 也好,BeetlSQL 都能满足这要求,目前支持的数据库如下
- 传统数据库:MySQL (包括支持MySQL协议的各种数据库), MariaDB ,Oralce ,Postgres (包括支持 Postgres 协议的各种数据库), DB2 , SQL Server ,H2 , SQLite , Derby ,神通,达梦,华为高斯,人大金仓,PolarDB,GBase8s,GreatSQL 等
- 大数据:HBase,ClickHouse,Cassandar,Hive,GreenPlum
- 物联网时序数据库:Machbase,TD-Engine,IotDB
- SQL查询引擎:Drill,Presto,Druid
- 内存数据库:ignite,CouchBase
例子1,内置方法,无需写SQL完成常用操作
UserEntity user = sqlManager.unique(UserEntity.class,1); user.setName("ok123"); sqlManager.updateById(user); UserEntity newUser = new UserEntity(); newUser.setName("newUser"); newUser.setDepartmentId(1); sqlManager.insert(newUser);
输出日志友好,可反向定位到调用的代码
┏━━━━━ Debug [user.selectUserAndDepartment] ━━━ ┣ SQL: select * from user where 1 = 1 and id=? ┣ 参数: [1] ┣ 位置: org.beetl.sql.test.QuickTest.main(QuickTest.java:47) ┣ 时间: 23ms ┣ 结果: [1] ┗━━━━━ Debug [user.selectUserAndDepartment] ━━━
例子2 使用SQL
String sql = "select * from user where id=?"; Integer id = 1; SQLReady sqlReady = new SQLReady(sql,new Object[id]); List<UserEntity> userEntities = sqlManager.execute(sqlReady,UserEntity.class); //Map 也可以作为输入输出参数 List<Map> listMap = sqlManager.execute(sqlReady,Map.class);
例子3 使用模板SQL
String sql = "select * from user where department_id=#{id} and name=#{name}"; UserEntity paras = new UserEntity(); paras.setDepartmentId(1); paras.setName("lijz"); List<UserEntity> list = sqlManager.execute(sql,UserEntity.class,paras); String sql = "select * from user where id in ( #{join(ids)} )"; List list = Arrays.asList(1,2,3,4,5); Map paras = new HashMap(); paras.put("ids", list); List<UserEntity> users = sqlManager.execute(sql, UserEntity.class, paras);
例子4 使用Query类
支持重构
LambdaQuery<UserEntity> query = sqlManager.lambdaQuery(UserEntity.class); List<UserEntity> entities = query.andEq(UserEntity::getDepartmentId,1) .andIsNotNull(UserEntity::getName).select();
例子5 把数十行SQL放到sql文件里维护
//访问user.md#select SqlId id = SqlId.of("user","select"); Map map = new HashMap(); map.put("name","n"); List<UserEntity> list = sqlManager.select(id,UserEntity.class,map);
例子6 复杂映射支持
支持像mybatis那样复杂的映射
- 自动映射
@Data @ResultProvider(AutoJsonMapper.class) public static class MyUserView { Integer id; String name; DepartmentEntity dept; }
- 配置映射,比MyBatis更容易理解,报错信息更详细
{ "id": "id", "name": "name", "dept": { "id": "dept_id", "name": "dept_name" }, "roles": { "id": "r_id", "name": "r_name" } }
例子7 最好使用mapper来作为数据库访问类
@SqlResource("user") /*sql文件在user.md里*/ public interface UserMapper extends BaseMapper<UserEntity> { @Sql("select * from user where id = ?") UserEntity queryUserById(Integer id); @Sql("update user set name=? where id = ?") @Update int updateName(String name,Integer id); @Template("select * from user where id = #{id}") UserEntity getUserById(Integer id); @SpringData/*Spring Data风格*/ List<UserEntity> queryByNameOrderById(String name); /** * 可以定义一个default接口 * @return */ default List<DepartmentEntity> findAllDepartment(){ Map paras = new HashMap(); paras.put("exlcudeId",1); List<DepartmentEntity> list = getSQLManager().execute("select * from department where id != #{exlcudeId}",DepartmentEntity.class,paras); return list; } /** * 调用sql文件user.md#select,方法名即markdown片段名字 * @param name * @return */ List<UserEntity> select(String name); /** * 翻页查询,调用user.md#pageQuery * @param deptId * @param pageRequest * @return */ PageResult<UserEntity> pageQuery(Integer deptId, PageRequest pageRequest); @SqlProvider(provider= S01MapperSelectSample.SelectUserProvider.class) List<UserEntity> queryUserByCondition(String name); @SqlTemplateProvider(provider= S01MapperSelectSample.SelectUs List<UserEntity> queryUserByTemplateCondition(String name); @Matcher /*自己定义个Matcher注解也很容易*/ List<UserEntity> query(Condition condition,String name); }
你看到的这些用在Mapper上注解都是可以自定义,自己扩展的
例子8 使用Fetch 注解
可以在查询后根据Fetch注解再次获取相关对象,实际上@FetchOne和 @FetchMany是自定义的,用户可自行扩展
@Data @Table(name="user") @Fetch public static class UserData { @Auto private Integer id; private String name; private Integer departmentId; @FetchOne("departmentId") private DepartmentData dept; } /** * 部门数据使用"b" sqlmanager */ @Data @Table(name="department") @Fetch public static class DepartmentData { @Auto private Integer id; private String name; @FetchMany("departmentId") private List<UserData> users; }

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
建木持续集成平台 v2.1.0 发布
建木持续集成平台基于建木,致力于为国内开发者与DevOps人员提供极致用户体验,提升开发、上线、运维的效率,让软件用户专注于提供业务价值。 建木持续集成平台v2.1.0现已发布 主要更新:增强易用性及修复若干已知bug rfc: RFC-021-node-description 实现 feature: 搜索项目 给项目分组 可自定义排序组内项目 可自定义首页的项目组展示,显示/隐藏、排序等 升级同步项目组节点,支持分组管理项目,版本:2.0.0,具体参考文档 fixed: 内置shell节点图标无法显示 trigger语法中JsonPath提取规则能否规则支持正则 无法连接vault时,任务状态一直为排队中 节点日志没有显示空行 从git创建流程时点“下一步”容易误触“退出” webhook的token校验问题 临时停止流程触发 使用了vault管理密钥后,新增命名空间添加不上描述 节点名称重复问题 需要标签或者分组 太长的参数不方便复制 分组没有展示更多 中途保存以后不要返回到流程首页 官方示例 快速开始 建木官网
- 下一篇
zyplayer-doc 1.1.0发布,也许你可以尝试一下将所有的 swagger文 档放这里管理
项目介绍 zyplayer-doc是一款前后端完全开源的在线文档工具,现有API接口文档(Swagger、OpenApi、自建接口)、WIKI文档、数据库文档(数据库表结构查看管理、SQL执行)、Dubbo文档。 在线文档:zyplayer-doc使用文档 体验地址:http://doc.zyplayer.com 账号:zyplayer 密码:123456 开源地址:https://gitee.com/zyplayer/zyplayer-doc BUG反馈:https://gitee.com/zyplayer/zyplayer-doc/issues 本次升级内容 本次升级针对数据库模块做了许多易用性的更新,将Swagger文档模块重构为了API接口文档管理模块,提供更完善的Swagger文档、OpenApi文档的展示和调试体验。 注意:本次升级有新的脚本,需先执行增量更新SQL再升级 全局 用户权限控制重构 去掉对es、grpc的支持和依赖,专注核心模块的开发 默认去掉对hive的包依赖,编译结果文件瘦身100M+ maven依赖关系优化,依赖的maven包升级,解决依赖混乱问题 增加...
相关文章
文章评论
共有0条评论来说两句吧...