自定义动态SQL标签(易用,效率高)

简介: 1.List, Set转SQL in2. 批量插入操作都无需foreach


1.List, Set转SQL in
定义的sql:

select * from orders where userid in #{userid @in}

Java代码:

        Map<String, Object> map = new HashMap<>();
        
        List<String> list=new ArrayList<>();
        list.add("bee");
        list.add("orders3");
        list.add("orders4");
        map.put("userid", list);

        select(sqlIn, map);


private static void select(String sql,Map<String,Object> map) {
    List<Orders> list3 = preparedSql.select(sql, new Orders(), map,1,3);//map
    for (int i = 0; i < list3.size(); i++) {
        Logger.info(list3.get(i).toString());
    }
}

生成的sql:

[INFO] [Bee] ========= get the dbName from the Connection is :MySQL

[INFO] [Bee] PreparedSql select SQL: ( ExecutableSql )
select * from orders where userid in ('bee','orders3','orders4')
[INFO] [Bee] | <-- select rows: 5

Bee V1.11 对in操作,支持List, Set两种类型

  1. 批量插入操作

无需像foreach之类的标签, Bee框架会自动为我们处理.

    final String USERID="userid";
    final String NAME="name";
    final String ID="id";
    Map<String,Object> insertMap1=new HashMap<>();
    insertMap1.put(USERID, "1001");
    insertMap1.put(NAME, "bee");
    insertMap1.put(ID, 121L);
    
    Map<String,Object> insertMap2=new HashMap<>();
    insertMap2.put(USERID, "1001");
    insertMap2.put(NAME, "bee");
    insertMap2.put(ID, 122L);
    
    Map<String,Object> insertMap3=new HashMap<>();
    insertMap3.put(USERID, "1001");
    insertMap3.put(NAME, "bee");
    insertMap3.put(ID, 123L);
    
    List<Map<String, Object>> parameterMapList=new ArrayList<>();
    parameterMapList.add(insertMap1);
    parameterMapList.add(insertMap2);
    parameterMapList.add(insertMap3);
    

    //        preparedSql.insertBatch(sql9, parameterMapList,2);

    preparedSql.insertBatch(sql9, parameterMapList);

生成的sql:

INSERT INTO orders(id,name,userid) VALUES (?,?,?), (?,?,?), (?,?,?)

可以看到,使用Mysql时,Bee框架会为我们智能的添加多组占位符.

3. ,

select * from orders where userid in #{userid@in}

当#{userid@in}里声明的参数userid的值不为null时,还解析之前的代码.

类似,表示不为null且不为空字符时,才解析.

select * from orders where name like #{%name}

当不解析if时,

sql变为:select * from orders where,

Bee为自动将where删除. 变成正确的: select * from orders

4.@toIsNULL1,@toIsNULL2
我们看下这个SQL自定义语句.

select * from orders where userid=#{userid}

当userid为null时,会转成
 

select * from orders where userid=null

这是不对的.应该是:

select * from orders where userid is null

使用@toIsNULL1和@toIsNULL1就可以解决这个问题.当是null时, 就转成is null.
 

select * from orders where userid=#{userid @toIsNULL1}

select * from orders where id>=#{id@toIsNULL2}

@toIsNULL1,@toIsNULL2后面的数字1和2是告诉Bee框架,要将标签前的一个或两个字符删除.

一般是"="或">="之类的符号.

相关文章
|
SQL Java 测试技术
3、Mybatis-Plus 自定义sql语句
这篇文章介绍了如何在Mybatis-Plus框架中使用自定义SQL语句进行数据库操作。内容包括文档结构、编写mapper文件、mapper.xml文件的解释说明、在mapper接口中定义方法、在mapper.xml文件中实现接口方法的SQL语句,以及如何在单元测试中测试自定义的SQL语句,并展示了测试结果。
3、Mybatis-Plus 自定义sql语句
|
10月前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
11月前
|
SQL 数据库 开发者
ClkLog埋点分析系统支持自定义SQL 查询
本期主要为大家介绍ClkLog九月上线的新功能-自定义SQL查询。
ClkLog埋点分析系统支持自定义SQL 查询
|
12月前
|
SQL XML Java
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
文章介绍了MyBatis中动态SQL的用法,包括if、choose、where、set和trim标签,以及foreach标签的详细使用。通过实际代码示例,展示了如何根据条件动态构建查询、更新和批量插入操作的SQL语句。
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
|
SQL Java 数据库连接
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
idea中配置mybatis 映射文件模版及 mybatis plus 自定义sql
393 3
|
SQL DataWorks 关系型数据库
DataWorks产品使用合集之数据集成时源头提供数据库自定义函数调用返回数据,数据源端是否可以写自定义SQL实现
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
SQL Java 数据库连接
mybatis动态SQL常用语法总结
MyBatis 使用 OGNL 表达式语言处理动态SQL,如 `if` 标签进行条件判断,`choose`、`when`、`otherwise` 实现多条件选择,`where`、`set` 管理SQL关键字,`trim` 提供通用修剪功能,`foreach` 遍历集合数据。`sql` 和 `include` 用于代码重用,`selectKey` 处理插入后的返回值。参数传递支持匿名、具名、列表、Map、Java Bean和JSON方式。注意SQL转义及使用合适的jdbcType映射Java类型。
|
前端开发 开发者
Vaadin Grid的秘密武器:打造超凡脱俗的数据展示体验!
【8月更文挑战第31天】赵萌是一位热爱UI设计的前端开发工程师。在公司内部项目中,她面临大量用户数据展示的挑战,并选择了功能强大的Vaadin Grid来解决。她在技术博客上分享了这一过程,介绍了Vaadin Grid的基本概念及其丰富的内置功能。通过自定义列和模板,赵萌展示了如何实现复杂的数据展示。
131 0
|
SQL 开发框架 .NET
深入解析Entity Framework Core中的自定义SQL查询与Raw SQL技巧:从基础到高级应用的全面指南,附带示例代码与最佳实践建议
【8月更文挑战第31天】本文详细介绍了如何在 Entity Framework Core (EF Core) 中使用自定义 SQL 查询与 Raw SQL。首先,通过创建基于 EF Core 的项目并配置数据库上下文,定义领域模型。然后,使用 `FromSqlRaw` 和 `FromSqlInterpolated` 方法执行自定义 SQL 查询。此外,还展示了如何使用 Raw SQL 进行数据更新和删除操作。最后,通过结合 LINQ 和 Raw SQL 构建动态 SQL 语句,处理复杂查询场景。本文提供了具体代码示例,帮助读者理解和应用这些技术,提升数据访问层的效率和灵活性。
666 0
自定义SQL,可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,如何自定义SQL呢?利用MyBatisPlus的Wrapper来构建Wh,在mapper方法参数中用Param注
自定义SQL,可以利用MyBatisPlus的Wrapper来构建复杂的Where条件,如何自定义SQL呢?利用MyBatisPlus的Wrapper来构建Wh,在mapper方法参数中用Param注

热门文章

最新文章