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
- 批量查詢寫法