现在的位置: 首页 > 综合 > 正文

ibatis的简介以及简单的应用实例

2014年11月22日 ⁄ 综合 ⁄ 共 9494字 ⁄ 字号 评论关闭

介绍
iBATIS是以SQL为中心的持久化层框架。能支持懒加载、关联查询、继承等特性。
iBATIS不同于一般的OR映射框架。OR映射框架,将数据库表、字段等映射到类、属性,那是一种元数据(meta-data)映射。iBATIS则是将SQL查询的参数和结果集映射到类。

所以,iBATIS做的是SQL Mapping的工作。

它把SQL语句看成输入以及输出,结果集就是输出,而where后面的条件参数则是输入。iBATIS能将输入的普通POJO对象、Map、XML等映射到SQL的条件参数上,同时也可以将查询结果映射到普通POJO对象(集合)、Map、XML等上面。

iBATIS使用xml文件来映射这些输入以及输出。

简单示例
基于ibatis-2.3.0.677版本。
创建新的项目,并引入jar包
ibatis-2.3.0.677.jar
mysql驱动
在类路径中提供ibatis的配置文件:sqlMapConfig.xml

Xml代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2.   
  3. <!DOCTYPE sqlMapConfig         
  4.     PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"         
  5.     "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">  
  6.   
  7. <sqlMapConfig>  
  8.   
  9.   <transactionManager type="JDBC" commitRequired="false">  
  10.     <dataSource type="SIMPLE">  
  11.       <property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/>  
  12.       <property name="JDBC.ConnectionURL" value="jdbc:mysql://127.0.0.1/ibatis"/>  
  13.       <property name="JDBC.Username" value="root"/>  
  14.       <property name="JDBC.Password" value="mysql"/>  
  15.     </dataSource>  
  16.   </transactionManager>  
  17.   <sqlMap resource="com/bjsxt/crm/model/User.xml"/>  
  18. </sqlMapConfig>  

3、创建实体类:User.java

Java代码 复制代码 收藏代码
  1. package com.bjsxt.crm.model;   
  2.   
  3. public class User {   
  4.     private int id;   
  5.     private String username;   
  6.     private String password;   
  7.        
  8.     public int getId() {   
  9.         return id;   
  10.     }   
  11.     public void setId(int id) {
      
  12.         this.id = id;   
  13.     }   
  14.     public String getPassword() {   
  15.         return password;   
  16.     }   
  17.     public void setPassword(String password) {   
  18.         this.password = password;   
  19.     }   
  20.     public String getUsername() {   
  21.         return username;   
  22.     }   
  23.     public void setUsername(String username) {   
  24.         this.username = username;   
  25.     }   
  26. }  

创建针对User对象的CRUD的xml映射配置:User.xml

Xml代码 复制代码 收藏代码
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2.   
  3. <!DOCTYPE sqlMap         
  4.     PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"         
  5.     "http://ibatis.apache.org/dtd/sql-map-2.dtd">  
  6.   
  7. <sqlMap>  
  8.   
  9.   <!-- Use type aliases to avoid typing the full classname every time. -->  
  10. <!--定义一个实体类型,要写全包和类名在下面的CRUD操作中可以引用 -->  
  11.   <typeAlias alias="User" type="com.bjsxt.crm.model.User"/>  
  12.   
  13.   <!-- Select with no parameters using the result map for Account class. -->  
  14. <!-- resultClass:所定义的语句的返回值类型-->  
  15.   <select id="selectAllUsers" resultClass="User">  
  16.     select * from t_user   
  17.   </select>  
  18. <!--parameterClass:要传递进来的参数类型 -->  
  19.   <select id="selectUser" resultClass="User" parameterClass="int">  
  20.     select * from t_user where id=#id#   
  21.   </select>  
  22. <!--parameterClass:把一个类做为参数传递进来-->    
  23. <!--sql语句中#中间的值必须在传递进来的这个类的属性中有才能赋值 -->  
  24.   <insert id="insertUser" parameterClass="User">  
  25.     insert into t_user values (   
  26.         null,#username#,#password#   
  27.     )   
  28.   </insert>  
  29.      
  30.   <update id="updateUser" parameterClass="User">  
  31.     update t_user set username = #username#,password=#password#   
  32.     where id=#id#   
  33.   </update>  
  34.      
  35.   <delete id="deleteUser" parameterClass="int">  
  36.     delete from t_user where id=#id#   
  37.   </delete>  
  38. </sqlMap>   

5、创建测试程序测试:

Java代码 复制代码 收藏代码
  1. package com.bjsxt.crm.model;   
  2.   
  3. import java.io.Reader;   
  4. import java.util.Iterator;   
  5. import java.util.List;   
  6.   
  7. import com.ibatis.common.resources.Resources;   
  8. import com.ibatis.sqlmap.client.SqlMapClient;   
  9. import com.ibatis.sqlmap.client.SqlMapClientBuilder;   
  10.   
  11. /**  
  12.  * 最简单的形式!  
  13.  * @author Lee
     
  14.  *  
  15.  */  
  16. public class UserTest {   
  17.   
  18.     /**
     
  19.      * @param args
     
  20.      */  
  21.     public static void main(String[] args) throws Exception{
      
  22.   
  23.         //从配置文件中得到SqlMapClient对象 
      
  24.         Reader reader = Resources.getResourceAsReader("sqlMapConfig.xml");   
  25.         SqlMapClient sqlMapper = SqlMapClientBuilder.buildSqlMapClient(reader);   
  26.         reader.close();   
  27.            
  28.         //创建用户数据
      
  29.         for(int i=0; i<10; i++){
      
  30.             User user = new User();   
  31.             user.setUsername("用户"+i);   
  32.             user.setPassword("密码"+i);   
  33.             sqlMapper.insert("insertUser", user);   
  34.         }   
  35.            
  36.         //查询用户数据
      
  37.         List users = sqlMapper.queryForList("selectAllUsers");   
  38.         for (Iterator iter = users.iterator(); iter.hasNext();) {   
  39.             User user = (User) iter.next();   
  40.             System.out.println(user.getUsername());   
  41.         }   
  42.            
  43.         //查询特定用户的数据
      
  44.         User user = (User)sqlMapper.queryForObject("selectUser"1);   
  45.         System.out.println("用户【id="+1+"】的名称是:"+user.getUsername());
      
  46.            
  47.         //更新用户的信息
      
  48.         user = new User();   
  49.         user.setId(3);   
  50.         user.setUsername("更改之后的用户名称");   
  51.         user.setPassword("密码被更改");   
  52.         sqlMapper.update("updateUser", user);   
  53.            
  54.         //删除用户的信息
      
  55.         sqlMapper.delete("deleteUser"6);   
  56.     }   
  57.   
  58. }  

SqlMapClient对象
这个对象是iBatis操作数据库的接口(执行CRUD等操作),它也可以执行事务管理等操作。这个类是我们使用iBATIS的最主要的类。它是线程安全的。通常,将它定义为单例。(与

Java代码 复制代码 收藏代码
  1. hibernate中sessionFactory的定义类似)。如:   
  2. import java.io.Reader;   
  3. import com.ibatis.common.resources.Resources;   
  4. import com.ibatis.sqlmap.client.SqlMapClient;   
  5. import com.ibatis.sqlmap.client.SqlMapClientBuilder;   
  6.   
  7. public class IbatisSQLMapConfig {   
  8.   
  9.     private static final SqlMapClient sqlMap;
      
  10.   
  11.     //在静态区块中初试化返回
      
  12.     static {   
  13.         try {   
  14.             //声明配置文件的名称(映射文件被定义在其中)
      
  15.             String resource = "sql_map_config.xml";   
  16.   
  17.             //利用工具类Resources来读取到配置文件
      
  18.             Reader reader = Resources.getResourceAsReader(resource);   
  19.   
  20.             //创建SqlMapClient接口的变量实例
      
  21.             sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);   
  22.   
  23.         } catch (Exception e) {   
  24.             e.printStackTrace();   
  25.             throw new RuntimeException(   
  26.                     "Error initializing MyAppSqlConfig class. Cause: " + e);   
  27.         }   
  28.     }   
  29.     public static SqlMapClient getSqlMapInstance() {   
  30.         //提供静态方法返回静态区块中得到的SqlMapClient
      
  31.         return sqlMap;   
  32.     }   
  33. }  

上面相当于是对SqlMapClient的一个简单的封装,在用junit进行单元测试的时候,为了防止重复的写代码获取SqlMapClient对象,我们进行一个简单的封装

抱歉!评论已关闭.