zoukankan      html  css  js  c++  java
  • 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  #{} 和 ${} ,其实是为了体现 :字段名 和  ${}

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

     
    18年专科毕业后,期间一度迷茫,最近我创建了一个公众号用来记录自己的成长。
     
     
  • 相关阅读:
    Java入门系列之集合Hashtable源码分析(十一)
    哈希算法原理【Java实现】(十)
    Java入门系列之集合LinkedList源码分析(九)
    双链表算法原理【Java实现】(八)
    Java入门系列之集合ArrayList源码分析(七)
    动态数组原理【Java实现】(六)
    Java入门系列之类继承、抽象类、接口(五)
    Java入门系列之包装类(四)
    Java入门系列之StringBuilder、StringBuffer(三)
    Java入门系列之字符串特性(二)
  • 原文地址:https://www.cnblogs.com/niceyoo/p/9966303.html
Copyright © 2011-2022 走看看