BeetlSQL 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
BeetlSQL 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
BeetlSQL 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
BeetlSQL 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
BeetlSQL 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !
授权协议 BSD
开发语言 Java 查看源码 »
操作系统 跨平台
软件类型 开源软件
开源组织
地区 国产
投 递 者 闲大赋
适用人群 未知
收录时间 2015-08-26

软件简介

BeetlSQL的目标是提供开发高效,维护高效,运行高效的数据库访问框架,在一个系统多个库的情况下,提供一致的编写代码方式。支持如下数据平台

  • 传统数据库:MySQL,MariaDB,Oralce,Postgres,DB2,SQL Server,H2,SQLite,Derby,神通,达梦,华为高斯,人大金仓,PolarDB等
  • 大数据:HBase,ClickHouse,Cassandar,Hive
  • 物联网时序数据库:Machbase,TD-Engine,IotDB
  • SQL查询引擎:Drill,Presto,Druid
  • 内存数据库:ignite,CouchBase

BeetlSQL 不仅仅是简单的类似MyBatis或者是Hibernate,或者是俩着的综合,BeetlSQL目的是对标甚至超越Spring Data,是实现数据访问统一的框架,无论是传统数据库,还是大数据,还是查询引擎或者时序库,内存数据库。

BeetlSQL3 性能测试

测试维度是ops/ms,每毫秒的调用次数

Benchmark                         Mode  Cnt     Score     Error   Units
JMHMain.beetlsqlComplexMapping   thrpt    5   212.378 ±  26.222  ops/ms
JMHMain.beetlsqlExecuteJdbc      thrpt    5   428.713 ±  66.192  ops/ms
JMHMain.beetlsqlExecuteTemplate  thrpt    5   374.943 ±  20.214  ops/ms
JMHMain.beetlsqlFile             thrpt    5   433.001 ±  65.448  ops/ms
JMHMain.beetlsqlInsert           thrpt    5   236.244 ± 112.102  ops/ms
JMHMain.beetlsqlLambdaQuery      thrpt    5   247.289 ±  19.310  ops/ms
JMHMain.beetlsqlOne2Many         thrpt    5   108.132 ±  10.934  ops/ms
JMHMain.beetlsqlPageQuery        thrpt    5   203.751 ±   9.395  ops/ms
JMHMain.beetlsqlSelectById       thrpt    5   393.437 ±  15.685  ops/ms
JMHMain.jdbcExecuteJdbc          thrpt    5  1083.310 ±  80.947  ops/ms
JMHMain.jdbcInsert               thrpt    5   308.341 ± 231.163  ops/ms
JMHMain.jdbcSelectById           thrpt    5  1019.370 ±  92.946  ops/ms
JMHMain.jpaExecuteJdbc           thrpt    5    94.600 ±  15.624  ops/ms
JMHMain.jpaExecuteTemplate       thrpt    5   133.017 ±  12.954  ops/ms
JMHMain.jpaInsert                thrpt    5    81.232 ±  26.971  ops/ms
JMHMain.jpaOne2Many              thrpt    5   101.506 ±  11.301  ops/ms
JMHMain.jpaPageQuery             thrpt    5   117.748 ±   4.512  ops/ms
JMHMain.jpaSelectById            thrpt    5   335.945 ±  27.186  ops/ms
JMHMain.mybatisComplexMapping    thrpt    5   102.402 ±  11.129  ops/ms
JMHMain.mybatisExecuteTemplate   thrpt    5   202.619 ±  16.978  ops/ms
JMHMain.mybatisFile              thrpt    5   151.151 ±   4.251  ops/ms
JMHMain.mybatisInsert            thrpt    5   141.469 ±  43.092  ops/ms
JMHMain.mybatisLambdaQuery       thrpt    5    15.558 ±   1.481  ops/ms
JMHMain.mybatisPageQuery         thrpt    5    63.705 ±   7.592  ops/ms
JMHMain.mybatisSelectById        thrpt    5   197.130 ±  19.461  ops/ms
JMHMain.weedExecuteJdbc          thrpt    5   416.941 ±  22.256  ops/ms
JMHMain.weedExecuteTemplate      thrpt    5   439.266 ±  57.130  ops/ms
JMHMain.weedFile                 thrpt    5   477.561 ±  37.926  ops/ms
JMHMain.weedInsert               thrpt    5   231.444 ±  92.598  ops/ms
JMHMain.weedLambdaQuery          thrpt    5   422.707 ±  64.716  ops/ms
JMHMain.weedPageQuery            thrpt    5   246.018 ±  18.724  ops/ms
JMHMain.weedSelectById           thrpt    5   380.348 ±  20.968  ops/ms

代码示例

例子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;
    }

例子9 不同数据库切换

可以自行扩展ConditionalSQLManager的decide方法,来决定使用哪个SQLManager

        SQLManager a = SampleHelper.init();
        SQLManager b = SampleHelper.init();
        Map<String, SQLManager> map = new HashMap<>();
        map.put("a", a);
        map.put("b", b);
        SQLManager sqlManager = new ConditionalSQLManager(a, map);

        //不同对象,用不同sqlManager操作,存入不同的数据库
        UserData user = new UserData();
        user.setName("hello");
        user.setDepartmentId(2);
        sqlManager.insert(user);

        DepartmentData dept = new DepartmentData();
        dept.setName("dept");
        sqlManager.insert(dept);

使用注解 @TargetSQLManager来决定使用哪个SQLManger

    @Data
    @Table(name = "department")
    @TargetSQLManager("b")
    public static class DepartmentData {
        @Auto
        private Integer id;
        private String name;
    }

例子10 如果想给每个sql语句增加一个sqlId标识

这样好处是方便数据库DBA与程序员沟通

 public static class SqlIdAppendInterceptor implements  Interceptor{
        @Override
        public void before(InterceptorContext ctx) {
            ExecuteContext context = ctx.getExecuteContext();
            String jdbcSql = context.sqlResult.jdbcSql;
            String info  = context.sqlId.toString();
            //为发送到数据库的sql增加一个注释说明,方便数据库dba能与开发人员沟通
            jdbcSql = "/*"+info+"*/\n"+jdbcSql;
            context.sqlResult.jdbcSql = jdbcSql;
        }
 }

例子11 代码生成框架

可以使用内置的代码生成框架生成代码何文档,也可以自定义的,用户可自行扩展SourceBuilder类

	List<SourceBuilder> sourceBuilder = new ArrayList<>();
	SourceBuilder entityBuilder = new EntitySourceBuilder();
	SourceBuilder mapperBuilder = new MapperSourceBuilder();
	SourceBuilder mdBuilder = new MDSourceBuilder();
	//数据库markdown文档
	SourceBuilder docBuilder = new MDDocBuilder();

	sourceBuilder.add(entityBuilder);
	sourceBuilder.add(mapperBuilder);
	sourceBuilder.add(mdBuilder);
	sourceBuilder.add(docBuilder);
    SourceConfig config = new SourceConfig(sqlManager,sourceBuilder);
   //只输出到控制台
	ConsoleOnlyProject project = new ConsoleOnlyProject();
	String tableName = "USER";
	config.gen(tableName,project);

例子13 定义一个Beetl函数

        GroupTemplate groupTemplate = groupTemplate();
        groupTemplate.registerFunction("nextDay",new NextDayFunction());

        Map map = new HashMap();
        map.put("date",new Date());
        String sql = "select * from user where create_time is not null and create_time<#{nextDay(date)}";
        List<UserEntity> count = sqlManager.execute(sql,UserEntity.class,map);

nextDay函数是一个Beetl函数,非常容易定义,非常容易在sql模板语句里使用

   public static class NextDayFunction implements Function {

        @Override
        public Object call(Object[] paras, Context ctx) {
            Date date = (Date) paras[0];
            Calendar c = Calendar.getInstance();
            c.setTime(date);
            c.add(Calendar.DAY_OF_YEAR, 1); // 今天+1天
            return c.getTime();
        }
    }

例子14 更多可扩展的例子

根据ID或者上下文自动分表,toTable是定义的一个Beetl函数,

    static final String USER_TABLE="${toTable('user',id)}";
    @Data
    @Table(name = USER_TABLE)
    public static class MyUser {
        @AssignID
        private Integer id;
        private String name;
    }

定义一个Jackson注解,@Builder是注解的注解,表示用Builder指示的类来解释执行,可以看到BeetlSQL的注解可扩展性就是来源于@Build注解

@Retention(RetentionPolicy.RUNTIME)
@Target(value = {ElementType.METHOD, ElementType.FIELD})
@Builder(JacksonConvert.class)
public @interface Jackson {

}

定义一个@Tenant 放在POJO上,BeetlSQL执行时候会给SQL添加额外参数,这里同样使用了@Build注解


/**
 * 组合注解,给相关操作添加额外的租户信息,从而实现根据租户分表或者分库
 */
@Retention(RetentionPolicy.RUNTIM@
@Target(value = {ElementType.TYPE})
@Builder(TenantContext.class)
public @interface Tenant {

}

使用XML而不是JSON作为映射

@Retention(RetentionPolicy.RUNTIME)
@Target(value = {ElementType.TYPE})
@Builder(ProviderConfig.class)
public @interface XmlMapping {
    String path() default "";
}

参考源码例子 PluginAnnotationSample了解如何定义自定的注解,实际上BeetlSQL有一半的注解都是通过核心注解扩展出来的

BeetlSQL的架构

除了SQLManager和ClassAnnoations,任何一部分都可以扩展

展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (30)

加载中
可以支持下R2DBC吗?
05/16 23:04
回复
举报
这个包名错误发生在org.beetl.sql.gen.SourceConfig的 packageList.getPkgs().add("java.math.BigDecimal");
2020/12/08 13:03
回复
举报
哥们。三里面这个出错了。import java.maths.BigDecimal; 数据库配置decimal类型,java里输出路径多了一个s,正确应该是java.math.BigDecimal
2020/12/08 11:04
回复
举报
大哥,给个mysql连接例子吧,配了好几天了,启动还是有报错 用了你好几年的Beelsql2的,这个3真是服了
2020/11/03 10:47
回复
举报
闲大赋软件作者
看官网文档
2020/11/04 10:05
回复
举报
zan
2020/10/08 07:24
回复
举报
2020/06/20 11:11
回复
举报
跨库怎么实现的
2020/04/26 10:59
回复
举报
请问下 beetl sql 有内置拦截器吗? 能实现 sql拦截,以做到数据结果过滤吗 ?
2019/07/11 15:46
回复
举报
bako优享空间互联网科技(深圳)有限公司
sql写注解里很烦。
2018/10/28 23:34
回复
举报
我就想知道,一对多对象映射支持否
2018/03/12 09:57
回复
举报
更多评论
发表了资讯
今天 13:22

BeetlSQL 3.4.3 发布,流行的 Java DAO 工具

SQLManagerBuilder增加了接口配置主键生成器,代替直接使用SQLManagaer指定的方式 删除了之前SpringBoot集成版本对Swagger的依赖。 轻量级高速Web框架Solon框架集成更新到最新版 Maven <dependency> <groupId>com.ibeetl</groupId> <artifactId>beetlsql</artifactId> <version>3.4.3-RELEASE</version> </dependency> BeetlSQL 研发自2015年,目标是提供开发高效,维护高效,运行高效的数据库访问框架,它...

4
0
发表了资讯
前天 23:40

BeetlSQL 3.4.2 发布,流行的 Java DAO 工具

Query功能支持Optional参数,如果为空,则andEq不生效 lambdaQuery.andEq(User::getName, Optional.ofNullable(name)).count(); 允许Mapper方法在JDK 代理基础上,再次被代理。 public static interface UserMapper<User>{   @Sql("select * from sys_user where id=? ")   @Datasource("crm1")   User selectById(Integer id);   @Sql("select * from sys_user where id=? ")   @Log()   User selectById2(Intege...

3
5
发表了资讯
05/19 22:38

BeetlSQL 3.4.1 发布,流行的 Java DAO 工具

本次发布做了微调 修复内置Update语句表名没有经过KeywordHandler处理 删除了sql-spring集成对spring-test的依赖 <dependency> <groupId>com.ibeetl</groupId> <artifactId>beetlsql</artifactId> <version>3.4.1-RELEASE</version> </dependency> BeetlSQL 研发自2015年,目标是提供开发高效,维护高效,运行高效的数据库访问框架,它适用范围广,定制性强,写起数据库访问代码特别顺滑。目前支持的数据库...

2
3
发表了资讯
05/16 15:13

BeetlSQL 3.4.0 发布,Stream 查询支持

本次发布对Stream查询进行支持,避免查询大量对象导致内存益处 新增StreamData对象和stream查询方法 代码生成,对使用LocalDate方式做了调整,支持LocalDateTime 删除Spring Boot集成自带代码生成REST API StreamData例子 StreamData<User> streamData = dao.queryBySql(99999); streamData.foreach(user -> {   //逐个处理user }); public interface UserStreamDao extends BaseMapper<User> {   @Sql("select * fr...

1
6
发表了资讯
04/26 12:57

BeetlSQL 3.3.13 发布,Java 的 DAO 工具

本周又发布了一个修复版本 修复了Saga事物嵌套回滚的Bug 修复注解实现TargetAdditional在翻页查询中不起作用的Bug 感谢网友使用BeetlSQL的高阶功能并给予详细反馈 Saga事务例子 SagaContext sagaContext = SagaContext.sagaContextFactory.current(); try {   sagaContext.start(gid);   //模拟调用俩个微服务,订单和用户   rest.postForEntity(orderAddUrl, null,String.class, paras);   rest.postForEntity(userBalanceU...

1
1
发表了资讯
04/23 12:34

BeetlSQL 3.3.12 发布,Java 的 DAO 工具

本次发布了修改了一个严重的Bug,强烈建议升级 Spring框架下,修复读取metadata时候占用数据库链接而没有释放,导致链接资源池耗光 修复了对boolean 原始类型的的映射支持 增强MySql的KeyHandler 使用新的方式判断系统版本是否是JDK8以上 对所有单元测试中数据库连接池的配置个数设置为1,以方便以后查找链接池泄露问题 感谢使用者的迅速反馈以及指出问题所在,BeetlSQL的用户越来越多,越来越强 <dependency> <groupId>com...

2
4
发表于开发技能专区
04/16 12:59

BeetlSQL 3.3.10 发布,Java 的 DAO 工具

本次发布做了如下更新: 人大金仓数据库支持,Bug修复 更新sql-solon-plugin::solon 升级为1.3.20 <dependency> <groupId>com.ibeetl</groupId> <artifactId>beetlsql</artifactId> <version>3.3.10-RELEASE</version> </dependency> BeetlSQL 研发自2015年,目标是提供开发高效,维护高效,运行高效的数据库访问框架,它适用范围广,性能高,维护性好,写起数据库访问代码特别顺滑。目前支持的数据库如下 传统数据库...

7
7
发表了资讯
03/28 21:09

BeetlSQL 3.3.8 发布,Java 的 DAO 工具

本次发布修复了若干Bug TD-Engine中使用内置SQL中,使用where标签代替 1=1,目前版本的TD-Engine不支持sql中1=1的表达式 在一些不支持JDBC metadata的某些NOSql上,屏蔽对POJO的类型检测以避免报错。更好的支持NoSQL 修复在Mapper方法中,使用枚举类,没有经过BeetlSQL对枚举的预处理 代码生成,允许指定数据库日期对应的Java类型 修复加载Markdown文件时候,并发导致加载错误的问题,建议升级 <dependency> <groupId>com...

1
2
发表于数据库专区
03/01 10:13

BeetlSQL 3.3.3 发布,Java 的 DAO 工具

此次发布增强了代码生成功能 SpringBoot集成的时候,可以在有Swagger集成情况下,内置了org.beetl.sql.starter.CodeGenController,一个Rest 接口,用户可以导入此Controller 来为自己系统提供代码生成API。API提供根据表生成Entity,Mapper,Markdown,数据库文档功能,并提供预览,生成到工程,库所有表生成到工程 @Bean public CodeGenController codeGenController() { return new CodeGenController(); } 修复按照JSO...

4
2
发表于数据库专区
02/23 10:31

BeetlSQL 3.3.1 发布,Java 的 DAO 工具

实现db.dynamicSql 方法,此方法在从2升级到3的时候,遗漏了其实现。参考例子中的includeDynamicSql unique方法未查询到结果集,抛出的异常信息里增加了 主键信息,以方便在未打开DebugInterceptor的时候仍然能看到错误详细信息 <dependency> <groupId>com.ibeetl</groupId> <artifactId>beetlsql</artifactId> <version>3.3.1-RELEASE</version> </dependency> BeetlSQL 的目标是提供开发高效,维护高效,运行高效...

0
5
发表于开发技能专区
02/10 09:59

BeetlSQL 3.3.0 发布,新年快乐

没错,BeetlSQL又发版本了,感谢这么多用户提供建议和发现BUG,BeetlSQL成为2020年最积极运营的开源项目之一 :) BeetlSQL3 集成 ActFramework ,Act框架是一个非常强大的Web框架 修复了自从3.x以来可能导致内置SQL找不到的BUG,建议升级 增强了Clickhouse集成,Clickhouse 不支持“主键”,BeetlSQL为CH提供自定义的MetaDataManager以支持@AssignId。 <dependency> <groupId>com.ibeetl</groupId> <artifactId>bee...

3
3
发表于数据库专区
02/05 17:07

BeetlSQL 3.2.10 发布,Query 功能增强

完善了Sql类型说明 修复Query类在使用无KeyHandler的时候的Bug 增强了Query类的page查询方法,允许使用PageRequest接口 <dependency> <groupId>com.ibeetl</groupId> <artifactId>beetlsql</artifactId> <version>3.2.10-RELEASE</version> </dependency BeetlSQL 的目标是提供开发高效,维护高效,运行高效的数据库访问框架,以我20年在电信,金融以及互联网天天CRUD的经验总结得来的框架,适用范围广。目前支持的...

2
4
发表于数据库专区
02/03 11:40

BeetlSQL 3.2.9 发布,翻页查询 BUG 修复

本次发布修复了翻页查询BUG,建议修复。 BeetlSQL默认情况下会为查询语句自动生成翻页查询语句和计算总数的SQL语句,然而计算总数的SQL语句并不一定能是最优的,可以优化,BeetlSQL允许用户提供计算总数的SQL语句。比如如下queryByCondition2如果还有queryByCondition2$count语句,则不会使用自动生成的count语句。 queryByCondition2 === ```sql select #{page()} from sys_user where 1=1 ${use("nameCondition")} o...

10
3
发表于数据库专区
01/26 10:39

BeetlSQL 3.2.8 发布,超好用的 Java 数据库访问工具

本次发布增加了一个贴心功能,可以限制Mapper方法中的SQL长度,以避免过长SQL导致难以维护 配置属性 MAPPER_SQL_MAX_LENGTH,限制Mapper中的SQL长度,默认不限制 代码自动生成的ID使用@AssingID 无论是JAP,还是SpringData,还是MyBatis,还是BeetSQL,都支持Mapper中使用注解指明SQL语句,以BeetlSQL为例子 @Sql("select * from user where dept_id=?") List<User> selectByDept(Integer deptId); @Template("select * ...

3
6
发表于数据库专区
01/21 15:10

BeetlSQL 3.2.7 发布,Java 数据库访问工具

BeetlSQL 3.2.7 已经发布了,此版本更新内容包括: 代码生成到Maven项目中的Bug修复 代码生成POJO模板修改 人大金仓数据库DBStyle去掉KeyHandler <dependency> <groupId>com.ibeetl</groupId> <artifactId>beetlsql</artifactId> <version>3.2.7-RELEASE</version> </dependency> BeetlSQL 的目标是提供开发高效,维护高效,运行高效的数据库访问框架,在一个系统多个库的情况下,提供一致的编写代码方式。支持如下...

1
1
发表于开发技能专区
01/14 10:23

BeetlSQL 3.2.6 发布,建议升级

本次发布修复了3.2以来重构导致batch操作未关闭数据库链接,此Bug不影响与Spring等含事务管理框架的代码,但影响非事务下的代码,建议升级 修复 batch 更新和插入 导致数据库连接未关闭 增强 代码生成中指定代码生成目录如果不存在,则先建立此目录 兼容2.x,中通过DbStyle来指定数据库主键的使用方式,而强制要求使用注解 <dependency> <groupId>com.ibeetl</groupId> <artifactId>beetlsql</artifactId> <version...

5
4
发表于数据库专区
2020/12/29 13:05

BeetlSQL 3.2.3 发布,Java 数据库访问工具

日常的版本更新,包含如下内容 solon 集成使用最新版本1.2.12 新增DebugInterceptor的子类SimpleDebugInterceptor,简化SQL日志输出 SpringBoot集成新增参数 beetlsql.xxx1.sqlFileCharset,用于自定Markdown文件字符集 <dependency> <groupId>com.ibeetl</groupId> <artifactId>beetlsql</artifactId> <version>3.2.3-RELEASE</version> </dependency> BeetlSQL 的目标是提供开发高效,维护高效,运行高效的数据...

1
4
发表于数据库专区
2020/12/21 10:32

BeetlSQL 3.2.0 发布,多库和微服务事务支持

本次发布主提供多库和微服务事务支持,使用了 BeetlSQL 的自带的 Saga 实现 新增多库和微服务 Saga 实现 修复代码生成因为重构带来的问题 Saga文档 Maven <dependency> <groupId>com.ibeetl</groupId> <artifactId>beetlsql</artifactId> <version>3.2.0-RELEASE</version> </dependency> Saga 初期是长事务的解决方案,微服务流行后也可以为微服务提供事务解决方案。不同于传统的数据库事务或者 2 阶段提交,必须·...

1
5
发表于数据库专区
2020/12/18 14:31

BeetlSQL 3.1.5 发布,Java 数据库访问工具

修复了升级到3以来一直存在的俩个问题 @Version 在insert和update的时候错误修复 @LogicDelete 在调用deleteById的错误修复 <dependency> <groupId>com.ibeetl</groupId> <artifactId>beetlsql</artifactId> <version>3.1.5-RELEASE</version> </dependency> BeetlSQL的目标是提供开发高效,维护高效,运行高效的数据库访问框架,在一个系统多个库的情况下,提供一致的编写代码方式。支持如下数据平台 传统数据库:...

5
6
发表于数据库专区
2020/12/17 12:08

BeetlSQL 3.1.4 发布,Java 数据库访问工具

本次修复了@Version和@LogicDelete 实现Bug 修复从2升级到3后@Version和@LogicDelete 错误实现。此错误会在执行的时候抛出异常而停止执行 maven <dependency> <groupId>com.ibeetl</groupId> <artifactId>beetlsql</artifactId> <version>3.1.3-RELEASE</version> </dependency> BeetlSQL的目标是提供开发高效,维护高效,运行高效的数据库访问框架,在一个系统多个库的情况下,提供一致的编写代码方式。支持如下数...

0
2
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
2020/01/03 15:03

打算重写BeetlSQL

新年做开源欲望不强烈了,主要原因 - 事业一塌糊涂,想好好干工作(尽管在帝都有车有房,当比起哪些专注事业的人来说,还是差很多) - 养家糊口很重要,累计开源几年下来得利不超过8000元,还不如上几天班得钱,对得起开源使用者,更得对得起老板 - 个人开源越来越难以匹敌那种公司开源,或者以各人名义的公司开源.我认为个人英雄时代要结束了。几次开源上的非理性PK,已经有点心灰意冷 - 年纪大了,开源也搞过,书也写了,是时候...

5
0
发表于软件架构专区
2020/07/15 15:33

BeetlSql中的Mapper

本文转载自CSDN博主「象在舞」的博文BeetlSql中的Mapper BeetlSql中的Mapper 本文参考BeetlSql官方网站,官网网站请点击这里~ 一、使用Mapper BeetlSql支持Mapper,它可以将sql文件映射到一个interface接口。接口的方法名与sql文件的sqlid一一对应。接口必须实现BaseMapper接口(后面可以自定义一个Base接口),它提供内置的CRUD方法,如insert,unique,template,templateOne,updateById等。BaseMapper 具备数据库常见的操作...

0
0
发表了博客
2020/03/26 12:53

BeetlSQL 3.0 进展

目前搞了20%了,主要完成了SQL执行前的一些准备操作,加油吧,搞了2个月才20%,希望后面进展快点 关于3.0的新特性,在 https://gitee.com/xiandafu/beetlsql/blob/3.0/3.0.md . 3.0最主要的俩个变化就是支持NOSQL,以及整个框架更加弹性,容易扩展

0
0
发表于服务端专区
2017/09/26 21:59

Beetlsql扩展之自定义Mapper

BeetlSql 有一个BaseMapper,提供了很多内置的Dao操作,如增删改查等10几个方法,用户只需要些一个类继承此接口便能很快的完成一个Dao,比如 ``` public interface UserDao extends BaseMapper{ } ``` UserDao没有包含任何方法,但集成了BaseMapper,因此具备了很多内置的Dao操作。如果这些操作不满足要求,可以使用BeetlSql的MD文档来维护复杂的SQL,比如,一个根据角色查询所有用户的操作 ``` @SqlResource("common.user") pu...

0
0
2016/08/21 20:44

BeetlSQL 实现 ORMapping查询

我在 hibernate,mybatis,beetlsql 全面比较 中说明了BeetlSQL 在开发效率,维护性,跨数据库等各指标全面比hibernate 占优,但在ORM 方面不如Hibernate,这么多年来,hibernate已经成为Java的 ORMapping事实上的标准和方向,但我也在文章中指出,通过注解Annotation能指明java实体类的关系,但通过注解不能阐述所有的ORM查询,比如,我想查询跟订单关联的所有有效子订单,而不是所有子订单。 注解的表现力在ORMapping 中越来越不...

11
1
2020/07/15 17:21

BeetlSQL 3 功能预览

BeetlSQL 3 目前正在研发过程,预计9月能发版。相比于BeetlSQL2,有非常多的改进,本博客会用一部分介绍BeetlSQL3的功能,另外一部分介绍如何定制Beetl3。 BeetSql是一个全功能DAO工具, 同时具有Hibernate 优点 & Mybatis优点功能,适用于承认以SQL为中心,同时又需求工具能自动能生成大量常用的SQL的应用 文档较长,可以点击右侧的目录导航到你想关注的内容 > 目前BeetlSQL3 还有大量工作需要完善,欢迎留言给我,可以加入开发...

4
2
发表于服务端专区
2019/03/18 21:26

beetlsql 命名修复

import org.beetl.sql.core.UnderlinedNameConversion; import org.beetl.sql.core.kit.StringKit; /** * */ public class YJUnderlinedNameConversion extends UnderlinedNameConversion { public String getPropertyName(Class<?> c, String colName) { return deCodeUnderlined(colName); } @Override public String getColName(Class<?> c,String attrName) { if(attrName.split...

0
0
发表了博客
2019/07/10 16:04

ACT 与 Beetlsql 的搭配使用 一

# 扩展课程 第一章 ACT 与 Beetlsql 的搭配使用. 一. 什么是 BeetlSQL BeetlSQL 是国内知名开源作者闲大赋的最新力作. 主要的目标是代替 Mybatis . 相比 Mybatis 优势在于: - MarkDown 维护复杂 SQL,比用 XML 文档里写 SQL 前进一大步 - 内置 CRUD 等常用 API - Query 链式查询,强烈推荐使用的新姿势! - 支持 POJO,也支持 Map 或者混合模型 - 主从支持和 Sharding-JDBC 分表分库集成 入门BLOG: https://my.oschina.net/xianda...

2
2
发表了博客
2019/07/10 18:41

ACT 与 Beetlsql 的搭配使用 二

# 第2章 ACT 与 Beetlsql 的搭配实战 上一节为了便利,我们使用 H2 做为示例数据库,本节我们将使用国内目前最多人使用的 MySQL,来实战一下. 在本节里我们一起学习: 1. ACT里如何连接数据库及配置多个数据源 2. ACT里如何配置特定的数据库连接池 3. 项目的通用结构 4. BeetlSQL 链式查询新姿势 同样的,您需要先下载示例项目: https://github.com/mailtous/act-eagle-allone 注意:这是本人写的示例项目,您可以当作是 ACT+BeetlSQL...

0
0
发表于软件架构专区
2018/04/08 15:33

5分钟 BeetlSQL 快速入门

# 企业应用面临的问题 * 高效编写数据库访问代码 * 内置CRUD,不需要写SQL * 支持OR/Mapping * 悲观锁,乐观锁,逻辑删除等辅助支持等 * 即支持简单的CRUD,也支持数十行,上百行SQL编写 * 跨数据库平台支持,Oracle,Postgres,Mysql,以及SQLServer,DB2,H2,SQLLite,包括翻页,排序,还有各个厂商特殊语法 * 易于维护 * 重构支持 * 易于修改 * DBA友好 * 丰富的调试手段,详细日志输出 * Interceptor支持:具备SQL执行监控,S...

1
12
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了问答
2017/02/27 16:52

beetlSQL新增数据的时候获取主键的方式

public int save(Member member) { UUIDGenerate.UUID(sqlManager); KeyHolder keyHolder = new KeyHolder(); sqlManager.insert(Member.class,member,keyHolder); String key = keyHolder.getKey().toString(); 看了下文档,对获取的主键的方式还不不太理解。。是否可以这样?...

2
0
发表于开发技能专区
2019/11/08 11:25

在.md里写的自定义的insert语句,如何返回主键

@闲大赋 您好,想跟您请教个问题: 比如一个名叫 goods 的表 只有 id(主键) 和 goods_name 俩个字段,当我在.md文件里写了一句新增语句(如下所示),我需要怎样修改才能在新增成功后的实体里得到 id。 INSERT INTO `goods` ( `goods_name` ) VALUES ( #goodsName# )

1
0
发表了问答
2017/02/17 10:39

beetlSQL的内置updateById更新数据的时候 set值默认不进行非空判断吗

beetlSQL的内置updateById更新数据的时候 set值默认不进行非空判断吗, 目前发现的是 例如 user对象中包含了 id,name,age,state 如果表单只提交了 id,name,age那么生成的sql会将state设置为null,导致原有值丢失

3
0
发表于软件架构专区
2018/12/19 10:29

beetlsql

@闲大赋 你好,想跟你请教个问题:beetl有没有直接处理存储过程结果集的方法

1
0
发表了问答
2017/11/21 19:55

高手问答第 178 期 —— Beetl 作者带来的分布式架构分享

OSCHINA 本期高手问答(11 月 22 日 - 11 月 28 日)我们请来了@闲大赋 李家智为大家解答关于 Spring Boot 2 分布式架构方面的问题。 李家智,出生在贵州,毕业于成都西南民族大学。现在就职于东方金科公司,担任架构师,负责公司技术产品研发。从事软件开发近 20 年,致力于 Java 和 Java EE 系统的架构和实现,对一切技术充满好奇,以知行合一要求自己。除了本书,也是国内流行开源 Beetl 模板语言和 Dao 工具 BeetlSQL 的作者。...

140
58
发表了问答
2017/02/14 14:45

BeetlSQL 单字段保存异常

BeetlSQL不能生成这样的SQL语句:INSERT INTO order_no() VALUE(); 需求是用一个表的ID做单号生成,避免单号重复。 public class OrderNo extends BaseEntity {   private static final long serialVersionUID = 1L;   // ID   private Integer id; // 创建时间   private Timestamp created;   // 修改时间   private Timestamp modified;   public OrderNo() {   } @ColumnIgnore(insert = true, update = true)   public T...

11
0
发表了问答
2017/02/09 14:53

beetlsql SQL 模板参数日期格式化无效

sql模版 page === * 用一个sql做翻页查询,page将输出 count(1) 或者 u.* select #page("o.*")# from order o where 1=1 @if(!isEmpty(orderTime)){ and DATE_FORMAT(o.order_time,'%Y-%m-%d') = #orderTime,"yyyy-MM-dd"# @} 参数对象: /* * gen by beetlsql 2017-02-08 */ public class Order extends BaseEntity {   private static final long serialVersionUID = 1L;   // ID   private Integ...

16
0
发表了问答
2017/01/19 17:11

Spring boot 集成 beetlsql运行警告,但不影响使用

系统按照 http://git.oschina.net/xiandafu/springboot_beetl_beetlsql 示例搭建。 代码如下: /** * Dao基类 <br/> */ public interface BaseDao<T> extends BaseMapper<T> {} /** * 用户 <br/> */ public interface UserDao extends BaseDao<User> {} 配置部分代码 @SpringBootApplication public class WebConfig extends WebMvcConfigurerAdapter {   /**    * beetlSql 扫描包. <br/>    */   @Bean(name = "beetlSqlSca...

6
0
发表了问答
2017/01/10 16:42

beetlSQL主键无法生成

5
0
发表了问答
2016/12/16 15:44

user.findById接口参数如下位置{0=没有申明params的参数}定义错误,无法映射

public interface UserDao extends BaseMapper<User>{ User findById(String id);   }   public class UserServiceImpl implements UserService { @Autowired     private UserDao userDao;          @Override       public User findById(String id) {      return userDao.findById(id);     } }    findById  ===   select * from user where id = #id# 这个是代码...

1
0
发表了问答
2016/12/08 16:27

beetlsql类型转换问题

@闲大赋 你好,想跟你请教个问题: oracle数据库类中的TIMESTAMP不能转换成Date类型,只能转成Timestamp类型,使用起来有点不方便 Mybatis就可以转的,希望beetlsql也可以支持下

1
0
发表了问答
2016/11/01 11:57

是否支持DB2数据库?

@闲大赋 你好,想跟你请教个问题:是否支持DB2数据库?多谢多谢!

1
0
发表了问答
2016/06/30 17:00

为啥删不了自己的问题?

为啥删不了自己的问题?

8
0
发表了问答
2016/05/14 13:36

怎么使用beetlsql的自定义方法?

@闲大赋 你好,想跟你请教一个问题: 1 beetlsql里面怎么使用自定义方法? 按照demo里的操作方式,提示 “该方法未注册”呢 ! 郁闷!

5
0
发表了问答
2015/12/26 17:24

beetlsql git上面提的几个bug给解决下。

@闲大赋 你好,想跟你请教个问题: http://git.oschina.net/xiandafu/beetlsql/issues beetlsql 问题还很多,还需要加油!!

1
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
30 评论
651 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部