BeetlSQL 正在参加 2021 年度 OSC 中国开源项目评选,请投票支持!
BeetlSQL 在 2021 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
2021 年度 OSC 中国开源项目评选 正在火热进行中,快来投票支持你喜欢的开源项目!
2021 年度 OSC 中国开源项目评选 >>> 中场回顾
BeetlSQL 获得 2021 年度 OSC 中国开源项目评选「最佳人气项目」 !
授权协议 BSD
开发语言 Java 查看源码 »
操作系统 跨平台
软件类型 开源软件
开源组织
地区 国产
投 递 者 闲大赋
适用人群 未知
收录时间 2015-08-26

软件简介

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

  • 传统数据库:MySQL (包括支持MySQL协议的各种数据库), MariaDB ,Oralce ,Postgres (包括支持 Postgres 协议的各种数据库), DB2 , SQL Server ,H2 , SQLite , Derby ,神通,达梦,华为高斯,人大金仓,PolarDB,GBase8s,GreatSQL 等
  • 大数据: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 指数为
超过 的项目

评论

点击加入讨论🔥(34) 发布并加入讨论🔥
发表了资讯
03/11 10:25

BeetlSQL 3.30.2 发布,支持 30+ 数据库的 ORM

BeetlSQL 研发自 2015 年,核心和生态扩展全部自研。目标是提供开发高效,维护高效,运行高效的数据访问框架,它适用范围广,定制性强,入门快。 阅读文档 源码和例子 在线体验 多库使用 性能测试 插件支持 本次调整: 合并PR:适配sqlserver+代码生成模块增强, SQLServer的列注释将从系统表获取 代码生成新增是否允许null BeetlSQL 核心功能 BeetlSQL 核心 功能 sql-core 核心包,封装了 JDBC 操作,SQL 文件管理,注解的注解管...

3
2
发表了资讯
01/31 09:58

BeetlSQL 3.30.0 发布,Trino 查询引擎支持

BeetlSQL 研发自 2015 年,核心和生态扩展全部自研。目标是提供开发高效,维护高效,运行高效的数据访问框架,它适用范围广,定制性强,入门快。 阅读文档 源码和例子 在线体验 多库使用 性能测试 插件支持 本次调整: Trino 数据库支持 builder.setDbStyle(new TrinoStyle()); SQLManager sqlManager = builder.build(); TrinoOrderMapper mapper = sqlManager.getMapper(TrinoOrderMapper.class); //方便虚拟一个主键查询...

5
1
发表了资讯
01/24 09:48

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

BeetlSQL 研发自 2015 年,核心和扩展全部自研。目标是提供开发高效,维护高效,运行高效的数据访问框架,它适用范围广,定制性强,入门快。 阅读文档 源码和例子 在线体验 多库使用 性能测试 插件支持 本次调整: Apache Doris 数据库支持 sql-dynamic-table 不支持timestamp和bye[] 类型修复 solon框架集成更新到最新版本 更新beetl,修复beetl不支持char类型 SQLManager sqlManager = builder.build(); //doris没有传统数...

1
1
发表了资讯
01/22 09:59

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

BeetlSQL 研发自 2015 年,核心和扩展全部自研。目标是提供开发高效,维护高效,运行高效的数据访问框架,它适用范围广,定制性强,入门快。 阅读文档 源码和例子 在线体验 多库使用 性能测试 插件支持 本次调整: sqlparser 升级到4.7,并修复兼容问题 sql-dynamic-table bug修复,使用asm直接生成entity类 query的逻辑删除功能修复,当执行update或者updateselective 报错 BeetlSQL 核心功能 BeetlSQL 核心 功能 sql-core 核心...

1
1
发表了资讯
01/15 09:43

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

BeetlSQL 研发自 2015 年,核心和扩展全部自研。目标是提供开发高效,维护高效,运行高效的数据访问框架,它适用范围广,定制性强,入门快。 阅读文档 源码和例子 在线体验 多库使用 性能测试 插件支持 本次调整: 接收 Pull Request,批量更新可以指定多组SQL和参数。 修复存储过程调用,不支持多个返回参数的BUG sql-tenant 扩展包改名为sql-rewrite,通过sql重写支持多租户,逻辑删除,数据权限 RewriteConfig rewriteC...

0
0
发表了资讯
2023/12/11 10:18

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

BeetlSQL 研发自 2015 年,非 MyBatis 扩展,全部自研。目标是提供开发高效,维护高效,运行高效的数据访问框架,它适用范围广,定制性强 阅读文档 源码和例子 在线体验 多库使用 性能测试 插件支持 本次调整: 接收 Pull Request,针对sqlite不支持getGeneratedKeys的优化 验证高版本的MariaDB的存储过程封装调用支持 public interface MyTestMapper extends BaseMapper {   @Call("call test.logcount(?,?)")   @Update   ...

2
1
发表了资讯
2023/11/20 09:26

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

修复了一个不兼容调整 DebugInterceptor 截取sql输出 修复upsert方法,当存在乐观锁的字段时候,执行update操作更新乐观锁字段 BeetlSQL 最新扩展包 BeetlSQL 扩展包 功能 sql-xml 高仿 myabtis 的 xml 语法,如果有想喜欢使用 xml 写 sql 模板的,可以使用此扩展包 sql-accelerator 性能加速包,通过反射优化,缓存,让 beetlsql 性能提升 50%-200%,接近一半手写 JDBC 的性能 sql-firewall sql 防火墙,避免不小心写的 sql 破...

2
0
发表了资讯
2023/09/04 11:34

BeetlSQL 3.25.3 发布,流行国产 ORM 工具

BaseMapper增加 updateByIdBatch实现,通过AutoMapper申明接口函数的实现类 public interface BaseMapper<T> { .....   @AutoMapper(UpdateByIdBatchAMI.class)   int[] UpdateByIdBatch(List<?> list); } 2 重定义RewriteBaseMapper,所有继承RewriteBaseMapper的DAO,将发生SQL重写,以实现多租户,数据权限等功能。增加@DisableRewirte,可以关闭重写功能。 public interface RewriteBaseMapper<T> extends Base...

0
4
发表了资讯
2023/08/28 10:22

BeetlSQL 3.25.0 发布,单表多租户模式支持

修复性能加速扩展包不支持 primitive 类型数据 增强XML扩展包与SpringBoot框架集成能力 增加单表多租户模式的支持,使用sql重写功能 BeetlSQL 支持多数据源,多表这俩种租户实现模式,也支持单表实现多租户模式,单表租户模式使用SQL重写扩展包来完成。 BeetlSQL最新扩展包 BeetlSQL扩展包 功能 sql-xml 高仿myabtis的xml语法,如果有想喜欢使用xml 写sql模板的,可以使用此扩展包 sql-accelerator 性能加速包,通过反射优化,缓...

5
3
发表了资讯
2023/08/20 23:19

BeetlSQL 3.24.0 发布,SQL 扩展包正式发布

1) 正式发布5个BeetlSQL扩展包,位于sql-ext 模块下 发布 sql-xml 扩展包,高仿myabtis的xml语法 发布 sql-bean-encrypt 扩展包,支持注解 MD5,AES,DES等 发布 sql-dynamic-table 扩展包,支持像操作静态表格一样操作动态表格 发布 sql-firewall 扩展包,避免误写SQL 破坏数据库 发布 重构版本的sql-accelerator 扩展包,使得BeetSQL的性能快的飞起来 2) 正式支持不严格的JavaBean定义 SQLManager.javabeanStrict(false)...

11
2
发表了资讯
2023/08/14 10:21

BeetlSQL 3.23.11 发布,SQL 查询性能提高 40%~300%

性能优化:SQL查询后结果映射到Java Entity,性能至少提供40%,有些场景提高300% 更好的支持动态表,向操作普通POJO一样操作动态表,比使用Map更方便 代码生成支持指定父类 SQ防火墙的性能部分优化 性能优化结果: 查询 优化前(ops/ms) 优化后(ops/ms) mybatis beetlsqlExecuteJdbc 222 318 / beetlsqlExecuteTemplate 198 268 44 beetlsqlFile 191 266 41 beetlsqlGetAll 5 13 4 beetlsqlLambdaQuery 150 196 9 beetlsqlPageQue...

10
3
发表了资讯
2023/08/11 09:26

BeetlSQL 3.23.10 发布,Java 流行 ORM 工具

springboot集成选项增加disableOn配置,当存在指定的系统属性的时候,sqlManager失效。有助于Spring应用启动不可用的情况下不配置BeetlSQL 针对lombok的data注解生成属性与JavaBean规范不一致情况,导致BeetlSQL无法找到属性问题,提出一个兼容方案 如 int aBc ; 不同框架生成不同getter方法 //lombok public int getABc() //其他框架,如ide public int getaBc(); maven <dependency> <groupId>com.ibeetl</gr...

6
1
发表了资讯
2023/08/07 10:47

BeetlSQL 3.23.9 发布,SQL防火墙支持

本次调整把BeetlSQL的扩展调整到beetlsql-ext模块下,包含如下子模块 sql-xml: XML文件支持,允许使用类似MyBatis的XML语法写BeetlSQL的SQL文件 sql-firewall: SQL防火墙支持,允许对发送到数据库的SQL检查,避免一些常见的SQL错误 sql-accelerator: 对BeetlSQL进行扩展,提升性能,通过此模块,性能提升30% 如下给高仿myabtis的xml语法,使用了Beetl模板引擎实现 <?xml version="1.0" encoding="UTF-8" ?> <beetlsql>   <s...

3
3
发表了资讯
2023/08/04 10:09

BeetlSQL 3.23.7 发布,新增 MyBatis-Flex、EasyQuery 性能测试

调整SqlIdFactory实现,使用类全路径名作为sqlId标识 调整BeetlSQL+SpringBoot集成方式,支持SpringBoot3 新增MyBatis-Flex,EasyQuery 俩款ORM工具性能测试 maven <dependency> <groupId>com.ibeetl</groupId> <artifactId>beetlsql</artifactId> <version>3.23.7-RELEASE</version> </dependency> BeetlSQL 自主研发自 2015 年,目标是提供开发高效,维护高效,运行高效的数据访问框架,它适用范围广,定制...

17
0
发表了资讯
2023/07/31 10:09

BeetlSQL 3.23.6 发布,枚举优化

SQLManagerExtends 增加API,自定义枚举转化方式 修复上个版本Oralce12 翻页Bug 性能测试增加最新的Mybatis-Flex 修复开发模式下,某些SQL无法自动检测变化的BUG maven <dependency> <groupId>com.ibeetl</groupId> <artifactId>beetlsql</artifactId> <version>3.23.6-RELEASE</version> </dependency> BeetlSQL 自主研发自 2015 年,目标是提供开发高效,维护高效,运行高效的数据访问框架,它适用范围广,...

0
1
发表了资讯
2023/07/05 18:32

BeetlSQL 3.23.4 发布,Oracle12 优化

针对Oralce12,新增Oralce12Style,使用新语法Fetch优化翻页 Oracle默认能支持表,试图,同义词 更新Beet版本到最新版本 maven <dependency> <groupId>com.ibeetl</groupId> <artifactId>beetlsql</artifactId> <version>3.23.4-RELEASE</version> </dependency> BeetlSQL 自主研发自 2015 年,目标是提供开发高效,维护高效,运行高效的数据访问框架,它适用范围广,定制性强,写起数据库访问代码特别顺滑,...

0
2
发表了资讯
2023/05/22 10:26

BeetlSQL 3.23.1 发布,批处理优化

* 优化 #I73HGK 批处理过程的跟踪 ,默认情况下,jdbc batch 操作,只会打印第一条sql以及第一条的参数,在调用 sqlManager.setBatchLogOneByOne(true) JDBC的批量操作将仍然使用jdbc batch,但每条操作都会被记录下来,方便debug或者审计使用。如下批量操作,将产生2条日志 sqlManager.setBatchLogOneByOne(true);//需要初始化sqlmanager时候调用 User user = new User(); user.setNa...

0
3
发表了资讯
2023/04/03 01:01

BeetlSQL 3.21.0 发布,支持 XML 管理 SQL 文件

修复开发模式SQL文件不能自动刷新的BUG 在MarkDown管理SQL的能力外,新增XML文件管理SQL,并提供类似MyBatis的XML语法标签(基于Beetl对XML标签支持)。 <?xml version="1.0" encoding="UTF-8" ?> <beetlsql>   <sql id="testIf">     select * from sys_user where 1=1     <if test="name!=null">       and name != #{name}     </if>   </sql>   <sql id="testIsNotEmpty">     select * from sys_user where 1=1     <isNotEmp...

4
7
发表了资讯
2023/03/12 20:04

BeetlSQL 3.20.3 发布,流行 Java ORM 工具

修复 @ResultProvider (AutoJsonMapper.class) 注解与自定义 AttributeConvert 注解冲突 @Data @ResultProvider(AutoJsonMapper.class) public static class MyUserView { Integer id; String name; DepartmentEntity dept; @UpdateTime Date createTime } FetchOne和FetchMany允许条件注解,但符合一定条件时候才发生Fetch。这样可以避免Hibernate,JPA那些无效关联操作 ...

2
2
发表了资讯
2023/02/01 10:16

BeetlSQL 3.20.0 发布,流行 Java ORM 工具

阳康后继续开源,本次发布建议更新 I6B7AN 修复注解@InheritMapper 解析映射目标为Object的BUG public static interface CommonMapper<T> extends BaseMapper{ @InheritMapper public List<T> implementByChild(T t); } @SqlResource("user") public static interface MyTestUserMapper extends CommonMapper<User>{   //implementByChild 的映射对象是User, 查找文件是user.md中的implementByChild } ...

3
1
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
发表了博客
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
发表了问答
{{o.pubDate | formatDate}}

{{formatAllHtml(o.title)}}

{{parseInt(o.replyCount) | bigNumberTransform}}
{{parseInt(o.viewCount) | bigNumberTransform}}
没有更多内容
暂无内容
暂无内容
34 评论
669 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部