SparkSql整合Mybatis的xml文件管理维护Sparksql语句。这个架构也可以使用其他计算引擎,如flink

      首先该功能可以通过拿mybatis底层的代码工具对象去改写,改造成我们仅需要的sql维护功能,可以大大美化我们的spark代码 或者 flink代码, 
因为你不可能在代码里,埋一大堆恶心的字符串和换行符\\N +" " +。 不仅不美观,而且极其难以维护。 所以我们项目设计过程中,考虑把代码统一像spring项目一样,
把sql语句,包括传参都挪到xml文件里去赋值调用。

1、 工具类

import org.apache.commons.lang.StringUtils;
import org.apache.ibatis.datasource.pooled.PooledDataSource;
import org.apache.ibatis.mapping.BoundSql;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.mapping.ParameterMapping;
import org.apache.ibatis.mapping.ParameterMode;
import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import org.apache.ibatis.type.TypeHandlerRegistry;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

public class XmlUtils
{

    public static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");

    public static String getRealSql(String sqlId,Map map){
        Environment environment = new Environment("development",new JdbcTransactionFactory(),new PooledDataSource());
        //通过底层开发者模式的environment创建configuration对象
        Configuration configuration = new Configuration(environment);
        //加入mapper接口类映射器,并注册别名
        configuration.getTypeAliasRegistry().registerAlias("OmeMapper",OmeMapper.class);
        configuration.addMapper(OmeMapper.class);
        //TODO 如果业务量大起来,可以直接使用路径下的所有Mapper接口类,例如:                  
       //configuration.getTypeAliasRegistry().registerAliases("com.warehouse.mapper");
       //configuration.addMappers("com.warehouse.mapper");

        //绑定里面的sql, 并且把写的map参数也传给sql
        BoundSql boundSql = configuration.getMappedStatement(sqlId).getBoundSql(map);
        String sql = boundSql.getSql();

        if(StringUtils.isEmpty(sql)){
            return "";
        }
        //美化Sql
        sql.replaceAll("[\\s\n]+"," ");
        // 填充占位符, 把传参填进去,使用#{}、${} 一样的方式
        Object parameterObject = boundSql.getParameterObject();
        //参数映射列表,有入的(in) 有出的࿰
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值