Mybatis入门一

    学习编程是一门动手的过程,只有一边学习一边写代码才有效果,同时把自己学习的笔记和心得记录下来。学习Mybatis那么开始我们先从搭建Mybatis的环境开始。

一 下载Mybatis

     输入网址:https://github.com/mybatis/mybatis-3/releases,进入到Mybatis的官网,我们就可以下载Mybatis,如下图所示:



 我们下载Mybatis所需的jar包和源码包,学习Mybatis的时候会用到。

使用Mybatis项目可以参考http://mybatis.org/mybatis-3/zh/index.html

使用Mybatis-spring项目可以参考:http://mybatis.org/spring/zh/index

 

二 搭建开发环境

   解压下载的Mybatis开发包可以看到如下如所示的目录:


 这里的jar包分为两类,一类是mybatis本身的jar,另一类在lib文件夹里,mybatis所依赖的jar,而pdf则是提供的api文档。

   使用Myeclipse创建一个web项目,使用的jdk是1.8,项目结构如下所示:


    上面就是初始时的目录结构,后面我们需要需要根据需要加入jar包,编写mybatis的配置文件,还没会详细进行配置。


三   mybatis的基本构成

    mybatis的核心组件包括下面几个:

  SqlSessionFactoryBuilder(构造器):它会根据配置信息或者代码来生成SqlSessionFactory(工厂接口)。

  SqlSessionFactory:依靠工厂来生成SqlSession(会话)

  SqlSession:是一个既可以发送sql去执行并返回结果,也可以获取Mapper的接口。

  SQL Mapper:它是Mybatis新设计的组件,它是由一个java接口和xml文件(注解)构成的,需要给出对应的sql和映射规则。它负责发送sql去执行,并返回结果。


四 构建SqlSessionFactory

    每个Mybatis的应用都是以SqlSessionFactory的实例为中心。SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder获得。但是需要注意,SqlSessionFactory是一个工厂接口而不是实现类,它的任务是创建SqlSession。SqlSession类似于一个jdbc的Connection对象。Mybatis提供了两种模式去创建SqlSessionFactory:一种是通过xml配置的方式;另外一种是通过java代码的方式创建。在能够使用配置文件的时候,我们尽量使用配置文件,避免应编码,方便以后的修改和维护。

     Configuration类存在于Mybatis整个应用的生命周期中,以便重复读取和运用。在内存中的数据计算机读取是最快的,我们解析一次配置的xml文件然后保存到Conguration类对象中,方便我们从这个对象中读取配置信息,性能高,单例占用空间小,基本不占用存储空间,而且可以反复使用。Conguration类对象保存这我们配置的mybatis信息。在mybatis中提供了两个SqlSessionFactory的实现类,DefaultSqlSessionFactory和SqlSessionManager。不过SqlSessionManager目前还没使用,mybatis中目前常用的是DefaultSqlSessionFactory。


1,使用xml方式构建

    下面配置一个简单的xml,包含了获取数据库连接实例的数据源,决定事务范围和控制方式的事务管理器和映射器。xml配置文件的内容后面在详细说明,这里给出mybatis在这http://mybatis.org/mybatis-3/zh/index.html网址里面的一个参考配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 定义类的别名 -->
<typeAliases>
<typeAlias type="com.jack.Role" alias="role"/>
</typeAliases>
<!-- 定义数据库信息,默认使用development数据库构建环境 -->
  <environments default="development">
    <environment id="development">
    <!--采用jdbc事务管理  -->
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
  </mappers>
</configuration>

   对上面的配置做一个简单的说明:

  1) 这里配置了一个别名role,带代表的是一个Role类,这样我们就可以在Mybatis上下文中应用它。

  2)配置了环境内容,它默认使用id是developer的环境配置,包含以下两 方面的内容。

       采用jdbc事务管理模式

       数据库的连接信息

       配置映射器

   这里引入了一个xml,它的作用是提供sql和sql对pojo的映射规则定义,它保护了映射里面的信息。Mybatis将解析这个xml,来为我们生成映射器。

   现在使用xml的配置,我们使用代码来实现创建SqlSessionFactory,代码如下:

   

package com.mybatis.sql.session.factory;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MybatisSqlSessionFactory {

	public static void main(String args[]) {
		// mybatis配置文件的路径
		String resource = "org/mybatis/config/mybatis-config.xml";
		InputStream inputStream = null;
		try {
			// 获取资源的输入流
			inputStream = Resources.getResourceAsStream(resource);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		SqlSessionFactory sqlSessionFactory = null;
		// 获取到SqlSessionFactory对象
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	}
}

   上面我们创建了一个xml文件输入流,用SqlSessionFactoryBuilder读取xml的信息来创建SqlSessionFactory的对象。mybatis的解析程序会将mybatis-config.xml文件配置的信息解析到Configuration类对象里面,然后利用SqlSessionFactoryBuilder读取这个对象为我们创建SqlSessionFactory。

    项目的目前结构如下:




   Role类的代码如下:

   

package org.mybatis.pojo;

public class Role {
	private Long id;
	private String roleName;
	private String note;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getRoleName() {
		return roleName;
	}

	public void setRoleName(String roleName) {
		this.roleName = roleName;
	}

	public String getNote() {
		return note;
	}

	public void setNote(String note) {
		this.note = note;
	}
}


2,使用代码的方式构建

     除了使用xml配置的方式创建以外,还能使用java代码编码的方式来实现,但是不推荐。mybatis已经给我们提供了类和方法,我们只需要配置好就行。首先构建Configuration类对象,然后往这对象里面注册我们构建SqlSessionFactory所需的信息即可。下面是java代码的实现:

// 通过java代码来创建SqlSessionFactory
	public static SqlSessionFactory createSqlSessionFactoryByJavaCode() {
		// 构建数据库连接池
		PooledDataSource dataSource = new PooledDataSource();
		dataSource.setDriver("com.mysql.jdbc.Driver");
		dataSource.setUrl("jdbc:mysql://localhost:3306/mybatis");
		dataSource.setUsername("root");
		dataSource.setPassword("root");
		// 构建数据库事务方式
		TransactionFactory transactionFactory = new JdbcTransactionFactory();
		// 创建数据库运行环境
		Environment enviroment = new Environment("development", transactionFactory, dataSource);
		// 构建Configuration对象
		Configuration configuration = new Configuration(enviroment);
		// 注册一个mybatis上下文别名
		configuration.getTypeAliasRegistry().registerAlias("role", Role.class);
		// 加入一个映射器
		configuration.addMapper(RoleMapper.class);
		//
		SqlSessionFactory selSesionFactory = new SqlSessionFactoryBuilder().build(configuration);
		return selSesionFactory;

	}

   上面的代码做了如下的事情:

 1)初始化一个数据库连接池

 2)定义了jdbc的数据库事务管理方式

 3)用数据库连接池和事务管理方式创建了一个数据库运行环境,并命名为development。

 4)创建了一个Configuration类对象,并把数据库运行回家注册给它。

 5)注册了一个Role的别名

 6)加入了一个映射器

 7)用SqlSessionFactoryBuilder通过Configuration对象创建SqlSessionFactory


五  创建SqlSession

     SqlSession是一个接口类,而真正干活的是Executor接口。在Mybatis中SqlSession接口的实现类有两个,分别是DefaultSqlSession和SqlSessionManager。暂时不深入讨论Executor接口及其涉及的其他类,之关心SqlSession的用户即可。我们构建了SqlSessionFactory,然后生成Mybatis的门面接口SqlSession。SqlSession接口类似于jdbc中的connection接口对象,我们需要保证每次用完正常关闭它,所以正确的做饭是把关闭SqlSession接口的代码写到finally中,保证每次用完就关闭,把资源还给数据库。下面是伪代码的实现

		SqlSession sqlSession = null;
		try{
		sqlSession =sqlSessionFactory.openSession();
		//to do something
		sqlSession.commit();
		}catch(Exception ex){
			System.err.println(ex.getMessage());
			sqlSession.rollback();
		}finally{
			//在 finally中确保资源的关闭
			if(sqlSession != null){
				sqlSession.close();
			}
		}

   这样sqlSession就被创建出来了,在finally语句中我们保证了它合理的关闭,让连接资源还给数据库,以便后续使用。

   SqlSession的用途主要有以下两种:

  1)获取映射器,让映射器通过命名空间和方法名称找到对应的sql,发送给数据库执行后返回结果。

  2)直接通过命名信息去执行sql返回结果,这是ibatis版本留下的方式。在SqlSession层我们可以通过update,insert,select,delete等方法,带上SQL的id来操作xml配置好的sql,从而完成我们的工作;与此同时它也支持事务,通过commit,rollback方法提交或者回滚事务。

  关于SqlSessionFactory和SqlSession的介绍就到这里了,有关详细的使用后续还会总结。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值