Notas de estudio de SSM 9 (Introducción a Mybatis)

1. Introducción a Mybatis

1.1 Operación jdbc original (consulta de datos)

Inserte la descripción de la imagen aquí

1.2 Operación jdbc original (insertar datos)

Inserte la descripción de la imagen aquí

1.3 Análisis de la operación jdbc original

Los problemas del desarrollo de jdbc original son los siguientes:

① La creación y liberación frecuentes de conexiones de bases de datos provocan el desperdicio de recursos del sistema y afectan el rendimiento del sistema.

② La instrucción sql está codificada en el código, lo que hace que el código sea difícil de mantener. La aplicación real de sql puede cambiar mucho, y el cambio de sql requiere cambiar el código java.

③Al realizar consultas, debe encapsular manualmente los datos del conjunto de resultados en la entidad. Al insertar, debe configurar manualmente los datos de la entidad en la posición del marcador de posición de la declaración SQL

Soluciones a los problemas anteriores:

①Utilice el grupo de conexiones de la base de datos para inicializar los recursos de conexión

②Extraiga la declaración sql al archivo de configuración xml

③Utilizar tecnologías subyacentes como la reflexión y la introspección para mapear automáticamente entidades y tablas con atributos y campos.

1.4 Qué es Mybatis

Mybatis es un excelente marco de trabajo de capa de persistencia basado en Java, que encapsula jdbc, por lo que los desarrolladores solo deben prestar atención a la declaración sql en sí, en lugar de gastar energía en los complicados procesos de cargar controladores, crear conexiones y crear declaraciones.

Mybatis configura varias sentencias para que se ejecuten a través de xml o anotación, y genera la sentencia sql final ejecutada a través de la asignación de objetos java y los parámetros dinámicos de sql en la sentencia.

Finalmente, el marco mybatis ejecuta sql y mapea el resultado a un objeto java y regresa. La idea de ORM se utiliza para resolver el problema del mapeo de entidades y bases de datos, encapsular jdbc, proteger los detalles del acceso subyacente de la api de jdbc, de modo que podamos completar la operación de persistencia de la base de datos sin tener que lidiar con la api de jdbc.

2. Inicio rápido de Mybatis

2.1 Pasos de desarrollo de MyBatis

Dirección del sitio web oficial de MyBatis: http://www.mybatis.org/mybatis-3/

Inserte la descripción de la imagen aquí

Pasos de desarrollo de MyBatis:

①Añadir las coordenadas de MyBatis

②Crear tabla de datos de usuario

③Escribe la clase de entidad de usuario

④ Escriba el archivo de mapeo UserMapper.xml

⑤ Escriba el archivo principal SqlMapConfig.xml

⑥Clase de prueba de escritura

2.2 Configuración del entorno

1) Importar las coordenadas de MyBatis y otras coordenadas relacionadas

<!--mybatis坐标-->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.5</version>
</dependency>
<!--mysql驱动坐标-->
<dependency>    
    <groupId>mysql</groupId>   
    <artifactId>mysql-connector-java</artifactId>    
    <version>5.1.6</version>    
    <scope>runtime</scope>
</dependency>
<!--单元测试坐标-->
<dependency>    
    <groupId>junit</groupId>    
    <artifactId>junit</artifactId>    
    <version>4.12</version>    
    <scope>test</scope>
</dependency>
<!--日志坐标-->
<dependency>    
    <groupId>log4j</groupId>    
    <artifactId>log4j</artifactId>    
    <version>1.2.12</version>
</dependency>
  1. Crear tabla de datos de usuario

Inserte la descripción de la imagen aquí

  1. Escribir entidad de usuario
public class User {
    
        
	private int id;    
	private String username;    
	private String password;
    //省略get个set方法
}

4) Escriba el archivo de mapeo de UserMapper

<?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="userMapper">    
	<select id="findAll" resultType="com.itheima.domain.User">        
		select * from User    
	</select>
</mapper>
  1. Escriba el archivo central de MyBatis
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN“ "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>    
	<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:///test"/>                
				<property name="username" value="root"/>
				<property name="password" value="root"/>            
			</dataSource>        
		</environment>    
	</environments>    
	
	<mappers> 
		<mapper resource="com/itheima/mapper/UserMapper.xml"/> 
	</mappers>
</configuration>

2.3 Escribir código de prueba

//加载核心配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
//获得sqlSession工厂对象
SqlSessionFactory sqlSessionFactory = new            
                           SqlSessionFactoryBuilder().build(resourceAsStream);
//获得sqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行sql语句
List<User> userList = sqlSession.selectList("userMapper.findAll");
//打印结果
System.out.println(userList);
//释放资源
sqlSession.close();

2.4 Resumen de conocimientos

Pasos de desarrollo de MyBatis:

①Añadir las coordenadas de MyBatis

②Crear tabla de datos de usuario

③Escribe la clase de entidad de usuario

④ Escriba el archivo de mapeo UserMapper.xml

⑤ Escriba el archivo principal SqlMapConfig.xml

⑥Clase de prueba de escritura

3. Vista general del archivo de mapeo de MyBatis

Inserte la descripción de la imagen aquí

4. Agregar, eliminar, modificar y verificar operaciones de MyBatis

4.1 Insertar operación de datos de MyBatis

1) Escriba el archivo de mapeo de UserMapper

<mapper namespace="userMapper">    
	<insert id="add" parameterType="com.itheima.domain.User">        
		insert into user values(#{id},#{username},#{password})    
	</insert>
</mapper>

2) Escribe el código para insertar la entidad Usuario

InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new 
                        SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
int insert = sqlSession.insert("userMapper.add", user);
System.out.println(insert);
//提交事务
sqlSession.commit();
sqlSession.close();

3) Preste atención al problema de la operación de inserción

• La declaración de inserción utiliza la etiqueta de inserción

• Utilice el atributo parameterType en el archivo de mapeo para especificar el tipo de datos que se insertarán

• La declaración SQL usa # {nombre del atributo de la entidad} para referirse al valor del atributo en la entidad

• La API utilizada por la operación de inserción es sqlSession.insert ("namespace.id", objeto de entidad);

• La operación de inserción implica cambios en los datos de la base de datos, por lo que debe utilizar la transacción de confirmación mostrada por el objeto sqlSession, es decir, sqlSession.commit ()

4.2 Modificar la operación de datos de MyBatis

1) Escriba el archivo de mapeo de UserMapper

<mapper namespace="userMapper">
    <update id="update" parameterType="com.itheima.domain.User">
        update user set username=#{username},password=#{password} where id=#{id}
    </update>
</mapper>

2) Escribir código para modificar la entidad Usuario

InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
int update = sqlSession.update("userMapper.update", user);
System.out.println(update);
sqlSession.commit();
sqlSession.close();

3) Atención a la operación de modificación

• Modificar la declaración usando la etiqueta de actualización

• La API utilizada para la operación de modificación es sqlSession.update ("namespace.id", objeto de entidad);

4.3 Eliminar operación de datos de MyBatis

1) Escriba el archivo de mapeo de UserMapper

<mapper namespace="userMapper">
    <delete id="delete" parameterType="java.lang.Integer">
        delete from user where id=#{id}
    </delete>
</mapper>

2) Escribe el código para borrar los datos.

InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
int delete = sqlSession.delete("userMapper.delete",3);
System.out.println(delete);
sqlSession.commit();
sqlSession.close();

3) Atención a la operación de eliminación

• La declaración de eliminación utiliza la etiqueta de eliminación

• La instrucción SQL usa # {cadena arbitraria} para referirse a un solo parámetro pasado

• La API utilizada para la operación de eliminación es sqlSession.delete ("Namespace.id", Object);

4.4 Resumen de conocimientos

增删改查映射配置与API:
查询数据: List<User> userList = sqlSession.selectList("userMapper.findAll");
    <select id="findAll" resultType="com.itheima.domain.User">
        select * from User
    </select>
添加数据: sqlSession.insert("userMapper.add", user);
    <insert id="add" parameterType="com.itheima.domain.User">
        insert into user values(#{
    
    id},#{
    
    username},#{
    
    password})
    </insert>
修改数据: sqlSession.update("userMapper.update", user);
    <update id="update" parameterType="com.itheima.domain.User">
        update user set username=#{
    
    username},password=#{
    
    password} where id=#{
    
    id}
    </update>
删除数据:sqlSession.delete("userMapper.delete",3);
    <delete id="delete" parameterType="java.lang.Integer">
        delete from user where id=#{
    
    id}
    </delete>

5. Descripción general del archivo de configuración de MyBatis Core

5.1 Relación jerárquica del archivo de configuración del núcleo de MyBatis

Inserte la descripción de la imagen aquí

5.2 Análisis de configuración común de MyBatis

1) etiqueta de entornos

Configuración del entorno de la base de datos, soporte para la configuración de múltiples entornos.

Inserte la descripción de la imagen aquí

Entre ellos, hay dos tipos de administradores de transacciones:

• JDBC: esta configuración utiliza directamente la configuración de confirmación y reversión de JDBC, que se basa en la conexión obtenida de la fuente de datos para administrar el alcance de la transacción.

• ADMINISTRADO: Esta configuración no hace casi nada. Nunca confirma ni revierte una conexión, pero permite que el contenedor administre todo el ciclo de vida de la transacción (como el contexto de un servidor de aplicaciones JEE). De forma predeterminada, cerrará la conexión, pero algunos contenedores no quieren esto, por lo que debe establecer la propiedad closeConnection en false para evitar su comportamiento de cierre predeterminado.

Entre ellos, hay tres tipos de fuentes de datos:

• UNPOOLED: La implementación de esta fuente de datos simplemente abre y cierra la conexión cada vez que se solicita.

• POOLED: La realización de esta fuente de datos utiliza el concepto de "pool" para organizar los objetos de conexión JDBC.

• JNDI: Esta fuente de datos está implementada para ser utilizada en contenedores como EJB 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.

2) etiqueta de mapeador

La función de esta etiqueta es cargar el mapeo, y hay varias formas de cargarlo:

• Utilice referencias de recursos relativas a la ruta de clases, por ejemplo:

• Utilice localizadores de recursos (URL) totalmente calificados, por ejemplo:

• Utilice la interfaz del asignador para implementar el nombre de clase completo de la clase, por ejemplo:

• Registre todas las implementaciones de la interfaz del mapeador en el paquete como mapeadores, por ejemplo:

3) pestaña Propiedades

En el desarrollo real, es habitual extraer la información de configuración de la fuente de datos por separado en un archivo de propiedades, que puede cargar un archivo de propiedades de configuración adicional.

Inserte la descripción de la imagen aquí

4) etiqueta typeAliases

El alias de tipo sirve para establecer un nombre corto para el tipo de Java. La configuración del nombre de tipo original es la siguiente

Inserte la descripción de la imagen aquí

Configurar typeAliases, definir alias para com.itheima.domain.User como usuario

Inserte la descripción de la imagen aquí

Arriba tenemos alias personalizados, mybatis framework ya ha configurado algunos tipos de alias de uso común para nosotros

Inserte la descripción de la imagen aquí

5.3 Resumen de conocimientos

Configuración común del archivo de configuración principal:

etiqueta de propiedades: esta etiqueta puede cargar archivos de propiedades externos

<properties resource="jdbc.properties"></properties>

etiqueta typeAliases: establece los alias de tipo

<typeAlias type="com.itheima.domain.User" alias="user"></typeAlias>

pestaña mapeadores: configuración de mapeo de carga

<mapper resource="com/itheima/mapper/UserMapping.xml"></mapper>

etiqueta de entornos: etiqueta de configuración del entorno de la fuente de datos

Inserte la descripción de la imagen aquí

6. API correspondiente de MyBatis

6.1 SqlSession Factory Builder SqlSessionFactoryBuilder

常用 API : SqlSessionFactory build (InputStream inputStream)

Construya un objeto SqlSessionFactory cargando el flujo de entrada del archivo principal de mybatis

String resource = "org/mybatis/builder/mybatis-config.xml"; 
InputStream inputStream = Resources.getResourceAsStream(resource); 
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); 
SqlSessionFactory factory = builder.build(inputStream);

Entre ellos, la clase de herramienta Recursos, esta clase se encuentra en el paquete org.apache.ibatis.io. La clase Resources le ayuda a cargar archivos de recursos desde la ruta de clases, el sistema de archivos o una URL web.

6.2 Objeto SqlSessionFactory SqlSessionFactory

SqlSessionFactory tiene varios métodos para crear instancias de SqlSession. Hay dos de uso común:

Inserte la descripción de la imagen aquí

6.3 Objeto de sesión SqlSession

La instancia de SqlSession es una clase muy poderosa en MyBatis. Aquí verá todos los métodos para ejecutar declaraciones, confirmar o revertir transacciones y obtener instancias de mapeador.

Los principales métodos para ejecutar declaraciones son:

<T> T selectOne(String statement, Object parameter) 
<E> List<E> selectList(String statement, Object parameter) 
int insert(String statement, Object parameter) 
int update(String statement, Object parameter) 
int delete(String statement, Object parameter)

Los principales métodos de operación de las transacciones son:

void commit()  
void rollback() 

Supongo que te gusta

Origin blog.csdn.net/weixin_45394002/article/details/113521864
Recomendado
Clasificación