mybatis学习总结

一、 ibatis介绍

ibatis始于2002年,2010年更名为mybatis,并迁移到了googlecode.com里。

ibatis最初侧重于密码软件的开发,现在是一个基于Java的持久层框架。

 

Hibernate与ibatis相比而言:

1、Hibernate是“一站式”ORM解决方案而言,ibatis是一种“半自动化”的ORM实现。

2、Ibatis需要手写sql语句,也可以生成一部分,Hibernate则基本上可以自动生成,偶而需要写一些Hql。

3、维护性方面:iBatis 的 sql 都保存到单独的文件中。而Hibernate在有些情况下可能会在java 代码中保sql/hql。

 

ibatis优点总结:

1、ibatis把sql语句从Java源程序中独立出来,放在单独的XML文件中编写,给程序的维护带来了很大便利。 

2、ibatis封装了底层JDBC API的调用细节,并能自动将结果集转换成Java Bean对象,大大简化了Java数据库编程的重复工作。 

3、简单易于学习,易于使用, 非常实用。 

4、因为Ibatis需要程序员自己去编写sql语句,程序员可以结合数据库自身的特点灵活控制sql语句,因此能够实现比hibernate等全自动ORM框架更高的查询效率,能够完成复杂查询。 

5、阿里巴巴、慧点科技等多家知名软件公司都使用Ibatis。


二、 ibatis简单入门

1、  创建一个java项目

2、  导入驱动包和ibatis的jar包:ibatis-2.jar 和 classes12.jar。

3、  添加一个SqlMapConfig.xml到src下面,在xml中写入以下内容:




 
   
     
     
     
     
    
 
  

4、创建pojo,对应数据库中的一个表,

 

 public class User{
          private String id;
      private String name;
      private String password;
      getter与setter方法…..
}

4、  创建此pojo的xml映射文件,可自定义

User.xml




 

5、  测试

import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.util.List;
 
importcom.ibatis.common.resources.Resources;
importcom.ibatis.sqlmap.client.SqlMapClient;
importcom.ibatis.sqlmap.client.SqlMapClientBuilder;
 
public class TestIbatis {
    private static SqlMapClient sqlMapClient;
    static {
        Reader reader =Resources.getResourceAsReader("SqlMapConfig.xml");
        sqlMapClient =SqlMapClientBuilder.buildSqlMapClient(reader);
        reader.close();   
    }
    public static void main(String[] args) {
             List list =sqlMapClient.queryForList("selectAll");
   }
}

6、  运行成功

 

三、 ibatis核心技术

1、  ibatis配置文件:sqlMapConfig.xml

父标签

标签,引用属性文件,用于引用properties属性文件

例如:url=jdbc:oracle:thin:@localhost:1521:ORAC

可以在xml文件中,这样调用:

设置属性,用于配置和优化SqlMap实例的各种属性

 maxRequests:同时执行SQL语句的最大线程数。大于这个值的时候,后面的线程将被阻塞,直到有线程执行完成,不同的数据库有不同的限制值,但是任何数据库通常应该把此属性值设置为maxTransactions的10倍,并且总是大于maxSessions和maxTransactions,减少此值可能会提高性能(默认值 512)

maxSessions:同一时间内活动的最大Session数,一个Session可以是代码请求的显式Session,也可以是当线程使用SqlMapClient实例(执行一条语句)自动获得的Session,它应该总是大于或者等于maxTransactions

并且小于maxRequests,减小这个参数值可能会减少内存使用(默认值 128)

maxTransactions:同时进入SqlMapClient.startTransaction()的最大线程数,大于这个值的线程将阻塞直到另一个线程退出。不同的数据库有不同的限制值,但任何数据库都有这些限制,这个参数值应该总是小于或等于maxSessions,并总是远远小于maxRequests,减小这个参数值可能会提高性能(默认值 32)

cacheModelsEnabled:全局性的启用或禁用SqlMapClient的所有缓存Model,在调试程序时使用(默认值 true)

lazyLoadingEnabled:全局性的启用或禁用SqlMapClient的所有延迟加载,在调试程序时使用(默认值 true)

useStatementNamespaces:如果启用本属性,则必须使用全限定名来引用执行命令,例如:sqlMapClient.queryForObject("映射文件名.方法名");

(默认值 false)     

 

  

定义事务管理器,包含一个唯一的属性type,用以指定使用的事务管理器类型。有三种不同的选择:JDBC,JTA,EXTERNAL

JDBC:让jdbc来管理事务(常用)

JTA:使用JTA全局事务

EXTERNAL:可以让开发人员来管理事务

                                                          

                      

定义数据源,type="SIMPLE"定义一个基本的实现,基于ibatis的SimpleDataSource连接池实现,其别名为SIMPLE

  

                          

设置数据源参数

JDBC.Driver           JDBC驱动程序类名

JDBC.ConnectionURL    数据库URL

JDBC.Username         数据库用户名

JDBC.Password         数据库密码

JDBC.DefaultAutoCommit连接池中所有连接默认的自动提交模式(默认为true)

Pool.MaximumActiveConnections数据库连接池可维持的最大容量 默认值为10

Pool.MaximumIdleConnections  数据库连接池中允许的挂起连接数,默认值为5

 

                           

引用映射文件


1.POJO映射文件---SqlMap.xml:

 

<sqlMap namespace="BuMen">

     此配置文件的父标签,所有标签都需要配置在此标签内部,它可以设定一个命名空间,但是通常没有作用。

 

<typeAlias alias="BuMen"type="com.cn.thinkmore.bean.BuMen"/>

为POJO设置一个别名,为了在使用SQL标签的时候引用,例如: