您现在的位置是:首页 > 文章详情

BeetlSQL 3.12.5 发布,流行的 Java ORM 工具

日期:2021-12-19点击:459

修复了最近一系列调整带来的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;  } 
原文链接:https://www.oschina.net/news/174549/beetlsql-3-12-5-released
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章