mybatis 实现自定义sql参数化,并绑定参数内参数
时间:2019-03-18
本文章向大家介绍mybatis 实现自定义sql参数化,并绑定参数内参数,主要包括mybatis 实现自定义sql参数化,并绑定参数内参数使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在某些业务场景下,需要多表联合进行统计操作,而这样的场景下,往往sql的逻辑比较复杂,利用Mybatis很难轻易的写出来,同时,各个业务变数又很大,基于mybatis来处理显得有些鸡肋。有时候不得不写一些纯sql然后传入mybatis,写纯sql传入mybatis的问题在于很难避免被诟病的sql拼接。为了解决这种场景下的矛盾冲突,可以利用下面的方法。
<!--SqlMapper.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.chaojilaji.shengqian.SqlMapper">
<select id="sqltest" parameterType="java.util.Map" resultType="HashMap">
${sql}
</select>
</mapper>
传入的参数类型为Map
// SqlMapper.java
@Mapper
@Component(value = "sqlMapper")
public interface SqlMapper {
List<Map<String,Object>> sqltest(Map<String,Object> map);
}
调用
@Controller
public class TestController {
@Autowired
SqlMapper sqlMapper
@RequestMapping(value = "/testsqlmapper", method = RequestMethod.GET)
@ResponseBody
public String testSqlMapper() {
try {
Map<String,Object> params = new HashMap<>();
params.put("sql","select count(*) from user where code like #{code}");
params.put("code","1%");
List<Map<String, Object>> ans = sqlMapper.sqltest(params);
if (Objects.nonNull(ans) && ans.size() > 0){
System.out.println(ans.get(0));
}
} catch (Exception e) {
e.printStackTrace();
}
return "1";
}
}
解释一下,就是,将包括sql在内的所有东西放到Map中,在sql中按照在xml中的写法,把变量写好,然后同时把这些变量也放到Map里面,这样就可以实现参数内绑定。这里需要说一下, # 和 $,这两个占位符的区别,前者可以自动根据参数类型绑定变量,包括添加引号等,后者只是生硬得直接填进去,如果有引号需要自己加。
来看看效果:
和在mybatis中绑定参数是一样的效果。
- 英伟达修改GeForce软件使用条款:禁止在数据中心运行深度学习等应用
- 浅谈几种SLB技术的实现
- 史上最逼真人形机器人堪比健身教练,技能满满还会流汗
- 被监管前的疏忽?互联网金融大面积逾期,中介行为不容忽视
- 达尔文漏算的一步却让它填补,科学家认为人类最初认可的进化论不再适用
- 假如黑客攻击您的互联网汽车会怎么样?
- 享学课堂谈-Python初学者的设计模式入门
- 本体网络Ontology Zero入选国家工信部区块链开源项目计划
- 完全无人驾驶将首先在中国大城出现
- 榴莲售出的三拼域名ancaiyun.com 已建站
- 微信提现免费!申请微信免费提现的教程
- 程序员也是天文学家?利用机器学习寻找行星
- python及numpy,pandas易混淆的点
- 也许 vue+css3 做交互特效更简单
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- c++ sort 学习笔记
- CSS3 引入方式 注释 颜色属性 学习笔记
- 使用 Makefile 构建指令集
- 安卓 App 逆向课程之四 frida 注入 Okhttp 抓包中篇
- NumPy进阶修炼80题|41-60
- 时序数据库 InfluxDB(一)
- Netty一文深入
- 时序数据库 InfluxDB(三)
- 时序数据库 InfluxDB(四)
- 卧槽,我学会了用Python预测股票价格
- 自定义 ESLint 规则,让代码持续美丽
- 时序数据库 InfluxDB(五)
- 太牛逼了!用 Python 实现抖音上的“人像动漫化”特效,原来这么简单!
- Web 技术:CSS最小和最大(宽度/高度)知识点及优缺点
- javascript入门到进阶 - js系列七:生命周期