MyBatis 以前叫 iBatis, 相对于 HIbernate 是一个轻量级的 ORM 框架, 一般的小型的项目使用 HIbernate 实在是大材小用. 这两天学了学 MyBatis, 就好好的总结一下吧.

    先来一个快速入门吧!

    我的开发环境: 

        jdk1.8, windows7, EclipseJ2EE, MySQL, SQLyog


一: MyBatis 开发环境搭建.

    1. 建项目 

    新建一个 JavaProject, 新建一个 lib 目录, 用来存放所需的 jar 包的.

    2. 下载需要的jar包

    MyBatis 的 jar 包点击 MyBatis In Maven 上下载

    MySQL 数据库连接驱动点击 MySQL-connector 下载.

    3. 添加 jar 包 

    把两个 jar 包粘贴到新建的 lib 目录下面, 然后选中两个 jar 包, 右击, Build Path -> Add To Path, 把 jar 包添加到当前的项目中.

    如下:

    1. MyBatis入门_第1张图片


二: 对数据表的简单 CRUD

    1. 建库

CREATE DATABASE mybatis;
USE mybatis;
CREATE TABLE person(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT);
INSERT INTO person(NAME, age) VALUES('Tom', 23);
INSERT INTO person(NAME, age) VALUES('Mike', 14);
INSERT INTO person(NAME, age) VALUES('Jack', 18);

    2. 添加 MyBatis 的配置文件 conf.xml

    在 src 目录下建立一个 conf.xml 文件, 并添加一下内容, 连接信息需自己修改.




	
		
			
			
				
				
				
				
			
		
	

   其中: 

    ①. environments及environment 的 default 属性指定模式

         development: 开发模式(一般选用这个)

         work: 工作模式

    ②. transactionManager 的 type 属性用于指定事务管理器类型
          JDBC:使用JDBC的提交和回滚设置,依赖从数据源获取的连接来管理事务范围.

          MANAGED:让容器(如Spring)来管理事务的生命周期。默认情况会关闭连接.

    ③. dataSource 的 type 属性指定连接池类型

        UNPOOLED:连接用完就关闭,不放到连接池
        POOLED:连接用完则放在连接池

    里边的连接属性就不用说了.


    3. 建立与数据表对应实体类 Person

        在 src 下面建立一个 com.mybatis.entities 包用来存放 Person 实体类. 然后在包下建立实体类 Person.

1. MyBatis入门_第2张图片

    具体的 setter 和 getter 以及 toString 方法自己写好, 如果添加了一个 有参的构造方法, 一定要加上一个无参的构造方法, 因为 MyBatis 会利用反射为属性赋值.


    4. 添加操作 person 数据表的 SQL 映射文件 PersonMapper.xml

    在 com.mybatis.entities 包下新建一个 PersonMapper.xml(类名+Mapper.xml) 文件,添加

一下内容到文件中


 
 
	
	
	
		SELECT * FROM person WHERE id=#{id}
	
	

     ①. mapper 标签的 namespace 属性的值这样填写: 

        PersonMapper.xml 文件所在的包 + PersonMapper.xml 去掉 .xml

        就是: com.mybatis.entities.PersonMapper

     ②. 标签的属性

      a). id: 我们在调用内部 SQL 语句的时候会利用这个, 保证本文件中唯一不冲突.

      b). parameterType: 传进来的参数的类型, 因为我们通过 id 查找一个 Person 对象.所以传进来一个 int 类型的 id.

      c). resultType: 返回值类型, 这里写全类名, 带着包名.

    内部就是SQL语句, 至于 #{id} 这个就是用来接收传进来的 int 类型的数字.


    5. 在 conf.xml 文件中关联 PersonMapper.xml 映射文件

    利用 标签来关联映射文件. 如下:


	

    标签与标签处于同一个级别.

    

    6. 编写测试类. 获取一个 Person 对象

    新建一个 com.mybatis.test 包, 在包下建立一个 TestPerson 类. 利用 Junit 单元测试来测试.

代码如下:

import java.io.InputStream;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import com.mybatis.entities.Person;

public class TestPerson {
	
	@Test
	public void testGetPerson(){
		
		InputStream is = getClass().getClassLoader()
		        .getResourceAsStream("conf.xml");
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder()
		        .build(is);
		SqlSession session = sessionFactory.openSession();
		
		String statement = "com.mybatis.entities.PersonMapper.getPerson";
		Person person = session.selectOne(statement , 1);
		
		System.out.println(person); // Person [id=1, name=Tom, age=23]
		
	}
	
}

    与 Hibernate 一样, 我们需要一个 SessionFactory 和一个 Session,

    SessionFactory的创建需要一个流, 这个流对应着就是 conf.xml 文件的流.

    session 的创建也很简单, openSession 就可以了. 


    告知 MyBatis 要调用哪一个 SQL 语句:

    String statement = "com.mybatis.entities.PersonMapper.getPerson"; 

    最后边的 getPerson 就是刚才我们