Mybatis动态Sql映射标签总结

SELECT * FROM BLOG WHERE state = #{state} AND title like #{title} AND author_name like #{author.name}

:使用set标签可以将动态的配置SET 关键字,和剔除追加到条件末尾(if语句中)的任何不相关的逗号。


        UPDATE conf_banner t
         
            
                t.banner_name = #{bannerName},
            
            
                t.banner_url = #{bannerUrl},
            
            
                t.banner_logo = #{bannerLogo},
            
            
                t.banner_description = #{bannerDescription},
            
            
                t.sort = #{sort},
            
             
                t.is_enabled = #{isEnabled},
            
        
        where t.banner_id = #{bannerId}
    

mybatis接受的参数分为:(1)基本类型(2)对象(3)List(4)数组(5)Map

无论传哪种参数给mybatis,他都会将参数放在一个Map中:
如果传入基本类型:变量名作为key,变量值作为value 此时生成的map只有一个元素。
如果传入对象: 对象的属性名作为key,属性值作为value,
如果传入List: "list"作为key,这个List是value (这类参数可以迭代,利用标签实现循环)
如果传入数组: "array"作为key,数组作为value(同上)
如果传入Map: 键值不变。
:标签有循环的功能,可以用来生成有规律的SQL语句,主要属性有:
item:表示集合每一个元素进行迭代时的别名
index:表示在迭代过程中,每次迭代到的位置
open:表示该语句已什么开始
separator:表示每次迭代之间以什么符号作为分隔
close:表示该语句已什么结束
collection:需要迭代的变量

  
  UPDATE BMC_SUBPLATE  
  SET PLSTATUS = '02'  
  WHERE  
    
   PLID = #{plid}  
    
  

collection的值其实就是mybatis把参数转化成Map以后,这个Map的key,但是这个key对应的value必须是一个集合, 可以是数组,也可以是List
生成的动态sql:
Executing: UPDATE BMC_SUBPLATE SET PLSTATUS = '02' WHERE PLID = ? OR PLID = ?
Parameters: 20121116144947537692(String), 20121116141301414855(String)

:查询标签
:查询标签,choose(when,otherwise)相当于java中的switch/case
if和choose酌情使用
:可以从 OGNL 表达式中创建一个变量并将其绑定到上下文。比如:


下面是映射xml文件中的其他一些标签的用法:

:标签引入sql片段,通过的id值,引用一些可以重复使用的代码段。
:将sql标签执行的结果返回,逐一定义列名和对象属性名之间的映射关系。
:在不支持自增的主键而生成的策略标签。
SelectKey在Mybatis中是为了解决Insert数据时不支持主键自动生成的问题,他可以很随意的设置生成主键的方式。

不管SelectKey有多好,尽量不要遇到这种情况吧,毕竟很麻烦。

selectKey Attributes
属性 描述
keyProperty selectKey 语句结果应该被设置的目标属性。
resultType 结果的类型。MyBatis 通常可以算出来,但是写上也没有问题。MyBatis 允许任何简单类型用作主键的类型,包括字符串。
order 这可以被设置为 BEFORE 或 AFTER。如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素-这和如 Oracle 数据库相似,可以在插入语句中嵌入序列调用。
statementType 和前面的相 同,MyBatis 支持 STATEMENT ,PREPARED 和CALLABLE 语句的映射类型,分别代表 PreparedStatement 和CallableStatement 类型。

SelectKey需要注意order属性,像Mysql一类支持自动增长类型的数据库中,order需要设置为after才会取到正确的值。
像Oracle这样取序列的情况,需要设置为before,否则会报错。

下面是一个xml和注解的例子,SelectKey很简单,两个例子就够了

  
    insert into table1 (name) values (#{name})  
      
      CALL IDENTITY()  
      
    

上面xml的传入参数是map,selectKey会将结果放到入参数map中。用POJO的情况一样,但是有一点需要注意的是,keyProperty对应的字段在POJO中必须有相应的setter方法,setter的参数类型还要一致,否则会报错。

@Insert("insert into table2 (name) values(#{name})")  
@SelectKey(statement="call identity()", keyProperty="nameId", before=false, resultType=int.class)  
int insertTable2(Name name);  

你可能感兴趣的:(Mybatis动态Sql映射标签总结)