Minidao SQL参数用法
===
> 接口方法如何传递参数
### 注解一:@Param 参数标签
* **注解定义:**
```
/**
* minidao参数注解
*/
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Param {
String value();
}
```
* **用法示例:**
```
Map<String,Object> getMap2(@Param("empno") String empno,@Param("name")String name);
```
### 注解二:@Arguments 参数标签 (官方不建议使用)
* **注解定义:**
```
/**
*(SQL模板参数名)
* 1. [注释标签参数]必须和[方法参数],保持顺序一致
* 2. [注释标签参数]的参数数目不能大于[方法参数]的参数数目
* 3. 只有在[注释标签参数]标注的参数,才会传递到SQL模板里
* 4. 如果[方法参数]只有一个,如果用户不设置 [注释标签参数],则默认参数名为miniDto
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Arguments {
String[] value() default {};
}
```
* **用法示例:**
```
@Arguments({"empno","name"})
Map getMap(String empno,String name);
```
> SQL中如何使用参数
### 方式一: 占位符方式, 格式字段前加冒号【: 字段名】
* **优点: **
防止sql注入;sql执行计划只解析一次;字段值根据类型自动转换,不需要手工处理
* **缺点:**
只能传参数原生态值;参数为List情况循环体不适用
* **示例:**
```
SELECT * FROM employee where 1=1
<#if employee.age ?exists>
and age = :employee.age
</#if>
<#if employee.name ?exists>
and name = :employee.name
</#if>
<#if employee.empno ?exists>
and empno = :employee.empno
</#if>
```
### 方式二:模板语言方式,格式【${字段名}】
* **缺点:**
Sql直接拼装,有SQL注入风险;参数值需根据类型手工转换;
* **优点:**
可以对参数值进行脚本处理;参数为List对象,循环体对象必须用该方式;
(用户体验没有变化,直接将${}改为: 即可)
* **特点:**持多参数,支持参数多层,参数为list必须采用模板语言方式
* **示例:**
```
SELECT * FROM employee where 1=1
<#if employee.age ?exists>
and age = '${employee.age}'
</#if>
<#if employee.name ?exists>
and name = '${employee.name}'
</#if>
<#if employee.empno ?exists>
and empno = '${employee.empno}'
</#if>
```
- 前言
- MiniDao的介绍
- Springboot 快速集成minidao
- springmvc 快速集成minidao
- Minidao 技术架构
- Minidao Vs Mybatis
- MiniDao简介及特征
- MiniDao简介及特征
- MiniDao SQL分离写法
- Minidao SQL注解写法
- Minidao SQL参数用法
- MiniDao主键策略
- 数据库支持类型
- MiniDao安装及配置
- Minidao安装
- Minidao配置
- 自定义拦截器
- MiniDao基本概念
- Minidao基本理念
- DAO定义
- DAO注解
- SQL条件语法
- 实战技巧篇
- minidao条件like写法
- 参数格式化工具类:DaoFormat
- 批量查询写法