Explicación detallada de los componentes de Mybatis.

1. Componentes principales de MyBatis

Los componentes principales de MyBatis se dividen en 4 partes:

  1. SqlSessionFactoryBuilder: genere SqlsessionFactory de acuerdo con la configuración o el código, y use el modo de compilación de compilación distribuida (modo de compilación).

  2. SqlSessionFactory: interfaz de fábrica, confiando en ella para generar SqlSession, usando el modo de fábrica.

  3. SqlSession: Sesión, puede enviar una declaración sql u obtener la interfaz del archivo de mapeo del mapeador.

  4. Sql Mapper: Mapper, que está compuesto por un archivo xml de mapeador y una interfaz Java correspondiente. Debe proporcionar las reglas de mapeo y sql correspondientes. Es responsable de enviar sql y ejecutarlo, y devolver el resultado.
    Inserte la descripción de la imagen aquí

2 、 SqlSessionFactory

  La construcción de SqlSessionFactory debe generarse paso a paso con la ayuda de SqlSessionFactoryBuilder. El método más utilizado es leer el archivo de configuración XML por SqlSessionFactoryBuilder para generar SqlSessionFactory , pero Mybatis también proporciona un método de configuración de código Java (no recomendado, el código es largo).
  Cuando se proporciona el archivo de configuración, Mybatis construirá todo el contexto de Mybatis a través del objeto de clase Configuración. (SqlSessionFactory es una interfaz, hay SqlSessionManager (usado en un entorno multihilo) y DefaultSqlSessionFactory (usado en general)). Cada aplicación Mybatis se basa en una instancia de SqlSessionFactory, su única función es producir el objeto de interfaz central SqlSession. Por lo tanto, debe manejarse en modo singleton.

3 、 SqlSession

  En Mybatis, SqlSession es la interfaz principal, y su función es similar al objeto Connection en JDBC, que representa el inicio de un recurso de enlace de base de datos. Sus funciones principales incluyen acceso a la interfaz del mapeador , envío de SQL a la base de datos y control de transacciones . Pero SqlSession es como un objeto proxy, y el responsable del trabajo es el ejecutor. Debe tenerse en cuenta que SqlSession representa un recurso de conexión de base de datos, y debe cerrarse a tiempo. De lo contrario, cuando el recurso de enlace de base de datos se agote, el sistema se paralizará.

4 、 Mapeador

  Es el componente más complejo e importante en mybatis y consiste en una interfaz y el archivo xml correspondiente (o anotación). Sus funciones principales incluyen:

  1. Describir las reglas de mapeo.
  2. Proporcione la instrucción sql, el tipo de parámetro de configuración, el tipo de valor de retorno, etc.
  3. Configurar caché
  4. Proporcionar función sql dinámica

5. Introducción del ciclo de vida.

  1. SqlSessionFactoryBuilder: su función es crear SqlSessionFactory, por lo que solo puede existir en el método de creación de SqlSessionFactory, no permitir que exista durante mucho tiempo.
  2. SqlSessionFactory: puede considerarse como un grupo de conexión de base de datos, ocupando los recursos de enlace de la base de datos, la esencia de mybatis es operar la base de datos, por lo que debe existir en toda la aplicación mybatis.
  3. SqlSession: visto como una conexión de base de datos, solo sobrevive a una solicitud comercial. Cuando finaliza una solicitud, los recursos deben devolverse a SqlSessionFactory.
  4. Mapper: una interfaz creada por SqlSession, que representa la lógica de procesamiento de negocios en una solicitud, por lo que el ciclo de vida debe ser coherente con SqlSession.

6. Entrada simple

Los directorios principales son los siguientes:
Inserte la descripción de la imagen aquí

6.1, archivo pom

Agregue dependencias: principalmente paquetes de dependencia mybatis y mysql (requerido), pruebas unitarias y registros (opcional)

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.5</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.10</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.37</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.12</version>
    </dependency>
</dependencies>

6.2, POJO 类

package domain;

import java.io.Serializable;
import java.util.Date;

public class User implements Serializable{

    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;

    public Integer getId() {
        return id;
    }

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

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", birthday=" + birthday +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

6.3, IUserDao

package dao;

import domain.User;
import java.util.List;

public interface IUserDao {
    /**
     * 查询所有操作
     * @return
     */
    List<User> findAll();
}

6.4 IUserDao.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="dao.IUserDao">
    <!--配置查询所有-->
    <select id="findAll" resultType="domain.User">
        select * from user
    </select>
</mapper>

6.5 、 SqlMapConfig.xml

<?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">
<!-- mybatis的主配置文件 -->
<configuration>
    <!-- 配置环境 -->
    <environments default="mysql">
        <!-- 配置mysql的环境-->
        <environment id="mysql">
            <!-- 配置事务的类型-->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置数据源(连接池) -->
            <dataSource type="POOLED">
                <!-- 配置连接数据库的4个基本信息 -->
                <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=""/>
            </dataSource>
        </environment>
    </environments>

    <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
    <mappers>
        <mapper resource="dao/IUserDao.xml"/>
    </mappers>
</configuration>

6.6, archivos de registro

Si necesita agregar registros, necesita un archivo de configuración

# Set root category priority to INFO and its only appender to CONSOLE.
#log4j.rootCategory=INFO, CONSOLE            debug   info   warn error fatal
log4j.rootCategory=debug, CONSOLE, LOGFILE

# Set the enterprise logger category to FATAL and its only appender to CONSOLE.
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE

# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

# LOGFILE is set to be a File appender using a PatternLayout.
log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=d:\axis.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n

6.7, categoría de prueba

package service;

import dao.IUserDao;
import domain.User;
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 org.junit.Test;

import java.io.InputStream;
import java.util.List;

/**
 * @author RuiMing Lin
 * @date 2020-04-09 14:49
 */
public class UserService {

    private IUserDao userDao;
    @Test
    //测试方法
    public void Test1() throws Exception{
        //1.读取配置文件
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.创建SqlSessionFactory工厂
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        //3.使用工厂生产SqlSession对象
        SqlSession session = factory.openSession();
        //4.使用SqlSession创建Dao接口的代理对象
        IUserDao userDao = session.getMapper(IUserDao.class);
        //5.使用代理对象执行方法
        List<User> users = userDao.findAll();
        for(User user : users){
            System.out.println(user);
        }
        //6.释放资源
        session.close();
        in.close();
    }
}

¡Señale cualquier error, bienvenido a comentar o intercambiar mensajes privados! Siga actualizando la tecnología Java, Python y Big Data todos los días, ¡preste atención!

64 artículos originales publicados · Me gusta 148 · Visitantes 20,000+

Supongo que te gusta

Origin blog.csdn.net/Orange_minger/article/details/105453305
Recomendado
Clasificación