mybatis SpringBoot integración (caching)

Con mybatis compañía para integrar nuestras herramientas de manera que no tenemos que ir como antes Estamos aquí para configurar la fuente de datos sólo puede basarse en la introducción de:

primero creamos una base de datos simple

create database springbootmapper;

CREATE TABLE `user` (
  `id` int(16) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(16) NOT NULL,
  `age` int(4) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

Casualmente insertar unos datos:
Aquí Insertar imagen DescripciónEstructura del proyecto
Aquí Insertar imagen Descripción

En la introducción se basan crear trabajos →

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.cs</groupId>
    <artifactId>springBoot_Mybatis</artifactId>
    <version>1.0-SNAPSHOT</version>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
        <relativePath/>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
        <groupId>tk.mybatis</groupId>
        <artifactId>mapper-base</artifactId>
            <version>1.1.5</version>
        </dependency>
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-core</artifactId>
            <version>1.1.5</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.46</version>
        </dependency>
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-extra</artifactId>
            <version>1.1.5</version>
        </dependency>
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring</artifactId>
            <version>1.1.5</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Crear un perfil:
application.yml

server:
  port: 8333  #端口号

mybatis:
  type-aliases-package: com.cs.dto.UserDto  #对应的实体类
  configuration:
    map-underscore-to-camel-case: true
  mapper-locations: mappers/*.xml #如果还想用之前的mapper.xml写sql语句也可以放在这里
spring:
  application:
    name: myTest  
  datasource: #数据源
      driver-class-name: com.mysql.jdbc.Driver
      url: jdbc:mysql://localhost:3306/springbootmapper?characterEncoding=utf8&amp;useSSL=false
      username: root
      password: root

Crear una tabla de base de datos de clase de entidad correspondiente a la (mapeo objeto-relacional el ORM)
UserDTO .java

package com.cs.demo.dto;

import lombok.Data;
import tk.mybatis.mapper.annotation.KeySql;
import javax.persistence.Id;
import javax.persistence.Table;

@Data  //lombok注解  自动有 get set 方法
@Table(name = "user")  //配置表名
public class UserDto {
    @Id //设置主键
    @KeySql(useGeneratedKeys = true) //允许JDBC支持自动生成主键
    private Integer id;
    private String name;
    private Integer age;
}

Crear una capa de persistencia (capa de base de datos) que usamos aquí es la clase abstracta mybatis nos proporcionó, que viene con las operaciones de la cuajada (referido como el Mapper universal)
MyMapper .java

package com.cs.demo.mapper;

import com.cs.demo.dto.UserDto;
import tk.mybatis.mapper.common.Mapper;

public interface MyMapper extends Mapper<UserDto> {
}

Crear una capa de transacción
MyService .java

package com.cs.demo.service;

import com.cs.demo.dto.UserDto;
import com.cs.demo.mapper.MyMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;

@Component //注入到spring 容器里
public class MyService {

    @Autowired //从spring容器实例化对象
    private MyMapper myMapper;

    public List<UserDto> findAll() {
        List<UserDto> userDtos = myMapper.selectAll();
        return userDtos;
    }
}

Crear una capa de presentación:
myController .java

package com.cs.demo.controller;
import com.cs.demo.dto.UserDto;
import com.cs.demo.service.MyService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;
@RestController
public class MyController {

    @Autowired
    private MyService myService;

    @GetMapping("findAll")
    public List<UserDto> findAll(){
        List<UserDto> all = myService.findAll();
        return all;
    }
}

Crear lanzador:

package com.cs;
import tk.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.cs.demo.mapper") //扫描我们的只定义mapper
public class SpringBootMybatis {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootMybatis.class,args);
    }
}

Los resultados:
Aquí Insertar imagen Descripciónse puede ver el éxito de nuestras operaciones.

Entonces, su principio de qué se trata, vamos a ver antes de sacar mybatis operación
Aquí Insertar imagen DescripciónAquí Insertar imagen Descripciónque a través del modelo de fábrica creado un sqlSession, agente proxy entonces nuestra dinámica de nuestro objeto de conexión a través sqlSession, que es nuestro enfoque para consultar una base de datos, análisis dinámico archivo XML, se conformó una sentencia de SQL dinámico, y luego enviar a mysql instrucción SQL por el protocolo JDBC, con el fin de evitar que el problema aquí la inyección de SQL, mybatis el SQL enviada dos veces, la primera vez: enviar toda la declaración, tales como seleccionar * de usuario donde id = segundos:?. valora en 1 identificador para enviar SQL, MySQL, finalmente, regresó a los resultados de back-end.

Mybatis su resorte integrado es el mismo pero que está por delante de la ya difícil para nosotros para participar en SQL ingeniería inversa realizaron una herramientas unificadas, a continuación, sólo tenemos que llamar a sus herramientas pueden ser.

cache

Antes de que tanto necesitamos para establecer la configuración de caché

  1. Una caché: una memoria caché local basada PerpetualCache HashMap, que almacena un ámbito de sesión, la sesión después de la descarga o cerrar, todo el caché se borrará en la sesión.
  2. Y una cache secundaria que almacena en caché el mismo mecanismo, pero también usando predeterminado PerpetualCache, HashMap almacena, se almacena en un ámbito diferente como Mapper (Espacio de nombres), y pueden ser fuente de almacenamiento personalizada, como Ehcache. Ámbito de namespance se refiere a la totalidad de la seleccione el archivo de configuración correspondiente resultado de la operación namespance se almacenan en caché, la memoria caché puede ser compartida entre tales dos hilos diferentes. Comience caché secundario: En asignador fichero de configuración:
    Puede configurar la caché de caché secundaria la política objeto devuelto: Cuando readOnly = "true", representa el caché secundario para volver
    de nuevo a todos los que llamen la misma instancia de objeto de caché, caché instancia la persona que llama puede obtener la actualización, pero esto puede causar otros usuarios que aparecen varios
    casos de datos inconsistentes (ya que todos la persona que llama llamada es la misma instancia). Cuando readOnly = "true", se devuelve a la persona que llama de la memoria intermedia cache secundaria total de
    objeto de almacenamiento de copia, es decir, diferente persona que llama se adquiere diferentes instancias de objetos de caché, modificaciones a la persona que llama de forma que cada objeto en caché no afectará a la otra
    persona que llama, que es seguro, por lo que el valor predeterminado es de sólo lectura = "false";

El diagrama esquemático (propia pintura)
Aquí Insertar imagen Descripción

  • caché de nivel se basa caché sqlSession, contenido de la caché no puede abarcar sqlSession. Mantenido automáticamente por mybatis. área de memoria intermedia entre los diferentes SqlSession no se ve afectada por la otra.
  • caché secundario basado en archivo de asignación de memoria caché (espacio de nombres), es mayor que el rango de caché La memoria caché, el contenido se puede acceder a diferentes sqlSession caché secundaria. ¿Qué datos en la caché secundaria necesita su propio designado. (Común, no suelen modificados, tales como: clasificación, departamento)
  • Aquí Insertar imagen DescripciónDebemos mybatis primero abrir manualmente la caché L2.

cache secundaria proporciona en el config.xml interruptor, abierto también en la caché secundario específico mapper.xml
. 1.

<settings>
    <!--开启二级缓存-->
    <setting name="cacheEnabled" value="true"/>       
</settings>

2. La necesidad de la clase javapojo mapa para lograr la serialización (esta es nuestra generación a través de la ingeniería inversa antes de la clase auxiliar)

      class User implements Serializable{}

3.

Acerca de los atributos de caché:

desalojo: representa la estrategia de recuperación de la memoria caché, MyBatis actualmente ofrece las siguientes estrategias.

(1) LRU (menos recientemente utilizado), el menos usado recientemente, la mayoría de los objetos no tienen tiempo

(2) FIFO (First In First Out), FIFO, los objetos en el orden en que entró eliminado la memoria caché

(3) SUAVE, las referencias suaves, el recolector de basura quitar el objeto basado en las reglas de estado y referencias suaves

(4) débil, referencias débiles, la mudanza mucho más agresiva de objetos basados en el estado recolector de basura y reglas de referencias débiles. Aquí es LRU,
eliminar sin usar la imagen de mayor tiempo para

flushInterval: Tiempo de intervalo de actualización, en milisegundos, la configuración aquí es de 100 segundos para actualizar, si no la configura, entonces cuando
se ejecuta el SQL tiempo para actualizar la caché.

Tamaño: el número de referencias, un número entero positivo que representa el número máximo de objetos almacenados en caché puede ser almacenada, no debe ser demasiado alto. Que se distribuyen en la Asamblea General de provocar un desbordamiento de memoria.
Aquí está el 1024 objetos de configuración

readOnly: de sólo lectura, lo que significa que los datos en caché sólo se pueden leer pero no modificar, las ventajas de esta configuración es que podemos leer rápidamente caché, la desventaja es que no tenemos
manera de cambiar la caché, el valor por defecto que de es falso, no nos permiten modificar

proceso de operación:

consulta la información de usuario ID sqlsession1 es 1, entonces la consulta, la consulta a los datos almacenados en la cache secundaria.

Si sqlsession3 para realizar la misma asignador de SQL, comprometer la ejecución, se borran los datos del área de caché secundaria en el mapeador

sqlsession2 para consultar la información de identificación del usuario es 1, el caché para buscar si existe una caché, si hay que tomar los datos directamente desde la memoria caché

Desactivar caché secundaria:

Puede ser proporcionada en la declaración useCache = false, el caché secundario desactivar la instrucción de selección actual está por defecto

En el desarrollo real, para cada consulta requiere el SQL de datos, para establecer useCache = "false", desactivar la memoria caché secundaria
flushCache Etiquetas: vaciar la caché (para borrar la caché)

Después de realizar la operación de confirmación generalmente necesita vaciar la caché, flushCache = "true indica actualización de caché para evitar sucia lee
escenarios de caché secundarias

Para el acceso a la solicitud de consulta múltiple y los resultados de la consulta a los usuarios menos exigentes en tiempo real, puede ser mybatis caché secundaria, lo que reduce la cantidad de acceso a base de datos, un acceso más rápido, tales como una investigación factura telefónica

Los requisitos establecidos flushInterval correspondiente: intervalo de actualización, tal como treinta minutos, 24 horas y así sucesivamente. . .
limitaciones caché secundaria:

mybatis secundaria caché de datos de caché de nivel de grano fino de la aplicación no es bueno, tales como los siguientes requisitos: información sobre el caché de bienes, ya que la gran información de acceso de consulta de los bienes, sino que requiere el usuario para consultar cada vez que la última información del producto en este momento si utilizar mybatis caché secundaria no sólo se puede lograr vuelca la información de la caché de la mercancía cuando un producto cambia sin actualizar la información de otras materias primas, debido a que los mybaits área de caché secundaria a unidades asignador de división, cuando una información de la mercancía va a cambiar todo toda información sobre productos caché de datos vacía. La necesidad de resolver este tipo de problemas en la capa de negocio de acuerdo a las necesidades de datos de la caché dirigidos.

Entonces, ¿cómo se configura la caché secundaria en nuestro mybatis SpringBoot integración

Configuración mybatis

  • # El asignador mundial para activar o desactivar la caché.
    mybatis.configuration.cache habilitado = true
  • # A nivel mundial activar o desactivar la carga diferida. Cuando se desactiva, todas las asociaciones serán cargados con impaciencia.
    mybatis.configuration.lazy de carga habilitados = true
  • # Cuando está activado, hay un retraso de cargar las propiedades del objeto estará totalmente cargado cuando cualquier propiedad se llama. De lo contrario, cada propiedad se cargará en la demanda.
    mybatis.configuration.aggressive-lazy-loading = true
  • # SQL devuelve si se permite una sola pluralidad de conjuntos de datos (dependiendo de la compatibilidad de la unidad) por defecto: en TRUE
    mybatis.configuration.multiple-conjuntos de resultados a =-verdaderos Habilitado
  • Puede # alias (dependiendo de la compatibilidad de la unidad) predeterminado de la columna: a verdadero
    mybatis.configuration.use true-columna-label =
  • # JDBC permite generar claves primarias. Que necesita para impulsar el apoyo. Si se establece en un verdadero, esta configuración se verá obligado a utilizar para generar la clave principal, hay algunos conductores no son compatibles, pero todavía se puede llevar a cabo. por defecto: a falsas
    mybatis.configuration.use-Generated-Claves para verdaderos =
  • MyBatis # Especificar la forma de asignar automáticamente las columnas de tabla de base de datos NINGUNO: ningún indicio \ u3000PARTIAL: Parte completo: Todas las
    mybatis.configuration.auto-mapeo-comportamiento parcial =
  • # Este es el tipo de ejecución por defecto (SIMPLE: Simple; REUTILIZAR: actuador puede reutilizar declaraciones declaraciones preparadas; BATCH: El actuador puede repetir las declaraciones y actualizaciones por lotes)
    mybatis.configuration.default-ejecutor de la = de tipo simple de
  • # Uso joroba campo conversión nomenclatura.
    mybatis.configuration.map-subrayado-a-camello caso = true
  • # Establecer el local de la sesión gama caché: los datos serán compartidos comunicado: Gama de declaración (esto no habría compartido de datos) defalut: la sesión
    mybatis.configuration.local-Cache-alcance la reunión =
  • # Establecer el tipo JDBC, pero está vacía, algunos conductores al valor especificado, por defecto: Otro, no es necesario especificar el tipo al insertar valores nulos
    mybatis.configuration.jdbc-tipo-de-null = nula
  • # Si el campo de datos está vacía, se omite el campo de visualización, añadiendo el archivo de configuración, la consulta de datos especificada está vacía o nula.
    mybatis.configuration.call-set-on-nulos = verdadero

A continuación, sólo tenemos que añadir como un pasaje

mybatis:
  type-aliases-package: com.cs.dto.UserDto  #对应的实体类
  configuration:
    map-underscore-to-camel-case: true
    cache-enabled: true #开启二级缓存
  mapper-locations: mappers/*.xml #如果还想用之前的mapper.xml写sql语句也可以放在这里
Publicado 69 artículos originales · ganado elogios 6 · vistas 2499

Supongo que te gusta

Origin blog.csdn.net/qq_40539437/article/details/104012551
Recomendado
Clasificación