zoukankan      html  css  js  c++  java
  • 5、jeecg 笔记之 minidao 条件判断

    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  #{} 和 ${} ,其实为了体现 :字段名 和  ${}

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

  • 相关阅读:
    Treap 树堆 容易实现的平衡树
    (转)Maven实战(二)构建简单Maven项目
    (转)Maven实战(一)安装与配置
    根据请求头跳转判断Android&iOS
    (转)苹果消息推送服务器 php 证书生成
    (转)How to renew your Apple Push Notification Push SSL Certificate
    (转)How to build an Apple Push Notification provider server (tutorial)
    (转)pem, cer, p12 and the pains of iOS Push Notifications encryption
    (转)Apple Push Notification Services in iOS 6 Tutorial: Part 2/2
    (转)Apple Push Notification Services in iOS 6 Tutorial: Part 1/2
  • 原文地址:https://www.cnblogs.com/Jeely/p/11309332.html
Copyright © 2011-2022 走看看