mybatis执行自定义sql

背景

在开发过程中遇到一个需求:希望从数据库中读取预先定义好的sql,根据传参进行参数预处理后执行sql语句。结合项目实际情况我决定使用mybatis执行预定义sql。

实现过程

  • 缓存我们自定义的sql语句

MappedStatement ms = new MappedStatement.Builder(configuration, msId, sqlSource, SqlCommandType.SELECT).resultMaps(new ArrayList<ResultMap>() {{add(new ResultMap.Builder(configuration, "defaultResultMap", resultType, new ArrayList<ResultMapping>(0)).build());}}).build();
  • 找到我们自定义的sql语句,进行查询
 public List<Map<String, Object>> selectList(String sql, Object value) {log.info("selectList sql:{},params:{}", sql, JSONUtil.toJsonStr(value));Class<?> parameterType = value != null ? value.getClass() : null;String msId = mapperStatementBuilder.selectDynamic(sql, parameterType);return sqlSession.selectList(msId, value);}

使用说明

public static void main(String[] args) {// 1. 创建SqlSessionFactory 仅作示意,具体情况具体操作Configuration configuration = new Configuration();SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);RowSqlMapper rowSqlMapper = new RowSqlMapper(sqlSessionFactory.openSession());List<Map<String, Object>> maps = rowSqlMapper.selectList("select * from ir_session_param");HashMap<String, Object> params = new HashMap<>();params.put("id", "111");List<Map<String, Object>> maps1 = rowSqlMapper.selectList("<script> select * from temp_table where id = #{id} <if test= \"dept_name != null\">" +" and dept_name= #{dept_name} </if> </script>", params);}

总结

文章参考 http://blog.csdn.net/isea533/article/details/40044417,感谢大佬的方案。在使用过程中发现问题可以下方评论。如果文章对你有帮助请点赞分享加关注。代码包免费下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/846811.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

flyfish3.0.0配置避坑

1.基础环境准备篇 doc/01-基础环境准备篇.md 云智慧/FlyFish - Gitee.com 使用教程里给出的java环境时&#xff0c;可以显示java版本&#xff0c;但是不能显示Maven的版本 改为&#xff1a; export NODE_HOME/usr/local/node/node-v14.19.3-linux-x64 export PATH$NODE_HOME…

【面试题-006】java中的垃圾回算法有哪些?

Java中的垃圾回收&#xff08;Garbage Collection&#xff0c;简称GC&#xff09;是指自动内存管理的一种机制&#xff0c;用于回收不再使用的对象占用的内存。Java中的垃圾回收算法主要有以下几种&#xff1a; 标记-清除&#xff08;Mark-Sweep&#xff09;算法&#xff1a; …

WebSocket 断网重连、心跳检测功能封装

文章目录 简介特点优缺点使用场景 用法封装断网重连心跳检测 注意 简介 WebSocket是一种用于在Web浏览器和服务器之间进行双向通信的协议。它提供了一种在单个TCP连接上进行持久化的全双工通信能力。WebSocket协议通过在HTTP握手阶段升级到WebSocket连接&#xff0c;从而允许双…

100页2秒?我们为什么需要这样的文档解析速度

近期&#xff0c;TextIn通用文档解析完成最新一版产品迭代&#xff0c;将100页文档解析速度提升至最快2秒以内。 P50&#xff08;百页&#xff09; P90&#xff08;百页&#xff09; P95&#xff08;百页&#xff09; P99&#xff08;百页&#xff09; 平均&#xff08;单页…

记某网关系统通用漏洞的挖掘

前言 本篇文章分享一下通用漏洞挖掘的过程&#xff0c;想要获得通用漏洞证书&#xff0c;首先要求是中危及中危以上的通用型漏洞且所属公司的注册资本大于5000万。挖掘一个漏洞其实不难&#xff0c;个人觉得是目标公司资产的搜集。访问CNVD平台发现某网关系统被师傅提交过任意…

陈文自媒体:人生的管道收入,你搭建了几条?

今天不讲行业的内容&#xff0c;今天说说一下人生的一些规划&#xff0c;可能有人说&#xff0c;现在社会变化这么快&#xff0c;谈啥规划&#xff0c;那不是笑话嘛&#xff1f; 其实我想说&#xff0c;提前规划比没有规划&#xff0c;效果完全不一样&#xff0c; 是的社会变化…

V神的傲慢与偏见

原创 | 刘教链 隔夜BTC&#xff08;比特币&#xff09;小幅回升至5日线67.7k附近。前日5.31教链内参“美核心通胀放缓&#xff0c;利好宽松周期落地”[链接]提到&#xff0c;以太坊创始人Vitalik Buterin&#xff08;V神&#xff09;新发表了一篇长文&#xff0c;主题是关于他“…

Java反射机制:深入探讨与实际应用

Java反射机制&#xff1a;深入探讨与实际应用 引言 反射机制是Java语言的重要特性之一&#xff0c;它允许程序在运行时检查和操作自身的结构。通过反射&#xff0c;开发者可以在运行时动态地获取类的详细信息&#xff0c;创建对象&#xff0c;调用方法&#xff0c;甚至修改字…

H6911 DC2.6-40V升压IC 升24V36V48V60V80V100V10A数转模无频闪LED芯片

H6911 DC2.6-40V升压IC是一款升压恒流LED恒流驱动器&#xff0c;具有多种特点&#xff0c;适用于多种的LED照明应用领域。以下是关于该产品的详细解释&#xff1a; 一、产品概述 H6911是一款专为LED照明设计的升压恒流驱动器。它能在2.6至40V的宽电压范围内稳定工作&#xff0c…

性能优化随笔(一)

在软件开发过程中&#xff0c;一般要先实现功能方面的需求&#xff0c;功能方面的需求开发完毕之后&#xff0c;往往会考虑性能方面的优化。在业务发展的初期&#xff0c;性能往往能满足使用的需求&#xff0c;这时性能优化不是必不可少的。随着业务的发展&#xff0c;软件复杂…

Window11开放端口

&#xff08;1&#xff09;打开控制面板&#xff0c;进入【控制面板\系统和安全\Windows Defender 防火墙】 &#xff08;2&#xff09;点击左侧菜单【高级设置】&#xff0c;进入防火墙设置页面 &#xff08;3&#xff09;根据需要选择【入站规则】或者【出站规则】&#xff…

粒子群算法Java实现

粒子群算法&#xff08;Particle Swarm Optimization&#xff0c;PSO&#xff09;是一种受到自然界群体行为启发的优化算法&#xff0c;由James Kennedy和Russell Eberhart于1995年提出。该算法模拟了鸟类或其他动物群体&#xff08;如鱼群&#xff09;的社会和集体行为&#x…

C++:特殊类设计和四种类型转换

一、特殊类设计 1.1 不能被拷贝的类 拷贝只会放生在两个场景中&#xff1a;拷贝构造函数以及赋值运算符重载&#xff0c;因此想要让一个类禁止拷贝&#xff0c;只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。 C98&#xff1a; 1、将拷贝构造函数与赋值运算符重载只…

linux 内核映像差异介绍:vmlinux、zImage、zbImage、image、uImage等

一、背景 Linux内核是整个Linux操作系统的核心部分&#xff0c;它是一个负责与硬件直接交互的软件层&#xff0c;并且提供多种服务和接口&#xff0c;让用户程序能够方便地使用硬件资源。 当我们编译自定义内核时&#xff0c;可以将其生成为以下内核映像之一&#xff1a;vmli…

[每日一练]关于上升的温度查询

该题目来自于力扣&#xff1a; 197. 上升的温度 - 力扣&#xff08;LeetCode&#xff09; 题目要求&#xff1a; 表&#xff1a; Weather ------------------------ | Column Name | Type | ------------------------ | id | int | | recordDate | …

Java网络编程从入门到精通:深入探索与实践指南

Java网络编程从入门到精通&#xff1a;深入探索与实践指南 在数字化时代的浪潮中&#xff0c;Java网络编程已成为连接世界的桥梁。本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;带你领略Java网络编程的魅力&#xff0c;助你实现从入门到精通的飞跃。 四个方面…

AP9185内置 MOS 管升压型恒流驱动芯片

概述 AP9185是一款高效率、高精度的升压型大功率LED灯恒流驱动器芯片。AP9185内置高精度误差放大器&#xff0c;固定关断时间控制电路&#xff0c;恒流驱动电路等&#xff0c;特别适合大功率、多个高亮度LED灯串的恒流驱动。AP9185通过调节外置的电流采样电阻&#xff0c;能控…

WordPress博客主题触屏版社区源码

下载地址&#xff1a;WordPress博客主题触屏版社区源码

【Java面试】八、MyBatis篇

文章目录 1、MyBatis执行流程2、MyBatis延迟加载使用3、MyBatis延迟加载的原理4、MyBatis的一级、二级缓存4.1 一级缓存4.2 二级缓存4.3 注意点 5、面试 1、MyBatis执行流程 从mybatis-config.xml读取配置&#xff08;数据库连接信息&#xff0c;xml映射文件&#xff09; 构建…

LeetCode 算法:无重复字符的最长子串c++

原题链接&#x1f517;&#xff1a;无重复字符的最长子串 难度&#xff1a;中等⭐️⭐️ 题目 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的最长子串的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所…