java学习笔记——mybatis 之 动态SQL、_parameter变量与_databaseId 变量、OGNL了解、缓存与添加第三方缓存库EHChache

 前面学习使用mybatis时会发现,我们之前自己在程序中写sql访问数据库时,有时候情况会很复杂,需要程序自己根据实际的情况,进行各种判断,进行拼接字符串,最终生成响应的sql语句,列如:

string sql;

sql += "select * from t_cat";

if(name != null && name != "")

{

sql += "name ="+name;

}

if(age!= null && age!= 0)

{

sql += "age ="+age;

}

但是我们的mybatis的sql是写在xml中的,如何实现上面这样动态的生成需要的sql语句呢,mybatis如此强大当然已经提供了动态SQL这个功能啦,那就是在sql映射文件中使用标签来完成动态sql选择

 

if 判断,test为判断条件, 成立就拼接,不成就跳过。(很简单吧!)需要注意的是,有些符号需要使用转义字符,例如(&&,“”等)。

 

                                                                  

我们发现,在拼接sql字符串的时候,往往每个条件的头或者尾部符号的拼接让我们很麻烦,列如下面中的and,我让我们在传入的条件参数中没有传递id的值,那么最终的sql语句就会变成 select * from catdao and cname = tom and cgander = 0 and cage = 1;这样访问数据库无疑会出现问题。<where>标签就帮我们解决了这个问题,他可以替代sql语句中的 WHERE,并且可以自动的帮我们删除每个条件中,前面多余的and,注意也仅仅是前面多余的and,如果把and写在后边就不好使啦(现在感觉这个标签不是很好用哈,这里推荐使用<trim>标签,比<where>更强的)

 

                                                                              

 <trim>标签用于字符串的处理,prefix属性可以在整个字符串的前边添加某个字符串;suffix属性可以在整体字符串的末尾添某个字符串;prefixOverrides属性则可以判断某个字符串在某一句的前部是不是多余,如果多余就删除;suffixOverrides属性与前边相似,判断的事每句的结尾处,是不是有某一个多余的字符串,如果有则删除;

使用了trim标签后,这样在动态sql条件中q开头和末尾多出来的   and就都可以自动去除掉了,是不是很方便。

 

 

<foreach>标签用于对集合的遍历,当我们调用方法的参数是一个collection,或者为map时。我们就可以使用<foreach>标签来遍历并取得参数,从而进行sql语句的拼接,通常是在进行构建IN条件语句的时候。列如:

collection属性:指定要遍历集合的key(这里有个问题需要注意,例如如果集合为list,该属性的值只能填list。这里推荐使用@param(“ids”)起别名的方式来定义集合的key,这样我们就可以自己想写什么就写什么)

open属性:使用什么开头;

close属性:使用什么结尾;

item属性:给每次遍历集合中的元素起个名字,之后可以使用这个名字获取该值;

separator属性:使用什么作为分割;

index属性:索引,

                  如果遍历的是一个list:

                                               index:指定的变量保存了当前的索引;

                                               item:指定的变量保存了当前遍历元素的值;

                 如果遍历的是一个map:

                                               index:指定的变量就保存了当前遍历元素的key;

                                               item:指定的变量就是保存当前遍历元素的value;

 

 

<choose>标签的作用是分之选择。用法比较简单,只有其中有一个条件满足,其他条件就不会执行。他与<if>比较类似,但是与if的区别就是相当于if与if...else if...else 的区别 ,直接上例子简单易懂:

 

                                                                         

 <set>标签用于数据库表的更新,通常我们采用<if>与<set>结合的方式来进行数据库表动态更新操作。

 

 

 

<include>标签用于引用可重用的sql语句,通常与<sql>标签配合使用

 

 

 另外,补充了解:

 

类型

伪属性

伪属性对应的 Java 方法

ListSetMap

sizeisEmpty

List/Set/Map.size(),List/Set/Map.isEmpty()

ListSet

iterator

List.iterator()Set.iterator()

Map

keysvalues

Map.keySet()Map.values()

Iterator

nexthasNext

Iterator.next()Iterator.hasNext()

 

_databaseId 变量:代表当前环境

 

_parameter变量:代表传入进来的参数

               1)、若传入了单个的参数:_parameter就代表这个参数

               2)、若传入了多个的参数:_parameter则代表多个参数集合起来的map

 

 

 

 

 

 

 

 

 

 

 

 

 

这里可以看到,使用不同的sqlSession都取得catDao类,以同样的参数访问相同的方法,只访问了一次数据库。

jar包与xml的下载地址:https://download.csdn.net/download/qq_25106373/10886233。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值