执行拼接SQL的java书写方式


前言

项目上遇到一个功能需要对用户输入的数据表进行各种操作,这个时候需要自己拼接SQL然后执行。
拼接方法有两种:

  • 直接用字符串自己拼接,这种方法要特别注意前后空格。
  • 使用org.apache.ibatis.jdbc.SQL进行拼接。

执行方法我现在发现两种:

  • 放入mapper.xml中用${sqlText}进行执行。
  • 使用mabtis的注解@SelectProvider等进行执行。

一、SQL拼接方法

1、直接字符串拼接

注意前后空格

StringBuilder sql = new StringBuilder("SELECT * ");
sql.append(columns.trim()).append(" ");
sql.append("from ").append(tableName.trim()).append(" ");
sql.append("where ").append(" 1 = 1");
String sqlText = sql.toString();

2、使用org.apache.ibatis.jdbc.SQL进行拼接

SQL sql = new SQL()
        .SELECT(columns)
        .FROM(tableName)
        .WHERE("1=1");
String sqlText = sql.toString();

这个还有另一种写法,使用双大括号

String sqlText = new SQL(){{
    SELECT(columns);
    FROM(tableName);
    WHERE("1=1");
}}.toString();

二、执行方式

1、使用xml文件

mapper.class

List<Map<String, Object>> executeSql(@Param("sqlText") String sqlText);

mapper.xml

<select id="executeSql" resultType="map">
    ${sqlText}
</select>

2、使用@SelectProvider注解

mapper.class

import org.apache.ibatis.annotations.SelectProvider;

@SelectProvider(type = SqlProvider.class, method = "selectSql")
List<Map<String, Object>> executeSql(String columns, String tableName);

需要新建一个SqlProvider.class类,并且包含selectSql方法,且参数为String columns, String tableName

public class SqlProvider {
    public String selectSql(String columns, String tableName) {
        SQL sql = new SQL()
                .SELECT(columns)
                .FROM(tableName)
                .WHERE("1=1");
        return sql.toString();
    }
}

不用创建mapper.class对应的mapper.xml文件

其他

1、这里只展示了查询的SQL的注解,还有更新、插入\、删除的注解

@InsertProvider
@UpdateProvider
@DeleteProvider
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值