初学BeetlSQL第一篇,第一篇博客,有问题请纠正


第一篇博客,有问题可以留言纠正,但请各位嘴下留情,拜托拜托
作为实习生,进入公司后开始接触各种各样不同的框架,其中公司所用的持久化框架就是BeetSQL

BeetlSQL

简单介绍

BeetlSQL 是一个基于 Java 平台的持久层框架,它提供了简化数据库操作的功能。下面是对 BeetlSQL 的优势及特点的介绍:

  1. ORM 框架:BeetlSQL 是一个基于对象关系映射(Object Relational
    Mapping,ORM)的框架,用于将数据库表的数据映射到 Java 对象上,并提供方便的 CRUD(增删改查)操作。

  2. 轻量级和高性能:BeetlSQL 设计为轻量级且高性能,它采用了自定义的 SQL解析和参数绑定方式,以及缓存和批量操作等技术手段,可以在保持简洁性的同时提供较好的执行效率。

  3. 灵活的 SQL 编写:BeetlSQL 支持使用原生 SQL语句进行数据库操作,这使得开发者可以根据需要编写复杂的查询语句。同时,BeetlSQL 还提供了一些便捷的 API和查询构建器,简化常见查询的编写。

  4. 多数据库支持:BeetlSQL 支持多种常见的关系型数据库,如 MySQL、Oracle、SQLServer、PostgreSQL等,可以在不同的数据库平台上进行开发和部署。

  5. 具有事务管理功能:BeetlSQL 提供了事务管理的支持,可以通过注解或编程方式来控制事务的开始、提交和回滚。

  6. 良好的扩展性:BeetlSQL 提供了插件机制和自定义配置的方式,使得开发者可以根据自己的需求对框架进行扩展和定制。

总体而言,BeetlSQL 是一个简单、高效且易于使用的 Java 持久层框架,适用于各种规模的项目和数据库操作场景。它提供了方便的 ORM 功能和灵活的 SQL 编写方式,帮助开发者更便捷地与数据库交互。

最近浏览学习BeetlSQL也发现了一张图片:
beetlsql
如果如图所述那BeetlSQL肯定会在业界大火,然后成为持久化主流框架,可现在为什么业界内BeetlSQL不温不火,显然这张图片明显出于官方之手

在网上也收集了一些BeetSQL的缺点,仅供参考:

  1. 学习曲线较陡:对于初学者来说,BeetlSQL 的学习曲线可能相对较陡。它有自己独特的语法和API,需要一定的时间和精力去理解和掌握。
  2. 文档和社区支持相对较少:相比其他知名的 Java 持久层框架(如 Hibernate、MyBatis),BeetlSQL 的文档和社区支持相对较少。这可能导致在遇到问题时,获取帮助和寻找解决方案相对困难。
  3. 缺乏广泛应用和生态系统支持:与一些更成熟的持久层框架相比,BeetlSQL 的应用范围相对较小,没有像 Hibernate 或 MyBatis 那样广泛的应用和庞大的生态系统。这可能导致在某些情况下,对于一些特定的需求或集成场景,可能需要自行解决或开发扩展。
  4. 较少的第三方工具和集成支持:相比其他主流的持久层框架,BeetlSQL 的第三方工具和集成支持相对较少。它可能缺乏一些成熟的工具和插件,如可视化数据库映射工具、集成开发环境(IDE)插件等。

使用方式

可以使用Maven坐标方式:

<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetl</artifactId>
<version>${最新版本}</version>
</dependency>

也可以依次下载beetlsql,beetl 最新版本 包放到classpath里

简单使用

本文使用BeetlSQL2.8+的一个版本,数据库使用MySQL的数据库

创建一个数据表

user数据表

编写一个与数据库表对应的实体类

public class User  {
	private Integer id ;
    private Integer age ;
    private String name ;
    private Date createDate ;
}

主键需要通过注解来说明,如@AutoID,或者@AssignID等,但如果是自增主键,且属性是名字是id,则不需要注解,自动认为是自增主键。
我定义的数据库中就是自增主键并且名称为id,所以不用加注解

使用BeetlSQL完成对这个表数据的增删改查操作

//getSimple中四个参数分别为数据库驱动程序,数据库地址,数据库用户名和密码
ConnectionSource source = ConnectionSourceHelper.getSimple(driver, url, userName, password);
DBStyle mysql = new MySqlStyle();
// 可以写sql语句,将其放在classpagth的/sql 目录下,需要文件是.md文件
SQLLoader loader = new ClasspathLoader("/sql");
// 数据库命名跟java命名一样,所以采用DefaultNameConversion,还有一个是UnderlinedNameConversion,下划线风格的,
DefaultNameConversion nc = new  DefaultNameConversion();
// 最后,创建一个SQLManager,DebugInterceptor 不是必须的,但可以通过它查看sql执行情况
SQLManager sqlManager = new SQLManager(mysql,loader,source,nc,new Interceptor[]{new DebugInterceptor()});


//新增用户,如果需要获取主键,可以传入KeyHolder,这里使用内置的的sql
User user = new User();
user.setAge(19);
user.setName("xiandafu");
sqlManager.insert(user);

//查询id为1的用户信息,这里使用内置的sql语句
int id = 1;
user = sqlManager.unique(User.class,id);

//通过模板修改,仅仅根据id更新值不为null的列,这里使用内置的sql语句
User newUser = new User();
newUser.setId(1);
newUser.setAge(20);
sqlManager.updateTemplateById(newUser);

//通过模板查询,这里使用内置的sql语句
User query = new User();
query.setName("xiandafu");
List<User> list = sqlManager.template(query);

//通过Query查询,这里使用内置的sql语句
Query userQuery = sqlManager.getQuery(User.class);
List<User> users = userQuery.lambda().andEq(User::getName,"xiandafy").select();

//这里使用了user.md 文件里的select语句。
User query2 = new User();
query.setName("xiandafu");
List<User> list2 = sqlManager.select("user.select",User.class,query2);

UserDao dao = sqlManager.getMapper(UserDao.class);
List<User> list3 = dao.select(query2);

BeetlSql2.8.11 提供了 SQLManagerBuilder来链式创建SQLManager

SQL文件

一般情况下都可以使用BeetlSQL内置的方法去自动生成sql语句,不需要我们自己编写sql语句,但一些特定情况、特定功能的开发还是需要自行去编写sql语句,那么BeetlSQL如何自己去编写sql语句呢?

如同上面的例子:

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

这句话使用了自己编写的sql语句去通过名字查找用户信息,为了能执行上例的user.select,需要在classpath里建立一个sql目录(在src目录下建立一个sql目录,或者maven工程的resources目录。ClasspathLoader 配置成sql目录)以及下面的user.md 文件,内容如下:

select
===
select * from user where 1=1
@if(!isEmpty(age)){
and age = #age#
@}
@if(!isEmpty(name)){
and name = #name#
@}

如何去编写sql语句呢,如同上例做一个简单的解释内容:

  • 采用md格式,=== 上面是sql语句在本文件里的 唯一标示,下面则是sql语句。
  • @ 和回车符号是定界符号,可以在里面写beetl语句。
  • # 是占位符号,生成sql语句得时候,将输出?,如果你想输出表达式值,需要用text函数,或者任何以db开头的函数,引擎则认为是直接输出文本。
  • isEmpty 是beetl的一个函数,用来判断变量是否为空或者是否不存在.文件名约定为类名,首字母小写。

对于以上BeeltSQL采用这样的方式编写sql语句,官方的说法是:

sql模板采用beetl原因是因为beetl 语法类似js,且对模板渲染做了特定优化,相比于mybatis,更加容易掌握和功能强大,可读性更好,也容易在java和数据库之间迁移sql语句

当然这样的写法是好是坏,这肯定是因人而异了

以下是BeetSQL自行编写sql语句的注意事项:
sql Id 到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代码

上例中我们自行编写了用户的实体类User的代码以及user.md代码,其实可以使用sqlManager来辅助生成实体类代码或者sql片段代码如下:

public static void main(String[] args){
    SqlManager sqlManager  = ...... //同上面的例子
    sqlManager.genPojoCodeToConsole("user");
    sqlManager.genSQLTemplateToConsole("user");
}

genPojoCodeToConsole 方法可以根据数据库表生成相应的Pojo代码,输出到控制台,开发者可以根据这些代码创建相应的类,如上例子,控制台将输出:

package com.test;
import java.math.*;
import java.util.Date; import
java.sql.Timestamp;

/**
*
* gen by beetlsql 2016-01-06
*/
public class User {
private Integer id ;
private Integer age ;
private String name ;
private Date createDate ;
}

注意:
生成属性的时候,id总是在前面,后面依次是类型为Integer的类型,最后面是日期类型,剩下的按照字母排序放到中间。

一旦有了User 类,如果你需要写sql语句,那么genSQLTemplateToConsole 将是个很好的辅助方法,可以输出一系列sql语句片段,你同样可以赋值粘贴到代码或者sql模板文件里(user.md),如上例所述,当调用genSQLTemplateToConsole的时候,生成如下:

sample
===
\ * 注释
select #use(“cols”)# from user where #use(“condition”)#

cols
===
id,name,age,create_date

updateSample
===

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

condition
\ ===

1 = 1
@if(!isEmpty(name)){
and `name`=#name#
@}
@if(!isEmpty(age)){
and `age`=#age#
@}

beetlsql生成了用于查询,更新,条件的sql片段和一个简单例子。你可以按照你的需要copy到sql模板文件里.实际上,如果你熟悉gen方法,你可以直接gen代码和sql到你的工程里,甚至是整个数据库都可以调用genAll来一次生成

注意:sql 片段的生成顺序按照数据库表定义的顺序显示

结尾


这就是本片,简单学习BeetlSQL的使用方法,BeetlSQL有自己独特的sql编写方法,可以使用内置的方法,也可以使用自己编写的sql片段


参考文献:http://www.ibeetl.com/guide/#/beetlsql/quickstart

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值