(1) MyBatis desde la entrada hasta la introducción del suelo

Este es el primero de la serie MyBatis. Se utilizarán alrededor de 13 artículos para explicar MyBatis, quienes les guste esta serie pueden prestar atención a la cuenta pública [Java Tsukuba] para los últimos artículos. Así que no hay mucha tontería, ¡comencemos!

La era sin MyBatis

Hablando de MyBatis, debe comenzar desde el momento en que MyBatis no existía. En ese momento, la mayor parte del desarrollo de nuestra base de datos se realizó utilizando jdbc. Pero la base de datos de operaciones de JDBC es realmente grande de usar. Muy tedioso y aburrido, es propenso a problemas y errores. La situación específica es la siguiente:

Era JDBC

El proceso de conexión a la base de datos:
  • Cargue el controlador
  • Conectarse
  • Empalme de sql
  • Ejecutar sql
  • Tener resultados
  • Resultado de analisis
  • Cerrar la base de datos

Las operaciones anteriores son todos procesos por los que debemos pasar cuando usamos jdbc para conectarnos a la base de datos. Se puede ver que los pasos son muy engorrosos. La clave es que muchos de estos pasos no son lo que realmente les importa a nuestros programadores. Lo que realmente nos importa a los programadores es empalmar SQL, ejecutar SQL y analizar los resultados.

Pero basado en el framework JDBC, otras operaciones tienen que ser escritas y operadas, lo que nos hace muy laboriosos y redundantes en la escritura de código, que no es particularmente amigable para los programadores.

Desventajas de JDBC

Como se mencionó anteriormente, JDBC tiene algunas deficiencias fatales. En términos generales, existen los siguientes aspectos:

  • Demasiado código duplicado
  • Cada operación lleva demasiado tiempo
  • Problemas de depuración y mantenimiento
  • No existe un estándar para sql dinámico y es difícil de mantener

Es precisamente porque JDBC tiene algunas deficiencias fatales que utilizamos otros frameworks para completar la interacción con la base de datos, como Hibernate y MyBatis son los mejores representantes.

Hibernar

Antes de introducir hibernación, primero entendamos qué es ORM.

SERPIENTE

ORM: Mapeo relacional de objetos, es simplemente establecer una relación de mapeo entre las tablas de la base de datos y los objetos en Java, lo que nos permite manipular objetos para manipular indirectamente la base de datos.

El mejor marco para ORM es la hibernación, que le permite manipular indirectamente la base de datos a través de objetos java. Es más fácil para los desarrolladores comenzar, y el proceso de interacción entre el jdbc y la base de datos subyacentes está oculto. Es compatible con diferentes bases de datos para programadores, pero es insensible para los programadores. Solo necesito operar la base de datos como un objeto

Es incluso tan conveniente que incluso si no conoce SQL, puede usarlo para operar la base de datos.Se puede decir que es muy amigable, especialmente para socios jóvenes que son nuevos en el lugar de trabajo y tienen poca experiencia laboral.

ventaja

En resumen, las ventajas son:

  • Simplifique todo el proceso de operación de jdbc
  • Necesita manipular el objeto, no necesita preocuparse por sql, hibernate puede ayudarnos a generar automáticamente el sql requerido
  • La portabilidad del código es mejor. La operación de db a través de hibernación se lleva a cabo a través del objeto de operación. Si necesitamos cambiar el tipo de db, la hibernación se adaptará automáticamente y no es necesario realizar ningún ajuste de código comercial para el código comercial del desarrollador.
  • La eficiencia del desarrollo es relativamente alta

Desventaja

Como dice el refrán, si tienes algo, perderás. Hemos ganado estas comodidades, pero hay algunas deficiencias y deficiencias correspondientes.

  • La optimización de sql es más difícil, varias operaciones finalmente se envían a la base de datos y hibernate genera automáticamente sql, es relativamente difícil para los desarrolladores intervenir en el sql que debe ejecutarse eventualmente
  • Comenzar a hibernar es relativamente fácil, pero difícil de dominar
  • Para SQL dinámico complejo, es necesario escribir muchos juicios en el código para ensamblar, y el soporte para SQL dinámico es relativamente escaso.

Por lo tanto, Hibernate solo es adecuado para sistemas simples o sistemas con ciclos de desarrollo ajustados y proyectos que no están altamente optimizados para SQL.

MyBatis

Mybatis pone sql bajo el control de los desarrolladores, por lo que los desarrolladores son más libres y sin demasiadas restricciones. Pueden realizar todo tipo de negocios extraños y lógicas de varias empresas. En términos de optimización de SQL, también se puede decir que bueno o bad tiene su propia manera de dar rienda suelta a la habilidad del programador. Y Mybatis solo nos ayuda a optimizar el trabajo repetitivo al extremo, como el proceso de operación de la base de datos, el empalme de SQL dinámico, el resultado y el mapeo de objetos se procesan por nosotros, y no necesitamos demasiado cuidado y atención. Pongamos más energía en la preparación de sql, por lo que esto también es favorecido por muchos fabricantes nacionales, por lo que si desea ingresar a una fábrica importante el próximo año, debe dominarla.

En resumen, MyBatis:

  • Es un excelente marco de capa de persistencia
  • Se evita casi todo el código JDBC y el proceso de establecer parámetros y obtener conjuntos de resultados.
  • Utilice XML simple o anotaciones para configurar y mapear información nativa, y mapear interfaces y clases de entidad Java a registros en la base de datos.

Los pasos específicos del proyecto de desarrollo mybatis

Lo anterior es tan bueno, después de todo, la mula es un caballo que se saca a pasear, así que a continuación construiremos juntos un estante para el proyecto Mybatis, que se completará en el próximo artículo. Y haz una presentación

Introducir la configuración de mybatis maven en el proyecto Spring

El primer paso es presentar mybatis

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>${mybatis.version}</version>
</dependency>

Para la versión myba.ve.version anterior, puede encontrar la última versión en el repositorio de maven o la versión requerida por la empresa.

Crear archivo de configuración mybatis

Cuando presentamos Mybatis, el siguiente paso es escribir el archivo de configuración de Mybatis. El archivo de configuración está en formato xml y generalmente se coloca en el directorio de recursos.

Como sigue:

<?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>
    <properties>
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/mybatisdemo?characterEncoding=UTF-8"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </properties>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/user.xml"/>
    </mappers>
</configuration>

Este archivo es principalmente para la configuración global de mybatis, como la configuración de fuentes de datos y transacciones. Por ejemplo, el elemento de fuente de datos anterior se usa para configurar la fuente de datos, y es necesario especificar cierta información de configuración de la base de datos en los datos fuente, aquí lo configuro.Puedes cambiar este código de acuerdo con tu propia base de datos para la información continua de la base de datos.

No importa si no conoce muy bien el código ahora, y los artículos posteriores lo explicarán y analizarán paso a paso.

Crear archivo xml de mapeador

Este archivo representa todas nuestras operaciones sobre la mesa. Una vez completado, será introducido por el archivo de configuración de mybatis arriba, como se muestra a continuación

<mappers>
    <mapper resource="mapper/user.xml"/>
</mappers>

Puede haber varios archivos de mapeadores en el elemento de mapeadores. Puede haber muchas tablas que deban manipularse en el proyecto que desarrollamos. Luego, habrá muchos archivos xml de mapeadores. Todos debemos importarlos en el elemento de mapeadores y entonces mybatis los usará. En términos generales, una tabla corresponde a un archivo de mapeador.

Crear interfaz de mapeador

Arriba creamos el archivo de configuración y el archivo de operación de tabla de mybatis. Más tarde, necesitamos usar una interfaz Mapper para establecer una relación de mapeo con mapper.xml en el paso anterior.

Más tarde, cuando llamemos a los métodos en la interfaz Mapper, llamaremos indirectamente a las operaciones SQL de varios datos en el mapper xml.

Interfaz del asignador y asociación de archivos xml

Creamos la interfaz Mapper y el archivo xml de arriba, pero ¿cómo se relacionan los dos?

Esto requiere configuración en uesr.xml, como se muestra a continuación

<mapper namespace="zhonghu.mybatis.chat01.UserMapper"

Tenga en cuenta que el valor del espacio de nombres anterior corresponde a la referencia completa de la interfaz UserMapper. A través de este espacio de nombres, la interfaz UserMapper puede establecer una relación de mapeo con user.xml.

Hay muchas operaciones db en user.xml. Estas operaciones establecerán una relación de mapeo con los métodos en la interfaz UserMapper. Cuando se invocan los métodos en UserMapper, las operaciones correspondientes en user.xml serán llamadas indirectamente.

Por ejemplo, existe la siguiente configuración en user.xml:

<!-- 批量插入 -->
<insert id="insertBatch" parameterType="map">
    <![CDATA[ INSERT INTO `user` (`id`, `name`, `age`, `salary`) VALUES ]]>
    <foreach collection="list" separator="," item="item">
        (#{item.id}, #{item.name}, #{item.age}, #{item.salary})
    </foreach>
</insert>

Y hay un método insertBatch en UserMapper que corresponde a la inserción por lotes de inserción anterior, de la siguiente manera:

/**
 * 批量插入用户信息
 *
 * @param userModelList
 */
void insertBatch(List<UserModel> userModelList);

Entonces, cuando llamamos al método insertBatch en UserMapper, indirectamente llamaremos a la operación id = "insertBatch" en user.xml.

Ahora podemos usar mybatis para operar db.

La interfaz y el mapeador xml se asignan juntos y se llaman indirectamente, lo que se implementa a través del proxy dinámico de Java.

Obtenga la interfaz Mapper a través de mybatis para realizar operaciones en db

Como dijimos anteriormente, podemos realizar operaciones en db a través de la interfaz del mapper. El código principal para obtener Mapper es el siguiente:

SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(Resources.getResourceAsStream("mybatis-config.xml"));
SqlSession sqlSession = sqlSessionFactory.openSession(true);
UserMapper mapper = sqlSession.getMapper(UserMapper.class);

Los componentes principales de mybatis se utilizan en el código anterior, echemos un vistazo específicamente.

Introducción a los objetos principales de Mybatis

SqlSessionFactoryBuilder

Este es un constructor que se utiliza para construir un objeto SqlSessionFactory. SqlSessionFactoryBuilder puede leer el archivo de configuración de mybatis y luego construir un objeto SqlSessionFactory.

SqlSessionFactoryBuilder analiza la relación de mapeo entre los archivos de configuración mybatis, los archivos xml del mapeador, los archivos xml del mapeador y las interfaces del mapeador, y luego los coloca en el objeto java. El objeto java existe en la memoria, y el acceso a la memoria será muy rápido, Luego, cada vez que lo usamos, no es necesario volver a analizar el xml. Después de que SqlSessionFactoryBuilder analiza la configuración, el objeto generado es SqlSessionFactory. Este es un objeto pesado. Se necesita mucho tiempo para crearlo, por lo que generalmente creamos un db. Un objeto SqlSessionFactory siempre existirá durante el funcionamiento del sistema, y ​​SqlSessionFactoryBuilder se puede liberar cuando se agote.

SqlSessionFactory

Puede saber por el nombre que se trata de una fábrica, una fábrica que se utiliza para crear una SqlSession.

Como se mencionó anteriormente, SqlSessionFactory es un objeto pesado. Generalmente, una base de datos corresponde a un objeto SqlSessionFactory, que siempre existirá durante la operación del sistema.

SqlSessionFactory es una interfaz, esta interfaz tiene dos implementaciones DefaultSqlSessionFactory y SqlSessionManager, generalmente a través de SqlSessionFactoryBuilder para crear objetos SqlSessionFactory.

Hay dos formas principales de crear objetos SqlSessionFactory a través de SqlSessionFactoryBuilder, una es leer el archivo de configuración mybatis y la otra es codificar.

SqlSession

Necesitamos obtener una conexión de conexión a través de jdbc para operar la base de datos, y luego tomar esta conexión para operar la base de datos. SqlSession en mybatis es similar al objeto de conexión de conexión en jdbc, que se llama el objeto de sesión Sql en mybatis. use una operación db. Un objeto SqlSession, por lo que este objeto generalmente está en el nivel del método. Una vez que finaliza el método, el objeto se destruye. Este objeto se puede obtener llamando al método sqlSessionFactory.openSession.

Podemos llamar directamente a varias operaciones db en mapper xml a través del objeto SqlSession, necesitamos especificar el id de la operación específica y el formato del id es el id del espacio de nombres.

Interfaz del mapeador

Podemos llamar directamente a la operación db en mapper xml a través de SqlSession, pero la forma más simple y recomendada es usar la interfaz Mapper. Los métodos en la interfaz Mapper y varias operaciones db en el archivo xml mapper establecen una relación de mapeo, que es a través de la Interfaz del asignador. El nombre completo + el nombre del método está asociado con el espacio de nombres + el ID de operación específico en el xml del asignador, y luego podemos llamar directamente al método en la interfaz del asignador para operar indirectamente la base de datos. Es conveniente de usar. La interfaz del asignador debe obtenerse a través de SqlSession y pasar Ingrese el objeto Class correspondiente a la interfaz Mapper, y luego devolver una instancia de esta interfaz, como:

UserMapper mapper = sqlSession.getMapper(UserMapper.class);

Por fin

  • Si sientes que eres recompensado después de leerlo, espero que le prestes atención. Por cierto, dame un pulgar hacia arriba. Esta será la mayor motivación para mi actualización. Gracias por tu apoyo.
  • Bienvenidos a todos para que presten atención a mi cuenta pública [Java Fox], enfocándome en los conocimientos básicos de Java y la computadora, prometo dejarles obtener algo después de leerlo, si no me creen, péguenme
  • Busque la conexión triple con un clic: me gusta, reenviar y mirar.
  • Si tiene diferentes opiniones o sugerencias después de leer, por favor comente y comparta con nosotros. Gracias por su apoyo y cariño.

——Soy Chuhu, y amo la programación tanto como a ti.

Bienvenido a seguir la cuenta pública "Java Fox" para conocer las últimas noticias.

Supongo que te gusta

Origin blog.csdn.net/issunmingzhi/article/details/113571825
Recomendado
Clasificación