当前位置: 首页 > article >正文

Mybatis 直接传入sql执行, 并且传入参数List<Object> params

使用mybatis 直接执行sql , 并传入参数作为占位符号

找了很久没有找到, mybatis直接执行sql, 其中sql 可以携带? 作为占位符的这种形式 , 然后可以带参数的形式 .

那就自己实现一下.

原理: 就是自己把参数拼接进去… 笨办法

Service层代码

import com.example.sqldemo.mapper.SqlMapper;
import com.example.sqldemo.pojo.Pair;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;

@Service
public class SqlService {


    @Resource
    private SqlMapper sqlMapper;

    public void getData(String sql){

        Pair pair1 = new Pair("int", 1);
        Pair pair2 = new Pair("string", "北京");
        ArrayList<Pair> params = new ArrayList<>();
        params.add(pair1);
        params.add(pair2);
        String finalSql = getSql(sql,params); 
        System.out.println(finalSql);
        List<LinkedHashMap<String, Object>> result = sqlMapper.select(finalSql);
        System.out.println(result);
    }

    private String getSql(String sql, ArrayList<Pair> params) {
        for (int i = 0; i < params.size(); i++) {
            String data = getValueData(params.get(i));
            sql = sql.replaceFirst("\\?", data);
        }
        return sql;
    }

    private String getValueData(Pair param) {
        String value = null;
        switch (param.getKey()){
            case "string":
                value = "'" + param.getValue()+"'";
                break;
            case "int":
                value = ""+param.getValue();
                break;
            case "double":
                value = ""+param.getValue();
                break;
            case "date":
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                String date = format.format(param.getValue());
                value = "'"+date+"'";
                break;
            case "boolean":
                value = Boolean.TRUE.equals((boolean)param.getValue())? "1":"0";
                break;

        }
        return value;
    }


    public void createTable(String sql){
        sqlMapper.createTable(sql);
    }
}

Mapper层代码

@Mapper
public interface SqlMapper {


    List<LinkedHashMap<String, Object>> select(String sql);

    List<LinkedHashMap<String, Object>> selectByParams(String sql,List<Object> params);

    void createTable(String sql);
}

Mapper xml代码

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.example.sqldemo.mapper.SqlMapper">


    <select id="select" parameterType="java.lang.String" resultType="java.util.HashMap">
      ${sql}
    </select>

    <select id="selectByParams" parameterType="map" resultType="java.util.HashMap">
        ${sql}
    </select>


    <insert id="createTable">
        ${sql}
    </insert>
    
</mapper>

实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Pair {

    private String key;

    private Object value;
}

返回的结果中, 字段值为null的直接被mybatis忽略了, 如果不想忽略, 配置文件中, 添加

mybatis.configuration.callSettersOnNulls=true

http://www.kler.cn/news/358286.html

相关文章:

  • Ubuntu设置静态IP地址
  • C控制语句
  • 车辆电气化集成式 E/E 系统 应对车辆电气化挑战的端到端解决方案
  • 嵌入式开发介绍以及项目示例
  • python如何提取MYSQL数据,并在完成数据处理后保存?
  • 基于springboot+thymeleaf+springsecurity搭建一套web小案例
  • mysql--视图
  • IDEA使用Alibaba Cloud Toolkit插件自动化部署jar包
  • qs插件使用
  • 【Python-GUI图形化界面-PyQt5模块(4)】——QPushButton核心模块
  • 大数据新视界 --大数据大厂之 Dask:分布式大数据计算的黑马
  • Http 代理穿透
  • 在线课程管理系统(系统的基础功能,如教师上传课程资料、布置作业,学生提交作业和查看成绩等。)
  • 清华计算几何--2D Polygon的三角剖分(triangulation)
  • C++ 中的虚函数表(vtable)与继承:单继承与多继承的分析
  • 智简魔方业务管理系统v10 好用的IDC业务管理软件
  • ZigZagOnParabolic,MetaTrader 免费公式!(指标教程)
  • 【力扣打卡系列】滑动窗口与双指针(乘积小于K的子数组)
  • Spring boot 控制台输出大佛
  • QT 对话框