一、MyBatis是什么

MyBatis 是一款优秀的持久层框架
MyBatis 是一个半自动化的ORM框架 (Object Relationship Mapping) —>对象关系映射
支持定制化SQL,存储过程以及高级映射
它相比JDBC步骤更简洁 ,几乎避免了JDBC代码和手动设置参数以及获取结果集

MyBatis 前身是apache的一个开源项目ibatis, 2010年迁移到了,改名为MyBatis 。
2013年迁移到Github 。
GitHub : https://github.com/mybatis/mybatis-3

二、MyBatis的工作原理

MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,
将接口和 Java 的 实体类映射成数据库中的记录。

工作原理:mybatis应用程序通过SqlSessionFactoryBuilder(构造器)从mybatis-config.xml配置文件(也可以用Java文件配置的方式,需要添加@Configuration)来构建SqlSessionFactory(工厂接口).;
然后,SqlSessionFactory的实例直接开启一个SqlSession(会话),再通过SqlSession实例获得Mapper对象并运行Mapper映射的SQL语句,完成对数据库的CRUD和事务提交,之后关闭SqlSession。

说明:SqlSseeionFactoryBuilder:是一个封装对象,这个类可以被实体化,使用和丢弃,SqlSessionFactorybuilder实例的最佳作用域是方法作用域。可以重复用其创多个SqlSessionFactory实例,但用完最好不要让其一直存在,占用解析资源。

SqlSessionFactory:一旦被创建就会在应用运行期间一直存在,因此运行期间不要多次重复创建。它的最佳作用域是应用作用域。默认就是单例模式或静态单例模式

SqlSessions:SqlSession实例不是线程安全的,因此是不能被共享的。每一个HTTP请求,就可以打开一个S起来Session,返回一个响应,就关闭它。(放到finally中)

三、MyBatis的核心组件

SqlSseeionFactoryBuilder:SqlSseeionFactory(工厂接口),SqlSseeion(会话),Sql Mapper(映射器)
1. SqlSessionFactoryBuilder. 生成SqlSession,采用分布构建的builder模式

  1. SqlSessionFactory.: 它可以生成SqlSession,采用的是工厂模式。

  2. SqlSession.:mybatis的核心接口对象,它可以发送SQL语句返回结果,也可以获取Mapper接口。

  3. SQL Mapper).: 它由一个Java接口和一个XML文件(或注解)构成,需要给出对应的SQL和映射规则,它可以发送SQL并返回结果。

四、MyBatis使用的思路流程

1、搭建实验数据库
CREATE DATABASE xxx;
USE xxx;

CREATE TABLE xxxx (
) ;

2、导入MyBatis相关 jar 包

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.mybatis</groupId>
  4. <artifactId>mybatis</artifactId>
  5. <version>3.5.2</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>mysql</groupId>
  9. <artifactId>mysql-connector-java</artifactId>
  10. <version>8.0.17</version>
  11. </dependency>
  12. <dependency>
  13. <groupId>junit</groupId>
  14. <artifactId>junit</artifactId>
  15. <version>4.12</version>
  16. </dependency>
  17. </dependencies>

3、编写MyBatis核心配置文件

<?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">















!—每一个Mapper.xml 都需要在Mybatis核心配置文件中 —>



4、编写MyBatis工具类

package utils;

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

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

//SqlSessionFactory
public class MyBatisUtils {
private static SqlSessionFactory sqlSessionFactory;
static{
try{
String resource = “mybatis-config.xml”;/*根据自己路径写
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}catch (IOException e){
//打印异常输出
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();

  1. }<br />}<br />5、创建实体类<br />package jipo;

public class User {
private int id;
private String name;
private String pwd;
xxxxx
xxxx
(ALT+Insert)
}
6、编写Mapper接口类

import jipo.User;

import java.util.List;

public interface UserDao {

    List<User> getUserList();
}

7、编写Mapper.xml配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="xxxx">//命名空间,一定要写正确路径
    <select id="getUserList" resultType="xxx.User" >//User所在路径
        select * from xxxx;
    </select>
</mapper>

8、编写测试类

public class UserDaoTest {
    @Test
    public void  test(){
         //
        SqlSession sqlSession = MyBatisUtils.getSqlSession();
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        List<User> userList = userDao.getUserList();
        for (User user : userList){
            System.out.println(user);

        }
        sqlSession.close();

    }
}

附:要使用 MyBatis, 需将 mybatis-x.x.x.jar 文件置于类路径(classpath)中。
如果使用 Maven 来构建项目,则需将下面的依赖代码置于 pom.xml 文件中:、

org.mybatis
mybatis
x.x.x

maven静态资源过滤问题报错时,将build下加入以下代码

 <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>