5、jeecg 笔记之 minidao 条件判断

 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

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

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

相关文章

python函数-装饰器

python函数-装饰器 1.装饰器的原则--开放封闭原则 开放&#xff1a;对于添加新功能是开放的 封闭&#xff1a;对于修改原功能是封闭的 2.装饰器的作用 在不更改原函数调用方式的前提下对原函数添加新功能 3.装饰器的本质--闭包 4.装饰器 &#xff08;1&#xff09;简单的装饰器…

Math常用方法,String转float并且保留两位小数,除法

除法 public static double div(double v1, double v2, int scale) {if (scale < 0) {throw new IllegalArgumentException("The scale must be a positive integer or zero");}BigDecimal b1 new BigDecimal(Double.toString(v1));BigDecimal b2 new BigDecim…

博弈总结

SG函数部分内容大多借(chao)鉴(xi)自zyf学长 也有一些自己独到的理解 Hackenbush和纳什均衡直接弃掉了 不平等博弈有空再看 题目还有很多没切完 不过确实是没时间了&#xff0c;毕竟博弈只是一小块内容。 经典博弈 博弈论入门之巴什博奕 博弈论入门之nim游戏 博弈论入门之威佐夫…

Android 设置手机屏幕亮度

1、工具类 /*** 作者&#xff1a;created by meixi* 邮箱&#xff1a;15913707499163.com* 日期&#xff1a;2019/3/20 10*/public class BrightnessTools {/*** 判断是否开启了自动亮度调节*/public static boolean isAutoBrightness(ContentResolver aContentResolver) {boo…

bzoj 4300

这题让我很容易想起了求最长上升子序列&#xff0c;但是直接朴素算法 O( n ^ 2 ) 会超时。 考虑数在 int 范围内&#xff0c;那只需要保存二进制下某位为 1 的数为结尾的最大长度即可。 #include"cstdio" #include"cctype" #include"algorithm" …

Hibernate 补充 ManyToOne、OneToMany、OneToOne的使用例

1、前言 Hibernate 为程序员提供一种级联操作&#xff0c;在编写程序时&#xff0c;通过 Hibernate 的级联功能可以很方便的操作数据库的主从表的数据&#xff0c;我们最常用的级联是级联保存和级联删除。2、ManyToOne | OneToMany 单词误导 当我们去试用的时候&#xff0c;首先…

移动端使用页尾文字使用绝对定位遇到input框会飘起来的处理方案

如下版权信息的样式在遇到input框的时候会跟随输入框其后 优雅的解决方式&#xff1a;&#xff08;定位遇上键盘飘窗解决&#xff09; mounted里面写上&#xff1a;var originalHeightdocument.documentElement.clientHeight || document.body.clientHeight; //console.info(&…

代码中特殊的注释技术——TODO、FIXME和XXX的用处(转)

1、声明 本篇转自博客&#xff1a;http://blog.csdn.net/reille/ 2、转载内容 2.1、前言 今天在阅读 Qt Creator 的源代码时&#xff0c;发现一些注释中有 FIXME 英文单词&#xff0c;用英文词典居然查不到其意义&#xff01;实际上&#xff0c;在阅读一些开源代码时&#xff0…

Android 解决导入多个module时jar包冲突

1、在后导入的module中编译先前导入的module compile project(path: :faceplatform) 2、删除后导入的module里面的和先前导入的module的重复jar包&#xff0c; 同理jniLibs里面重复的so文件也需要删除 在线回复bug:qq1085220040

linux 添加环境变量(php为例)

find / -name php vim /etc/profile 文件最后添加 export PATH$PATH:/usr/local/php/bin source /etc/profile php -v 这时只实现了当前ssh 登录时可以PHP&#xff0c;如果退出重新登录就不能使用PHP了 解决&#xff1a; vim ~/.bashrc 添加 source /etc/profile source ~/.…

@ConfigurationProperties + @EnableConfigurationProperties

1、ConfigurationProperties 在类上通过ConfigurationProperties注解声明当前类为属性读取类。 举例&#xff1a; ConfigurationProperties(prefix "jdbc") prefix"jdbc" 读取属性文件中&#xff0c;前缀为jdbc的值。 在类上定义各个属性&#xff0c;名称…

Android 活体人脸实时采集,百度、虹软

百度现在功能较少——使用虹软&#xff0c;方便 虹软官网&#xff1a;https://ai.arcsoft.com.cn/ucenter/resource/build/index.html 申请应用&#xff0c;下载SDK即可 虹软已修改好的&#xff0c;可注册人脸&#xff0c;人脸验证成功——登陆的demo&#xff1a;https://down…

Android 最新左右可见上下页的banner实现demo

运行效果&#xff0c;可见上下页样式 demo链接&#xff1a;https://download.csdn.net/download/meixi_android/11045703 实现方法 首先添加必要依赖 implementation (com.android.support:recyclerview-v7:27.0.2){force true } implementation (com.android.support:cardv…

WIN10下微信崩溃(已经是最新版)的解决方法

问题症状&#xff1a;WIN10下运行最新版微信&#xff08;CrashVersion1644560715&#xff09; ---------------------------微信运行错误---------------------------你的微信崩溃次数较多&#xff0c;建议使用最新版本&#xff0c;点击"确定"到官网(http://pc.weixi…

o.s.b.d.LoggingFailureAnalysisReporter

1、错误信息 *************************** APPLICATION FAILED TO START ***************************Description:Field userMapper in club.sscai.userservice.user.service.UserService required a bean of type club.sscai.userservice.user.mapper.UserMapper that could …