MyBatis 新手上路

首先来分析一下JDBC一个SQL操作的主要的步骤:

第一步:连接数据库,获取连接

第二部:使用连接,封装SQL语句,进行操作

第三部:处理查询结果

第四部:关闭连接

 

MyBatis对上面的步骤进行了封装,封装的方式如下:

对待第一个步骤的封装

   使用的封装方式主要是使用一个XML文件进行封装,XML文件的格式如下:

 

  
      PUBLIC "-//iBATIS.com//DTD SQL Map Config 3.0/
      "[url]http://www.ibatis.com/dtd/[/url]sql-map-config-3.dtd" >

  
           cacheModelsEnabled ="true"   
      enhancementEnabled ="true" 
      lazyLoadingEnabled ="true"      
      errorTracingEnabled ="true"      
      maxRequests ="32"           
      maxSessions ="10"           
      maxTransactions ="5"          
      useStatementNamespaces ="false"    
       />  
     
    
         
       
    
           
           
           
          
          
        
          
          
           
           
  
           
  
           
           
           
           
      
  
    
  

       
    

 

这个文件就是保存基础数据库连接和事务管理的配置文件了。 

 但是到这里为止,这个仅仅只是一个一些配置信息,怎么去根据这些信息生成在java代码体系中的对象呢?

下面是调用代码部分:

   String resource="mybatis_config.xml";

   Reader reader=Resource.getResourceAsReader(resource);

   SqlSessionFactory sqlMapper=new SqlSessionFactoryBuilder().build(reader);

同时还可以使用纯java代码来实现上面的配置和使用功能,代码如下所示:

DataSource dataSource = new PooledDataSource("com.mysql.jdbc.Driver",   

                       "jdbc:mysql://localhost/mybatis?userUnicode=true&characterEncoding=utf8""admin""123456");   

       Environment environment = new Environment("test"new JdbcTransactionFactory(), dataSource);   

        Configuration configuration = new Configuration(environment);   

        configuration.addMapper(TestDao.class);   

        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration); 

 

对于第二个步骤的封装操作:

首先是定义一个对一张表操作的接口,该接口中包含有对表操作的所有方法,例如:

public interface PersonMapper 
{
    Person getPersonById(int id);
}

然后让这个接口与表建立一个映射关系,使得java程序与数据库建立直接的联系,映射的关系表如下:

这个映射表的名称与存放位置是根据基本配置表当中sqlMap的resource建立的。映射表的内容如下所示:


                "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    

 
 
     insert into person (personId,name,age) values (#{personId},#{name},#{age})
 

 

映射表当中保存的是接口与表SQL的关联,namespace表示对应的接口名称,包含package name在内的接口名称。

下面的操作