La comprensión en profundidad de marco JAVA MyBatis (1)

Este artículo se basa en mybatis explicación, bienvenido a aprender y progresar juntos.

Sobre un .MyBatis

MyBatis Apache se trata de un proyecto de código abierto iBatis de 2010 proyecto de migración Nian por la Apache Software Foundation para Google Code, y cambió su nombre a MyBatis. Migración en noviembre de 2013 para Github.
iBATIS viene de la palabra "Internet" y "Abatis" combinación, es un framework de persistencia basado en Java. framework de persistencia iBATIS incluir mapas SQL y Data Access Objects (Sdao)

  • MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis evita casi todo el código JDBC y parámetros de ajuste manual y obtener el conjunto de resultados. MyBatis puede utilizar XML simple o anotación de configurar y asignar la información nativos, interfaces y Java POJO (Plain Old Java Objects, Java ordinaria Objetos) a los registros de base de datos en.

II. Características Marco

  • ① fácil de aprender : en sí es pequeño y simple. No confíe en cualquier tercero, siempre y cuando los más fáciles de instalar dos archivos jar + archivo de configuración varios correlación de SQL es fácil de aprender, fácil de usar, a través de la documentación y el código fuente, se puede comparar plenamente captar su diseño e implementación.
  • ② flexibles : mybatis no impone ningún impacto en el diseño de la aplicación o base de datos existente. SQL escrito en XML, para facilitar la gestión unificada y optimización. básicamente sql puede darse cuenta de que no usamos marco de acceso a datos que pueden conseguirse todas las características, tal vez más.
  • ③ liberar el acoplamiento de código de programa SQL : proporcionar la DAL por la lógica de la lógica de acceso a datos y de negocios separado del diseño del sistema con más claridad, más fácil de mantener, la unidad de pruebas más fácil. SQL y el código, lo que mejora la capacidad de mantenimiento.
  • ④ proporcionar una etiqueta de asignación , la base de datos de mapeo objeto-relacional campo ORM apoyo
  • ⑤ etiqueta proporciona mapeo objeto-relacional , el apoyo para el mantenimiento de forma relacional de objetos
  • ⑥ proporcionar etiquetas XML , apoyar el desarrollo de SQL dinámico

III. El proceso global

  • 加载配置并初始化
  • condiciones de disparo : el archivo de configuración de carga
  • Proceso : la información de configuración de SQL se carga en un uno objetos MappedStatement (incluyendo la configuración de asignación de parámetros de entrada, ejecutar sentencias SQL, los resultados de la configuración de asignación), almacenados en la memoria.
  • 接收调用请求
  • condiciones de disparo : API llamando mybatis proporcionado
  • Parámetros de entrada : ID de SQL y objetos de parámetros de entrada
  • Tratamiento de : transmitir una petición para procesar a la capa inferior de la solicitud de procesamiento.
  • 处理操作请求
  • Disparador condiciones : solicitud de API se transmite a través de la capa de interfaz
  • Parámetros de entrada : ID de SQL y objetos de parámetros de entrada
  • proceso :
  • (A) La búsqueda de un objetivo correspondiente ID de MappedStatement SQL.
  • (B) desde el objeto parámetro pasado analizar parámetros de objeto MappedStatement para obtener el pase final y ejecutar SQL para ser ejecutado.
  • © Conexión de la base de datos, de acuerdo con la ejecución final de las sentencias SQL y obtener los parámetros pasados ​​a la base de datos para llevar a cabo y obtener los resultados.
  • (D) basado en los resultados de la ejecución del objeto resultado MappedStatement configuración de asignación obtenida en el proceso de conversión, y para dar el resultado del procesamiento final.
  • (E) para liberar recursos de conexión.
  • 返回处理结果将最终的处理结果返回

IV. Arquitectura Funcional

  • Mybatis arquitectura funcional se divide en tres capas:
  • capa de interfaz API : API proporciona una interfaz para uso externo, por el desarrollador para manipular estos API de base de datos local. Una capa de interfaz que recibe la petición de llamada llamará a la capa de procesamiento de datos para llevar a cabo su procesamiento de datos.
  • Datos de la capa de procesamiento : responsable de las operaciones de búsqueda específica de SQL, el análisis sintáctico de SQL, la ejecución de SQL y la aplicación de los resultados del proceso de mapeo y así sucesivamente. Su principal objetivo es completar la operación, a petición de una llamada base de datos.
  • capa de soporte de base : responsable de la mayoría de las funciones básicas de apoyo, incluyendo la gestión de conexión, gestión de transacciones, carga y almacenamiento en caché de configuración, estas son cosas comunes que sacarlos como los componentes más básicos. soporte básico más para el procesamiento de datos de la capa superior.

Aquí Insertar imagen Descripción

V. Arquitectura

  • mybatis perfil, un perfil global, y que comprende archivo de asignación mybatis mybatis, en el que la información de configuración de perfil global de la fuente de datos, y otra transacción; información de configuración archivo de asignación relacionados con la ejecución de la SQL.
  • ①mybatis mediante la lectura de la información de su perfil (archivo de configuración global y el archivo de mapa), un SqlSessionFactory construido, es decir, fábrica de sesiones.
  • ② por SqlSessionFactory, puede crear SqlSession esa sesión. Mybatis base de datos es operado por SqlSession.
  • sí ③SqlSession no puede manipular directamente la base de datos, la base de datos que es operado por el accionador Ejecutor interfaces de subyacente. Hay dos clases de implementación de la interfaz Ejecutor, se trata de un actuador común, un actuador es una memoria intermedia (por defecto).
  • SQL ejecutor información ④Executor para ser procesados ​​se encapsula en un objeto que subyace MappedStatement. Las objeto comprende: parámetros de entrada instrucción SQL cartografía de la información, y salidas de la información de mapeo conjunto de resultados. En el que los parámetros de entrada y los resultados de salida de la cartografía de los tipos de Java incluyen tipos simples, objeto de colección HashMap, POJO tipo de objeto.
    Aquí Insertar imagen Descripción

Seis .MyBatis datos e interactiva

  • MyBatis y la interacción de bases de datos son dos formas principales:
  • ① usando API MyBatis convencional provisto;
  • Llamando MyBatis en los métodos de SqlSession objeto de lograr y la forma en que interactúan con la base de datos, hay algunas dbUtils similares de operación!

Aquí Insertar imagen Descripción

  • 上述使用MyBatis的方法,是创建一个和数据库打交道的SqlSession对象,然后根据Statement Id和参数来操作数据库Este es, sin duda de manera muy sencilla y práctica, pero 它不符合面向对象语言的概念和面向接口编程的编程习惯。debido a que la tendencia de programación orientada a objetos orientado interfaz, MyBatis fin de adaptarse a esta tendencia, el segundo aumento en el uso de apoyo Interfaz MyBatis (interfaz) se llama.

  • ② utilizar interfaces de Mapper;
  • Mybatis cada nodo en el archivo de configuración del centro abstracto para una interfaz Mapper, este método declarado en la interfaz y con el nodo <select | actualización | delete | Insertar> artículos nodo correspondiente, a saber <select | actualización | delete | inserto > Mapper ID de nodo es el nombre del método de interfaz, el valor del parámetro indica el tipo del método correspondiente parameterType Mapper, y el valor correspondiente al tipo de retorno Mapper resultMap o devolver un elemento de conjunto de resultados representado por el tipo de interfaz.

Aquí Insertar imagen Descripción

  • Resumen : MyBatis referencias de interfaz Mapper para llamar esta manera, simplemente para satisfacer las necesidades de la programación orientada interfaz. (De hecho, hay una razón por la que la programación orientada interfaz, de modo que el usuario puede utilizar las notas en la interfaz a las declaraciones configurar SQL, para que pueda salir del archivo de configuración XML, y "0 configuración")

Siete perfil .MyBatis

  • 1. El perfil de núcleo
  • En la ruta de clase, crear el archivo SqlMapConfig.xml, que es el archivo de configuración del núcleo, se puede configurar la información ambiental actual, cargue el archivo de asignación, cargue el archivo de propiedades, configurar los parámetros globales, alias definidos.
<?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子标签的内容,后加载properties文件
    如果名称相同,后边覆盖前边内容
    -->
    <properties resource="jdbc.properties">
        <property name="jdbc.password" value="12345"/>
    </properties>
    <!-- 全局参数配置:二级缓存,延迟加载
    <settings></settings>
    -->
    <!-- 定义别名 -->
    <typeAliases>
        <!-- 给单个的类起别名
        <typeAlias type="com.qf.domain.User" alias="user"/>
        -->
        <!-- 给指定包下的类起别名
        别名的定义规则:类名首字母小写
        -->
        <package name="com.qf.domain"/>
    </typeAliases>
    <!-- 配置mybatis的环境信息 -->
    <environments default="development">
        <environment id="development">
            <!-- 配置JDBC事务控制,由mybatis进行管理 -->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置数据源,采用mybatis连接池 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>
    <!-- 加载映射文件 -->
    <mappers>
        <!-- 使用资源的路径 -->
        <mapper resource="User.xml"/>
        <!-- <mapper resource="com/qf/mapper/UserMapper.xml"/> -->
        <!-- 使用资源的绝对路径<mapper url=""/> -->
        <!--
        Mapper接口的全类名
        要求:Mapper接口的名称与映射文件名称一致
        1.8.2 映射文件
        在指定的目录下创建映射文件,配置要执行的statement,即增删改查等语句。
        必须在同一个目录下
          <mapper class="com.qf.mapper.UserMapper"/>
        -->
        <!-- 加载某个包下的映射文件 (推荐)
        要求:Mapper接口的名称与映射文件名称一致
        必须在同一个目录下
        -->
        <package name="com.qf.mapper"/>
    </mappers>
</configuration>
  • 2. archivo de asignación
  • Creado en los archivos de mapas de directorios especificados, sentencia de configuración a ser ejecutado, es decir, ABM y otras declaraciones.
<?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:配置名称空间,对配置的statement进行分类管理
             此时名称可以任意
             当使用Mapper代理时,namespace具有特殊的含义与功能
      -->
        <mapper namespace="test">
        <!--
            根据id查询用户,User findById(int id)
            select:配置查询语句
            id:可以通过id找到执行的statement,statement唯一标识
            parameterType:输入参数类型
            resultType:输出结果类型
            #{}:相当于占位符
            #{id}:其中的id可以表示输入参数的名称,如果是简单类型名称可以任意
         -->
        <select id="findById" parameterType="int" resultType="com.qf.domain.User" >
        select * from user where id=#{id}
        </select>
        <!--
            根据用户名称来模糊查询用户信息列表;
            ${}:表示拼接sql语句
            ${value}:表示输入参数的名称,如果参数是简单类型,参数名称必须是value
-->
        <select id="findByUsername" parameterType="java.lang.String"
        resultType="com.qf.domain.User">
        select * from user where username like '%${value}%'
        </select>
        <!-- 添加用户
            #{username}:名称与类中的属性名一致
             -->
         <insert id="addUser" parameterType="com.qf.domain.User">
        <!--
             selectKey:查询主键
             keyProperty:主键对应的属性名称
             resultType:结果类型,主键的类型
             order:在插入记录的之前或之后查询主键的值
             select last_insert_id()
             mysql提供 的函数,与insert语句搭配使用,查询主键
      -->
        <selectKey keyProperty="id" resultType="int" order="AFTER">
        select last_insert_id()
        </selectKey>
        insert into user(username,sex,birthday,address)
        values(#{username},#{sex},#{birthday},#{address})
         </insert>
        <!-- 删除用户 -->
         <delete id="deleteUser" parameterType="int">
        delete from user where id=#{id}
         </delete>
         <!-- 修改用户 -->
         <update id="updateUser" parameterType="com.qf.domain.User">
        update user set username=#{username},sex=#{sex},birthday=#{birthday},address=#
        {address}
        where id= #{id}
         </update>
        </mapper>

  • The best investment is in yourself.

Aquí Insertar imagen Descripción

  • 2020.03.21 记录辰兮的第34篇博客
Publicado 37 artículos originales · ganado elogios 145 · Vistas a 30000 +

Supongo que te gusta

Origin blog.csdn.net/weixin_45393094/article/details/105009080
Recomendado
Clasificación