Mybatis框架

MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。





一、第一个Mybatis案例


(一)引入jar包

Mybatis的jar包 和 mysql数据库驱动可到 maven公库中找到。

Mybatis框架_第1张图片

Mybatis框架_第2张图片



(二)编写Mybatis配置文件

MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置(settings)和属性(properties)信息。现在先做个简单的实例,稍后再作讲解。



<configuration>

    
    <environments default="development">

        
        <environment id="development">

            
            <transactionManager type="JDBC"/>
            
            <dataSource type="POOLED">
                
                <property name="driver" value="com.mysql.jdbc.Driver">property>
                <property name="url" value="jdbc:mysql://localhost:3306/hibernate">property>
                <property name="username" value="root">property>
                <property name="password" value="qwertyuio">property>
            dataSource>
        environment>
    environments>

    
    <mappers>
        <mapper resource="com/mybatis/dao/impl/UserMapper.xml" /> 
    mappers>

configuration>



(三)从配置文件中构建 SqlSessionFactory

每个基于 MyBatis 的应用都是以一个 SqlSessionFactory 的实例为中心的。SqlSessionFactory 的实例可以通过 SqlSessionFactoryBuilder 获得。而 SqlSessionFactoryBuilder 则可以从 XML 配置文件或一个预先定制的 Configuration 的实例构建出 SqlSessionFactory 的实例。

从 XML 文件中构建 SqlSessionFactory 的实例非常简单,建议使用类路径下的资源文件进行配置。但是也可以使用任意的输入流(InputStream)实例,包括字符串形式的文件路径或者 file:// 的 URL 形式的文件路径来配置。MyBatis 包含一个名叫 Resources 的工具类,它包含一些实用方法,可使从 classpath 或其他位置加载资源文件更加容易。

我们编写一个Mybatis工具:

package com.mybatis.utils;

import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

/**
 * Mybatis工具类
 * 获取SqlSession实例,关闭SqlSession会话
 * 
 * @author lee
 *
 */
public class MybatisUtils {

    private static SqlSessionFactory fac;
    private static InputStream input = null;
    private static ThreadLocal local;

    static {
        //创建本地线程,用于单例化一个SqlSession实例
        local = new ThreadLocal<>();

        try {
            //加载配置文件,传入的参数是 配置文件的路径
            input = Resources.getResourceAsStream("mybatis.xml");
            //构建SqlSessionFactory 实例
            fac = new SqlSessionFactoryBuilder().build(input);

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                //关闭输入流
                input.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
    /**
     * @return session 返回一个单例化SqlSession实例
     */
    public static SqlSession openSession() {

        //从本地线程中获取一个 SqlSession实例,假如没有则创建一个
        SqlSession session = (SqlSession)local.get();
        if(session == null) {
            session = fac.openSession();
            local.set(session);
        }

        return session;
    }

    /**
     * 关闭session会话
     * 
     * @param session
     */
    public static void closeSession(SqlSession  session) {
        session.close();
        local.set(null);
    }
}



(四)配置映射文件

MyBatis 的真正强大在于它的映射语句,也是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 就是针对 SQL 构建的,并且比普通的方法做的更好。




  
<mapper namespace="com.mybatis.dao.IUserDao">
    
    <select id="getAll" resultType="com.mybatis.entity.User">
        select * from user
    select>

mapper>



(五)编写 dao层类

在配置映射文件中,我们在 元素中配置的namespace 就是对应着我们的dao层类,即是数据操作类。在 映射查询语句的 id 找到该方法 public List getAll(); }



(六)实体类和数据库

在配置映射文件中,我们在