相对Hibernate等ORM实现而言,ibatis的映射配置更为简洁直接,下面是一个典型的配置文件。
insert into user values(#id#,#name#,#age#)
update user set name = #name# where id = #id#
可以看到,映射文件主要分为两个部分:模块配置和Statement配置
一、模块配置包括:
typeAlias节点:
定义了本映射文件中的别名,以避免过长变量值的反复书写,此例中通过typeAlias节点为类"com.itmyhome.User"定义了一个别
名"user",这样在本配置文件的其他部分,需要引用"com.itmyhome.User"类时,只需以其别名替代即可。
cacheModel节点
定义了本映射文件中使用的Cache机制
这里声明了一个名为"userCache"的cacheModel,之后可以在Statement声明中对其进行引用
select * from user where id = #id#insert into user values(#id#,#name#,#age#) update user set name = #name# where id = #id# delete user where id = #id#
| 参数 | 描述 |
| parameterClass | 参数类.指定了参数的完整类名(包括包路径). 可通过别名避免每次重复书写冗长的类名. |
| resultClass | 结果类.指定结果类型的完整类名(包括包路径) 可通过别名避免每次重复书写冗长的类名. |
| parameterMap | 参数映射,需结合parameterMap节点对映射关系加以定义. 对于存储过程之外的statement而言,建议使用 parameterClass作为参数配置方式,一方面避免了 参数映射配置工,另一方面其性能表现也更加出色。 |
| resultMap | 结果映射,需结合resultMap节点对映射关系加以定义。 |
| cacheModel | statement对应的Cache模块。 |
这样在SQL中可以直接将POJO的属性作为参数加以设定,如:
这里将com.itmyhome.User类设定为updateUser的参数之后,我们即可在SQL中通过#name#alter table user set name = #name# where id = #id#
对POJO的属性进行引用。如下:
set name = #name# where id = #id#运行期,ibatis将通过调用User对象的getName,getId方法获得相应的参数值,并将其作为SQL的参数。
如果parameterClass中设定的是jdk的中的简单对象类型,如String、Integer,ibatis会直接将其作为SQL中的参数值。
我们也可以将包含了参数数据的Map对象传递给Statement如:
这里传入的参数就是一个Map对象,ibatis将以key "id"、"name"从中提取对应的参数值update user set name = #name# where id = #id# Mapmap = new HashMap (); map.put("id", "1"); map.put("name", "hello"); sqlMap.update("updateUser",map);
在SQL中设定参数名时,可以同时指定参数类型,如:
update user set name = #name:VARCHAR# where id = #id:NUMBERIC#