IBATIS标签详解

一级标签(根标签):
1.

属性:
namespace:用于指定命名空间,在java程序段可以使用命名空间.标签id的形式来调用相应的sql语句。

二级标签:
2.cacheModel

cachemodel是ibatis里面自带的缓存机制,正确的应用能很好提升我们系统的性能。

使用方法:在sqlmap的配置文件中加入


        
        
                

在查询语句中使用缓存

 SELECT SQL 属性:id:命名空间中的唯一标识parameterClass:参数类型parameterMap:参数列表resultClass:结果类型resultMap:结果列表cacheModel:缓存模式timeout:数据库超时时间fetchSize:一次抓去的数据量remapResults:有true和false两个值。如果每次查询的列或者表发生变化时,就需要设置为true。使用的话会造成一定的性能损失。xmlResultName:将结果集转换为xml形式。resultSetType:结果集类型。参数传入类似于删除,插入,更新的操作。结果输出有两种,如果明确返回的数据的类型,那么可以使用resultClass。如果返回的数据中有很多类型,那么使用resultMap。5.属性:id:唯一标识class:要存入的数据的类型。通常可以使用HashMap。extends:可以继承其他的resultMapgroupBy:可以进行分组6.属性:id:唯一标识class:参数类型通常使用parameterClass,然后传入一个HashMap。7. SOME SQL属性:id:唯一标识。8. 动态SQL 属性和select一样。9.可以给一个类型指定别名属性:alias:别名type:要指定别名的类的类型10. call 存储过程名(参数1,参数2...)属性和select一样。可以调用存储过程。以下为二级标签下的三级标签11.属性:prepend:用于拼接一个前缀。它会覆盖掉第一个为true的元素的prepend。closeopen属性用于包括一个拼接的sql。例如:

select * from table

    id=#id#
这就拼接了sql为  select * from table where (id=?)  (id值由传入所得)

再例如:
select * from ACCOUNT  
  
      
        ACC_ID = #id#  
      
      
        ACC_LAST_NAME = #lastName#  
      
 
如果这样写,那么会拼出sql为select * from ACCOUNT where ACC_ID=#id# ACC_LAST_NAME=#lastName#,
因为它将第一个为true的prepend覆盖掉了。应该在中添加属性prepend。推荐为所有的prepend都赋值,以免拼接时出现错误。

12.
用于引用包含一段已经定义好的sql
属性:
refid:被引用的sql的id

13.
判断所传入参数是否为null或者为空。如果是empty,那么就将传入参数拼入sql语句。
属性:
prepend:拼接sql的前缀。
property:对应于java的属性
closeopen:包括拼接的sql。

例如:
insert into table(

    name
    age

) values(

    #name#
    1

)
如果传入age为空,传入name为张三,那么拼接的sql为

insert into table(age) values(1)


14.
相反,判断传入参数是否不为空也不为null。如果不为null和空,那么就将参数拼接到sql中。
属性:
prepend:拼接sql的前缀。
property:对应于java的属性
closeopen:包括拼接的sql。

例如:

insert into table(

    name
    age

) values(

    #name#
    #age#

)
如果传入name为张三,传入age为null,那么拼接的sql为

insert into table(name) values('张三')


15.
判断传入参数是否为null。如果为null,那么就执行相应的拼接。
属性:
prepend:拼接sql的前缀。
property:对应于java的属性
closeopen:包括拼接的sql。

例如:

insert into table(

    name
    age

) values(

    '张三'
    #age#

)
如果传入name为null,传入age为22,那么拼接的sql为
insert into table(name) values('张三')

16.
判断传入参数是否不为null。如果不为null,那么就执行相应的拼接。
属性:
prepend:拼接sql的前缀。
property:对应于java的属性
closeopen:包括拼接的sql。

例如:
insert into table(

    name
    age

) values(

    #name#
    #age#

)
如果传入name为张三,传入age为null,那么拼接的sql为
insert into table(name) values('张三')

17.
判断传入参数与指定值是否相等。
属性:
prepend:拼接sql的前缀。
property:对应于java的属性
closeopen:包括拼接的sql。
compareValue:用于指定与参数比较的值。
compareProperty:用于指定与参数比较的属性。

例如:
select * from table 

  id=#id#
如果id传入为001,那么就拼接sql为 
select * from table where id='001'
如果传入不为001,那么拼接sql为 select * from table

18.,,,
分别对应与大于等于,大于,小于等于,小于。

19.
如果参数不为null,则执行sql
属性:
prepend:拼接sql的前缀。
closeopen:包括拼接的sql。

20.
如果参数为null,则执行sql
属性:
prepend:拼接sql的前缀。
close和open:包括拼接的sql。

21.
如果参数有使用则查询条件有效。

22.
如果参数没有使用则查询条件有效。

23.
配置在resultMap下,用于指定结果集中的每一项。
属性:
property:对应于要输出的字段名,在java程序段可以通过这个属性值获得相应的值
colunm:对应于数据表的字段
columIndex:对应于数据表字段的索引
jdbcType:仅当增删改是可能出现null值的字段,可以设置jdbcType。当该result为DATE类型时,指定jdbcType可以更加明确sql。因为DATE在java里是一种类型,但是在不同的数据库有不同的DATE类型。
javaType:对应于java的类型。如果在sql中使用了聚合函数,需要在对应的result中配置该属性,否则取出的是聚合函数的对象,显示出的就是java对象的哈希值。
nullValue:空值。

24.
用于循环输出,以便循环的生成sql。
属性:
property:对于要输出的集合
open和close:用于开始和结束,包括一段拼接的sql。
prepend:拼接sql的前缀
conjunction:循环输出拼接时需要的连接字符串,用于定义AND或OR

例如:
参数List传入了3个id,分别为1,3,4。必须写[],以防解析器简单地将List输出成String。拼接的sql为
SELECT * FROM STUDENT WHERE ID IN (1,3,4)

25.
用于获取自增长的序列。
属性:
resultClass:返回结果的类型。
keyProperty:对应键的属性。
多用于插入操作,例如:

    INSERT INTO STUDENT(NAME,AGE,SEX,MAJOR) VALUES(#name#,#age#,#sex#,#major#)
    
        SELECT LAST_INSERT_ID() AS ID
    
id是STUDENT表的主键,通过这条语句可以自动生成id并插入到STUDENT表中。



以下是一些标签的用法区别及技巧:

的区别:
如果不传入参数,不会将其中的字符串拼入sql。而会将其中的字符串拼入sql,但是不赋值。
例如:

INSERT INTO PAYMENTRECORDS (

    payfee_record_id
    order_no

)VALUES(

    #payfee_record_id#
    #order_no#

)
如果两个参数都传入为null,那么拼接出的sql为
INSERT INTO PAYMENTRECORDS(order_no) VALUES("")
这里没有拼接payfee_record_id,而order_no只是字符串的形式。

在动态拼接sql时,常常会遇到#和$,他们的区别是:
1.#是将参数按照字符串传入,$是将参数直接传入
2.#相当于是参数变量替换,$相当于是字符串的拼接
3.#可以防止sql注入,$不可以
所以能使用#的地方一定不使用$

如果不指定parameterClass,那么任何带有get/set方法的属性的javabean都可以作为输入参数。

在配置sql时,可以直接写select * from table,但是一定要配置一个包含数据表全部列的resultMap


你可能感兴趣的:(学习总结,ibatis&mybatis)