SQL Maps:
Sql Maps是这个框架中最激动人心的部分,它是整个iBATIS Database Layer的核心价值所在。通过使用Sql Maps你可以显著的节约数据库操作的代码量。SQL Maps使用一个简单的XML文件来实现从javaBean到SQL statements的映射。跟其他的框架或者对象映射工具相比,SQL Maps最大的优势是简单。它需要学习的东西很少,在连接表或复杂查询时也不需要复杂的scheme(怎么翻complex scheme?),使用SQL Maps, 你可以自由的使用SQL语句。
下面总结了一些基本的操作:
1、显示数据库所有数据:
<!--- Showing all data of table -->
<select id="getAll" resultClass="Contact">
                    select * from contact
</select>
List<Contact> contacts = (List<Contact>)
                sqlMap.queryForList("Contact.getAll",null);
2、向数据库插入数据:
<insert id="insert" parameterClass="Contact">
                     insert into contact (firstName,lastName,email)
                     values (#firstName#, #lastName#, #email#)
                     <selectKey resultClass="int" keyProperty="id">
                                select last_insert_id() as id
                     </selectKey>
</insert>
Contact contact=new Contact("Amit","Kumar","amit@roseindia.net");
            sqlMap.insert("Contact.insert",contact);
3、删除数据库数据:
<delete id="deleteAll" parameterClass="Contact">
                 delete from Contact
</delete>
Contact contct=new Contact();
        sqlMap.delete("Contact.deleteAll",contct);
4、更新表中数据:
<update id="updateById" parameterClass="long">
             update Contact
                                    set
                                    lastName = 'Raghuwanshi'
                                                         where
                                                                            id=#id#
</update>
Contact contct=new Contact();
        long contactId=1;
        sqlMap.update("Contact.updateById",contactId);
5、ibatis ResultMap例子:
<resultMap id="result" class="Contact">
        <result property="id" column="id"/>
        <result property="firstName" column="firstName"/>
        <result property="lastName" column="lastName"/>
        <result property="email" column="email"/>
</resultMap>
Contact contact =
        (Contact)sqlMap.queryForObject("Contact.getById",new Integer(1));
6、ibatis存储过程例子:
通过ibatis我们可以在数据库表中执行内联的insert,delete,update SQL命令。而下面展示的是用ibatis调用存储过程。
在数据库中创建一个存储过程,建立如下定义:showData()
DELIMITER $$

DROP PROCEDURE IF EXISTS `vin`.`showData`$$

CREATE PROCEDURE `vin`.`showData`()
BEGIN
select * from Contact;
END$$

DELIMITER ;
Contact.xml内容修改为:
<!--- Calling stored procedure -->
            <procedure id="storedInfo" resultClass="Contact">
                        { call showData()}
     </procedure>
如下调用存储过程:
sqlMap.queryForList("Contact.storedInfo",null);
"sqlMap"是SqlMapClient类的一个对象。
public static void main(String[] args)
            throws IOException,SQLException{    
            Reader reader =
            Resources.getResourceAsReader("SqlMapConfig.xml");
            SqlMapClient sqlMap =
            SqlMapClientBuilder.buildSqlMapClient(reader);
            System.out.println("All Contacts");
            List<Contact> contacts = (List<Contact>)
                sqlMap.queryForList("Contact.storedInfo",null);
                Contact contact = null;
            for (Contact c : contacts) {
            System.out.print("    " + c.getId());
            System.out.print("    " + c.getFirstName());
            System.out.print("    " + c.getLastName());
            System.out.print("    " + c.getEmail());
                contact = c;
            System.out.println("");
            }        
    }
}

7、 ibatis的其它标签
现在介绍操作IBatis的方法:
1. statement支持元素及支持的属性:
1.1 ID
ID属性是必须的,它表示这个语句的名称,它在整个<SqlMap>元素内唯一的。在代码通过ID来引用相关语句。
1.2 parameterMap
parameterMap属性定义了一个有序的值列表,分别有序的对应了标准参数化的SQL语句中的?占位符。
1.3 parameterClass
在没有指明parameterMap属性的情况下,你可以指定parameterClass属性方法来替代parameterMap属性。parameterClass属性的值可以使用类型的别名或者类型(类)全称
1.4 resultMap
resultMap可以让你控制你如何让数据从查询结果(ResultMap)中提取出来存入java对象中。并且可以定义如何将字段映射到java bean的属性里。如下图:

1.5 resultClass
在resultMap属性没有指定的情况下,可以采用resultClass方式,resultClass的属性值可采用类型别名或者类型(Class)全称的方式。指定的类将根据数据库的元数据自动的映射到查询结果的字段值中。
2. ParameterMap元素属性
2.1 ID
    ID属性是必须的,它提供了<parameterMap>对元素Data Map里的唯一表示符
2.2 Class
Class属性是可选的,Class属性必须是JavaBean或Map实列,Class属
性虽是可选的,但推荐大家指定,Class属性 可以用来验证传入的参数的合法性及优化查询
3. 查询语句
3.1 屏蔽特殊符 <![CDATA[ ]]>

3.2 语句导入 <include>,可以是语句优化

使用<include>方法,上面的语句可以写成:

4.自增长方法:<selectKey resultClass=”int”>,不管<selectKey resultClass=”int”>处于该语句的什么部位,都先执行此自增长方法。注意:Mysql和Oracle的方法不一样。

5. <insert>方法:

Insert方法使用parameterMap属性,字段名要和<parameterMap>方法里的元素一一对应
6. <resultClass>属性:

使用resultClass方法,类Person里必须id,firstName,lastName,birthDate,werghtKilograms,heightMeters这些属性。
7. 使用xmlResultName:XML映射文件

XML文件内容:

8. 使用<parameterMap>方法:用来设置元素的属性,其中nullValue表示缺省值

上面的方法也可以写成这样:

9. 如果传入的参数只有一个,用#value#来替代传入的参数名。如果还传来的是字段名,则IBatis不支持

10. 判断传入的参数是否存在:isNotNull,判断传入的参数值是否大于设定的值:isGreaterThan

11. 判断传入的参数是否为空:isEmpty和isNotEmply

12. 如果进行模糊查询,使用like方法
Contact contact=new Contact("Amit","Kumar","amit@roseindia.net");
            sqlMap.insert("Contact.insert",contact);

List<Contact> contacts = (List<Contact>)
                sqlMap.queryForList("Contact.getAll",null);
List<Contact> contacts = (List<Contact>)
                sqlMap.queryForList("Contact.getAll",null);