1、前言

我们知道 mybatis 中的动态sql语句是基于 OGNL 表达式的。
额外补充一点:mybatis 中的 #{} 和 ${} ,可直接跳过。
#{}表示一个占位符号,#{}接收输入参数,类型可以是简单类型,pojo、hashmap。
如果接收简单类型,#{}中可以写成value或其它名称。
#{}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。${}表示一个拼接符号,会引用sql注入,所以不建议使用${}。
${}接收输入参数,类型可以是简单类型,pojo、hashmap。
如果接收简单类型,${}中只能写成value。
${}接收pojo对象值,通过OGNL读取对象中的属性值,通过属性.属性.属性...的方式获取对象属性值。

来看看今天的重点对象,minidao,那么它里边的语法又是什么呢?

2、怎么写

怎么写之前先来看一下官方的描述:
Jeecg针对springjdbc+freemarker做了封装,出了这么一个轻量级持久层,可以让Hiberate拥有mybatis一样SQL灵活能力,同时支持事务统一、SQL标签能力。

这样是不是已经很明确了呢,freemarker 语法,那么 freemaker 是什么呢?
freemaker 是前端引擎,只负责展示,没有复杂逻辑,而它的语法是 FTL 指令,类似于 HTML 标签。
来看看 minidao 中怎么用吧。

2.1 if 判断

<#if status?exists && status?length gt 0>and   t.status= :status
</#if>

2.2 if elese

<#if status?exists && status?length gt 0>and   t.status= :status
<#else>and 1=1
</#if>

2.3 list 进行遍历

<#list items as item>${item.userName}
</#list>

更加详细的参考:http://qy85.iteye.com/blog/1612093 

3、需要注意

既然我们知道了, minidao 中,封装了 freemaker 便签,那么同样我们也知道,在 freemaker ftl中,参数是通过 ${},而我们在系统发现,很多都是这样用的 :参数,那么这又是怎么一回事?

4、sql 参数使用方式

4.1 占位符方式-【:字段名】

这种方式是我们在系统中最常见的了,来看看他的与缺点。

优点: 防止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>

4.2 模版语言方式 -【${字段名}】

你要的 ftl 方式的来了。

缺点: 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>

上边之所以提到 mybatis  #{} 和 ${} ,其实为了体现 :字段名 和  ${}

总之,推荐使用占位符的形式。

http://minidao.mydoc.io/?t=293640

5、jeecg 笔记之 minidao 条件判断相关推荐

  1. C++学习笔记3[条件判断语句]

    C++学习目录链接: C++学习笔记目录链接(持续更新中) 文章目录 一.条件判断语句 1.判断语句 二.使用条件运算符进行判断 三.switch语句 四.判断语句嵌套 总结 一.条件判断语句 1.判 ...

  2. 【Python学习笔记】第一章基础知识:格式化输出,转义字符,变量类型转换,算术运算符,运算符优先级和赋值运算符,逻辑运算符,世界杯案例题目,条件判断if语句,猜拳游戏与三目运算符

    Python学习笔记之[第一章]基础知识 前言: 一.格式化输出 1.基本格式: 2.练习代码: 二.转义字符 1.基本格式: 2.练习代码: 3.输出结果: 三.输入 1.基本格式: 2.练习代码: ...

  3. shell脚本编程学习笔记7(XDL)——字符处理命令和条件判断

    shell编程学习笔记--字符处理命令和条件判断 1,字符处理 [root@localhost ~]# sort [选项] 文件名 选项: -f: 忽略大小写 -n: 以数值型进行排序,默认使用字符串 ...

  4. bash 脚本编程2 条件判断 (笔记)

    条件判断类型: 整数测试 字符测试 文件测试 条件表达式: [ exppression ] ` expression ` test expression 注意一定要加空格前后都要加 整数比较:  -e ...

  5. Sass学习笔记 -- 初步了解函数、运算、条件判断及循环

    函数 sass定义了很多函数可供使用,当然你也可以自己定义函数,以@fuction开始.sass的官方函数链接为:sass fuction,实际项目中我们使用最多的应该是颜色函数,而颜色函数中又以li ...

  6. 【学习笔记】9、控制流语句-IF条件判断

    控制流语句 顺序语句:从左到右,从上到下. 分支语句(条件判断语句):满足不同的条件去运行不同的代码. 循环语句:满足某种特定条件的语句被不断地运行. if条件判断语句 [第一种] if <条件 ...

  7. vue学习笔记(二)- 数据绑定、列表渲染、条件判断

    vue的数据绑定和列表渲染的造轮子 GitHub:八至 作者:狐狸家的鱼 双向数据绑定 Vue中数据的双向绑定-v-model 数据->页面 页面->数据 适用:input.select. ...

  8. case when then else多个条件_CentOS「linux」学习笔记24:if和case多个条件判断

    ​linux基础操作:主要介绍了if和case判断多个条件. 多条件判断语句if例子: 例子1:if [ $1 -ge 60 ];then echo "接收的参数位1的值大于等于60&quo ...

  9. 二、Vue基础语法学习笔记——事件监听v-on、条件判断(v-if、v-else-if、v-else、v-show)、循环遍历(v-for遍历数组对象,key属性、检测数组更新)、图书案例、双向绑定

    四.事件监听 在前端开发中,我们需要经常和用于交互. 这个时候,我们就必须监听用户发生的时间,比如点击.拖拽.键盘事件等等 在Vue中如何监听事件呢?使用v-on指令 v-on介绍 作用:绑定事件监听 ...

最新文章

  1. Thrift源码解析--TBinaryProtocol
  2. 入手ipod touch4
  3. python交作业的格式_python作业4
  4. 一张图片学Python
  5. 商汤校招 | 春笋计划”
  6. 嵌入式linux面试题库,嵌入式linux面试题解析(二)——C语言部分三
  7. 带着canvas去流浪系列之一:绘制柱状图
  8. 多视角子空间学习系列之 CCA 典型相关分析
  9. 身份证号校验、身份证照片解析(百度API)
  10. Unity一键自动将多个FBX文件生成AB包+又一些小玩意
  11. 操作系统( 第二章)知识点总结
  12. win32项目中使用 skia渲染的一个编译问题
  13. android绘制立方体带坐标,Android: 直接在bitmap上绘制一个立方体
  14. OSChina 周日乱弹 —— 这个野男人是谁
  15. 谷歌分析相关套件简介
  16. php 点击电话号码直接拨打,在网站上为手机用户提供”点击拨打电话”功能
  17. fio模拟mysql写入速度_fio 测试工具
  18. Leetcode——507. Perfect Number
  19. Python 简易版小工具 | 计算天数
  20. SHOI2002 百事世界杯之旅

热门文章

  1. 工作392-选择Hbuilder x导入项目
  2. [jQuery]JQuery一个对象可以同时绑定多个事件,这是如何实现的?
  3. [css] 用css创建一个三角形,并简述原理
  4. [css] 如何形成BFC?
  5. 前端学习(2482):关于接口的调错
  6. 前端学习(2228):react之状态三
  7. 前端学习(1966)vue之电商管理系统电商系统之获取参数列表
  8. 前端学习(1838):前端面试题之执行上下文
  9. 前端学习(1658):前端系列实战课程之图片延迟加载思路
  10. 前端学习(1179):vue概述