MyBatis-01-01-Descripción general del marco MyBatis y demostración de implementación simple


Introducción a MyBatis

  • MyBatis fue originalmente un proyecto de código abierto iBatis de Apache
  • En 2010, el proyecto se migró de la base del software apache al código de Google y pasó a llamarse MyBatis.
  • Migrado a GitHub en noviembre de 2013
  • MyBatis es un marco de persistencia que admite consultas SQL personalizadas, procedimientos almacenados y mapeo avanzado.
  • En comparación con el desarrollo JDBC tradicional, MyBatis elimina casi todos los ajustes manuales de códigos y parámetros.
  • MyBatis es un marco ORM
  • MyBatis puede utilizar XML o anotaciones para configuración y mapeo, es Clases de entidad y sentencias SQL Se establece una relación de mapeo entre, e Hibernate está enClases de entidad y tablas de base de datosEstableció una relación de mapeo entre.

Hibernate y MyBatis son marcos de persistencia y marcos ORM. Todos están simplificando las operaciones de persistencia.

Todos los programas finalmente generados por MyBatis son generados manualmente por programadores.


Archivo de configuración XML del núcleo de MyBatis

El archivo de configuración XML (XML de configuración) contiene las configuraciones centrales del sistema MyBatis, incluida la fuente de datos (DataSource) para obtener instancias de conexión a la base de datos y el administrador de transacciones (TransactionManager) que determina el alcance y el método de control de la transacción.

<?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> 
    <settings>
    	全局参数的设置
        打印SQL语句
        <setting name="logImpl" value="STDOUT_LOGGING" />
    </settings>
	多个数据源环境配置
    <environments default="development"> 
        <environment id="development"> 
         	事务和数据源 
        </environment>
    </environments> 
</configuration>

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

        <environment id="development"> 
            <!-- 事务管理器类型 -->
            <transactionManager type="JDBC"/>
			<!-- 数据源选择从数据库连接池获得对象 -->
		    <dataSource type="POOLED">
		        <property name="driver" value="com.mysql.jdbc.Driver"/>
		        <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8"/>
		        <property name="username" value="root"/>
		        <property name="password" value=""/>
		    </dataSource> 
        </environment>

Inserte la descripción de la imagen aquí

Elegir Administrado significa que lo administra el contenedor.
Después de usar Spring, puede usar los siguientes tipos

Inserte la descripción de la imagen aquí
unpooled: No hay grupo de conexiones de base de datos, cada vez que se crea un nuevo enlace
agrupado: grupo de conexiones de base de datos, use el enlace
jndi del grupo de enlaces de base de datos :

  • UNPOOLED: La implementación de esta fuente de datos es simplemente abrir y cerrar la conexión cada vez que se solicita. Es un poco lento, lo cual es una buena opción para aplicaciones simples, porque no requiere una conexión disponible oportuna.

  • POOLED: Esta es la implementación del grupo de conexiones de origen de datos del objeto de conexión JDBC, que se utiliza para evitar la conexión inicial necesaria y el tiempo de autenticación al crear una nueva instancia de conexión. Este es un método popular utilizado por las aplicaciones web actuales para responder rápidamente a las solicitudes.

  • JNDI: Esta fuente de datos está implementada para usar contenedores como Spring o servidores de aplicaciones. El contenedor puede configurar la fuente de datos de forma centralizada o externa, y luego colocar una referencia al contexto JNDI

Inserte la descripción de la imagen aquí

<?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">
    
    <!-- SQL映射文件的配置 -->
    <!-- nameSpace=映射空间。唯一标识的字符串-->
    <mapper namespace="com.mybatis.mapper.UserMapper">
	    <select id="selectAllUsers"    
	            resultType="com.mybatis.entity.User">
	        select * from user
	    </select>
	</mapper>

Inserte la descripción de la imagen aquí


La jerarquía de clases principal de MyBatis

Inserte la descripción de la imagen aquí
SqlSessionFactory: puede crear Seiion factory class
Executor: generación de declaraciones dinámicas y mantenimiento de caché

Tabla de comparación de tipos de datos Java y tipos de datos jdbc https://blog.csdn.net/qq_43517117/article/details/86551215

Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

public class MyBatisUtil {
    
    
    private static SqlSessionFactory factory;
    
    //第一次加载时自动执行
    static {
    
    
        try {
    
    
        //参数:主配置文件的文件名。默认路径resources文件目录
            InputStream is = Resources.getResourceAsStream("mybatis.xml");
            factory = new SqlSessionFactoryBuilder().build(is);
            is.close();
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
    }
    
    public static SqlSession openSqlSession() {
    
    
        return factory.openSession();
    }
}

El primer programa MyBatis

manual

Estructura del proyecto

Inserte la descripción de la imagen aquí

  1. Crear un proyecto Java

  2. Importe el paquete jar requerido por MyBatis
    Inserte la descripción de la imagen aquí

    Uno es MyBatis que debe estar empaquetado. Uno es el paquete de controladores MySql.

  3. Crear clases de entidad e interfaz de mapeador (DAO)
    Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

user.java

package com.mybatis.entity;

public class User {
    
    

	private Integer id;
	private String userName;
	private String password;
	
	
	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 String getPassword() {
    
    
		return password;
	}
	public void setPassword(String password) {
    
    
		this.password = password;
	}
	
	
	@Override
	public String toString() {
    
    
		return "User [id=" + id + ", userName=" + userName + ", password=" + password + "]";
	}
	
	
	
}

UserMapper.java

package com.mybatis.mapper;

import java.util.List;

import com.mybatis.entity.User;


//类型是interface ,
//这是映射器接口,定义对持久化对象的增删改查方法
//一个映射器接口对应一个映射文件
public interface UserMapper {
    
    

	List<User> findAllUsers();
}

  1. Cree el archivo de configuración principal mybatis.xml para MyBatis

    Cree una nueva carpeta de origen en el proyecto y asígnele el nombre de recursos para almacenar el archivo de configuración principal de MyBatis, y cree un nuevo archivo XML en los recursos y asígnele el nombre mybatis.xml

MaBatis.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"> 

<configuration> 


    <!--全局参数的设置,例如日志的实现类 -->
    <settings>
        <setting name="logImpl" value="STDOUT_LOGGING" />
    </settings>
    
    
    
	<!--多个数据源环境配置,default:下面定义的标签的id-->
    <environments default="development"> 
        <environment id="development"> 
            <!-- 事务管理器类型 -->
            <transactionManager type="JDBC"/>
			<!-- 数据源选择从数据库连接池获得对象 -->
		    <dataSource type="POOLED">
		        <property name="driver" value="com.mysql.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://localhost:3306/database_mybatis?characterEncoding=utf-8"/>
		        <property name="username" value="root"/>
		        <property name="password" value=""/>
		    </dataSource> 
        </environment>
    </environments> 
    
	<!-- SQL映射文件 -->
	<mappers>
		<mapper resource="com/mybatis/mapper/UserMapper.xml"/>
	</mappers>
    
    
</configuration>
  1. Crear archivo XML de mapeo SQL para MyBatis

    Cree el archivo XML de mapeo SQL de MyBatis, y el archivo de mapeo debe estar en el mismo paquete que la interfaz del mapeador recién creada, y el nombre de la interfaz del mapeador es el mismo, por lo que el nombre del archivo de mapeo es UserMapper.xml

    Nota: Para asociar el archivo de mapeo al archivo de configuración principal

UserMapper.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">
    
    
<!-- 映射文件 -->    
<!-- nameSpace为唯一标识,映射器接口的全限定名 -->
<mapper namespace="com.mybatis.mapper.UserMapper">
	
	<!-- select用来映射查询语句
		id=对应的映射器接口的方法名
		resultType同映射接口中该方法的返回值类型一致,或跟返回值中元素类型一致 
		因为没有声明文件位置,所以参数需要输入全部包名-->
	<select id="findAllUsers" resultType="com.mybatis.entity.User">
		select * from mybatis_01_01_user
	</select>
	
	<select id=""></select>
</mapper>
  1. Asocie el archivo de mapeo SQL con el archivo de configuración principal

Inserte la descripción de la imagen aquí
Agregue código en el archivo MyBatis.xml
Inserte la descripción de la imagen aquí

	<!-- SQL映射文件 -->
	<mappers>
		<mapper resource="com/mybatis/mapper/UserMapper.xml"/>
	</mappers>
  1. Escribe el código para probar

Inserte la descripción de la imagen aquí

Test.java

package com.mybatis.ui;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.mybatis.entity.User;
import com.mybatis.mapper.UserMapper;
import com.mybatis.util.MyBatisUtil;

public class Test {
    
    

	public static void main(String[] args) {
    
    
		System.out.println("=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
		//创建SqlSession对象
		SqlSession session = MyBatisUtil.openSqlSession();
		//映射器接口权限定名+方法名(映射文件的nameSpace的数值+某一条SQL语句映射的id属性的值)
		//方式1,调用SqlSession的方法
		System.out.println("-=---------------------");
		List<User> users = session.selectList("com.mybatis.mapper.UserMapper.findAllUsers");
		System.out.println(users);
		session.close();
	}
}

Inserte la descripción de la imagen aquí

Test.java

package com.mybatis.ui;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.mybatis.entity.User;
import com.mybatis.mapper.UserMapper;
import com.mybatis.util.MyBatisUtil;

public class Test {
    
    

	public static void main(String[] args) {
    
    
		//方式2:更推荐
		//参数=映射器接口的类型,
		//返回值=该接口实现类型对象
		SqlSession session = MyBatisUtil.openSqlSession();
		UserMapper userMapper = session.getMapper(UserMapper.class);
		List<User> users = userMapper.findAllUsers();
		System.out.println(users);
		
		System.out.println("----------------------------");
		session.close();
	}
}

Flujo de trabajo de SqlSession

Inserte la descripción de la imagen aquí
El funcionamiento de la transacción se pone aquí.

Inserte la descripción de la imagen aquí

La declaración SQL se puede ubicar a través de la identificación única
Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/qq_44627608/article/details/115341805
Recomendado
Clasificación