Resumen de MyBatis de integración SpringBoot 2021


Prefacio:
Si aún no tiene una base de datos, primero debe instalar una base de datos, ya sea una máquina local o virtual o un servidor, debe tener una base de datos como base. Proporcione un tutorial detallado sobre cómo instalar la base de datos mysql en linux. Mi novia lo leerá: la base de datos mysql está instalada en el entorno linux
, y aquí se ha establecido un proyecto SpringBoot por defecto. Si no sabe cómo construir rápidamente un SpringBoot proyecto, puede ver el artículo siguiente: Cree rápidamente un proyecto Jsp + SpringBoot .

1. Proceso de integración

SpringBoot integra MyBatis principalmente en los siguientes pasos: importar las dependencias relacionadas, configurar el archivo application.properties, crear la interfaz de servicio y su clase de implementación, crear la interfaz dao, crear el archivo mapeador de acuerdo con el contenido del método en la interfaz dao y seguir cada paso de acuerdo con este proceso Dar detalles.

1. Importar dependencias relacionadas

Las dependencias que deben importarse aquí incluyen el paquete de dependencias MyBatis, el paquete del controlador de la base de datos mysql y el paquete de dependencias del grupo de conexiones de la fuente de datos, de la siguiente manera:
Introducción de la versión:
SpringBoot: 2.4.4
mybatis-spring-boot-starter: 2.1.2
mysql - conector-java: 5.1.38
druida: 1.1.19

	<!--引入mybatis的依赖-->
	<dependency>
	   <groupId>org.mybatis.spring.boot</groupId>
	   <artifactId>mybatis-spring-boot-starter</artifactId>
	   <version>2.1.2</version>
	</dependency>
	
	<!--引入连接mysql的驱动-->
	<dependency>
	   <groupId>mysql</groupId>
	   <artifactId>mysql-connector-java</artifactId>
	   <version>5.1.38</version>
	</dependency>
	
	<!--引入数据源连接池依赖-->
	<dependency>
	   <groupId>com.alibaba</groupId>
	   <artifactId>druid</artifactId>
	   <version>1.1.19</version>
	</dependency>

2. Archivo de configuración application.properties

Los parámetros que deben configurarse aquí son database y mybatis. Los detalles son los siguientes. Tenga en cuenta que no necesitamos proporcionar parámetros de configuración para otras bases de datos. SpringBoot tendrá una configuración predeterminada.

# 数据库相关配置
#连接池
spring.datasource.type=com.alibaba.druid.pool.DruidDataSource
#驱动类
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#数据库地址
spring.datasource.url=jdbc:mysql://192.168.150.130:3306/shiro?characterEncoding=UTF-8&useSSL=false
#数据库用户名与密码
spring.datasource.username=root
spring.datasource.password=super

# mybatis 别名配置,配置该参数mapper中才认识自定义类型
mybatis.type-aliases-package=com.example.demo5.entry
# 包扫描,配置了该参数MyBatis才能找到我们写mapper文件
mybatis.mapper-locations=classpath:com/example/demo5/mapper/*.xml

3. Cree la interfaz de servicio y su clase de implementación, cree la interfaz dao

No hay nada que decir al respecto, es decir, se crea la interfaz ordinaria, luego se implementa la clase y luego se llama a la interfaz dao. El código es el siguiente:

  1. interfaz de servicio

    public interface ShiroUserService {
          
          
        void insertUser(ShiroUser shiroUser);
        ShiroUser queryUser(String username);
    }
    
  2. clase de implementación de interfaz de servicio

    @Service
    @Transactional
    public class ShiroUserServiceImpl implements ShiroUserService {
          
          
    
       @Resource
       private ShiroUserDao shiroUserDao;
    
       @Override
       public void insertUser(ShiroUser shiroUser) {
          
          
           //使用MD5+盐+hash散列进行对密码加密
           String salt = SaltUttil.getSalt(10);
           Md5Hash md5Hash = new Md5Hash(shiroUser.getPassword(),salt ,2048);
           shiroUser.setPassword(md5Hash.toString());
           shiroUser.setSalt(salt);
           shiroUserDao.insertUser(shiroUser);
       }
    
       @Override
       public ShiroUser queryUser(String username) {
          
          
           ShiroUser shiroUser = shiroUserDao.queryUser(username);
           return shiroUser;
       }
    }
    
  3. creación de interfaz dao

    public interface ShiroUserDao {
          
          
        void insertUser(ShiroUser shiroUser);
        ShiroUser queryUser(String username);
    }
    

    Cabe señalar que la anotación del asignador se puede usar aquí, o la anotación mapperScan se puede agregar a la clase de inicio. Ambas anotaciones pueden mapear los archivos dao y del asignador juntos. Se recomienda agregar la anotación MapperScan a la clase de inicio para pasar en la ruta del paquete que necesita ser escaneado Eso es todo, de la siguiente manera:

    @MapperScan(value = "com.example.demo5.dao")
    @SpringBootApplication
    public class Demo5Application {
          
          
        public static void main(String[] args) {
          
          
            SpringApplication.run(Demo5Application.class, args);
        }
    }
    

4. Cree un archivo de mapeador basado en dao

Primero, debe crear una carpeta debajo de la carpeta de recursos para almacenar el archivo mapper.xml. La ruta de la carpeta es la ruta que configuramos en appliction.properties. De hecho, primero debe crearse y luego configurarse. Esto está escrito aquí para configurar Escribir juntos

  1. No es
    necesario crear una carpeta de mapeador . No es necesario que la ruta sea coherente con dao o con quien sea. Vale la pena señalar que se deben usar barras diagonales para crear directorios de archivos de varios niveles. No use puntos. Los puntos crean un único Estructura de directorio de nivel. Lo he pisado debido a esto. Estoy profundamente impresionado después de pasar por el pozo.
    Inserte la descripción de la imagen aquí

  2. Crear archivo mapper.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">
    <mapper namespace="com.example.demo5.dao.ShiroUserDao">
    
        <sql id="shiro_user_fields">
          oid,username,password,salt
        </sql>
    
        <insert id="insertUser" parameterType="ShiroUser" useGeneratedKeys="true" keyProperty="oid">
            insert into shiro_user values (#{
          
          oid},#{
          
          username},#{
          
          password},#{
          
          salt})
        </insert>
    
        <select id="queryUser" parameterType="java.lang.String" resultType="ShiroUser">
            select
            <include refid="shiro_user_fields"/>
            from shiro_user where 1=1
            <if test="username != null and username != ''">
              and username = #{
          
          username}
            </if>
        </select>
    </mapper>
    

    Este también es un archivo de mapeador estándar, que se puede utilizar como plantilla. El significado de cada oración en el archivo de mapeador específico no se explica una por una. Este artículo tiene como objetivo resumir el proceso.

5. Completa la integración

De hecho, la integración de SpringBoot + MyBatis ahora está completa. El proceso no principal de crear clases de entidad y crear interfaces de controlador no está escrito. No es algo complicado al principio, pero este no es el único método de integración, pero este método de integración es más rápido, y la raíz rápida radica en el uso del lanzador Mybatis proporcionado por SpringBoot, que ahorra mucha configuración xml. Pero no importa cuán simples sean las cosas, puede haber varios problemas. A continuación, se enumeran una variedad de problemas que pueden surgir durante el proceso de integración, y brinde respuestas, haga un resumen usted mismo y espere que también ayude a los lectores que pasan.

2. Resumen del problema

Este proceso inevitablemente encontrará muchos problemas Para aquellos que han estado en contacto con esta arquitectura durante mucho tiempo, puede resultar obvio de un vistazo que para aquellos que son nuevos en ella, pueden ser necesarios varios bd. A continuación, se enumeran algunos problemas comunes uno por uno.

1. ¿Usar la anotación Mapper en dao?

En el proceso de integración anterior, no hay una anotación en el dao, pero de hecho, podemos agregar una anotación Mapper a cada archivo dao, que puede asociar el dao con el archivo mapper.xml y generar automáticamente una clase de implementación para el dao. e inyectarlo en el recipiente de resorte. Sin embargo, agregar la anotación MapperScan a la clase de inicio tiene el mismo efecto que la anotación.

2. 报错 No se recomienda la conexión SSL sin verificación de identidad del servidor

Inserte la descripción de la imagen aquí
Esto se debe a la imposibilidad de verificar la seguridad del servidor donde se encuentra la base de datos. Podemos dejar que Spring no verifique el valor y agregar useSSL = false a la configuración de la ruta de la base de datos.

spring.datasource.url=jdbc:mysql://192.168.150.130:3306/shiro?characterEncoding=UTF-8&useSSL=false

Esto está resuelto.

3.Excepción de vinculación BindingException

Esto se debe a que IDEA no compila archivos xml de forma predeterminada. Necesitamos agregar el siguiente contenido bajo el nivel de compilación del archivo pom para indicarnos que compilemos nuestros archivos xml juntos al compilar el proyecto:

		<resources>
            <resource>
                <directory>src/main/Java</directory>
                <excludes>
                    <exclude>**/*.java</exclude>
                </excludes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.* </include>
                </includes>
            </resource>
        </resources>

4. Si se informa de un error de conexión a la base de datos

El autor ha detectado este error pero no se ha restaurado Los parámetros de configuración de la base de datos son todos normales. La base de datos también es normal. Pero no se puede conectar, en este momento se agregan otros parámetros de conexión de la base de datos y es normal. Pero no se ha restaurado, como referencia.

spring.datasource.max-idle=10
spring.datasource.max-wait=10000
spring.datasource.min-idle=5
spring.datasource.initial-size=5

5. Si se informa del problema de la clave principal

Se informa el error, o estos dos parámetros no están configurados en la declaración de inserción en el archivo del asignador, use la clave primaria generada automáticamente, y el segundo es el nombre de la clave primaria de la base de datos. Si ambos están configurados, verifique si la tabla en la base de datos está configurada con soporte La clave principal se incrementa.

useGeneratedKeys="true" keyProperty="oid"

Inserte la descripción de la imagen aquí

6. El problema del almacenamiento de datos confusos

Agregue characherEncoding = UTF-8 cuando configure la dirección de la base de datos en application.properties, de la siguiente manera:

spring.datasource.url=jdbc:mysql://192.168.150.130:3306/shiro?characterEncoding=UTF-8&useSSL=false

Además, verifique si la base de datos se creó en UTF-8.
Inserte la descripción de la imagen aquí
Si todo esto es normal, puede haber caracteres confusos en las interacciones de front-end y back-end. Preste atención a si la codificación de los archivos de front-end es normal, como si la codificación de jsp, html, etc. Está Mal.

7. Cuando se usa la anotación Autowired para inyectar dao, IDEA indica que no se puede encontrar ningún Bean disponible

Si se usa autowired en el proceso de integración anterior, este problema se presentará de la siguiente manera:
Inserte la descripción de la imagen aquí
IDEA nos indica que no hay ningún bean que pueda inyectarse, ¿por qué IDEA nos lo solicita? Porque no proporcionamos una clase de implementación para la interfaz dao. , IDEA naturalmente no puede detectarlo, pero podemos ignorarlo, no afectará la compilación y el tiempo de ejecución, porque Mybatis implementará una clase de implementación para nosotros y la inyectará en el contenedor Spring, para que no haya problemas en el tiempo de ejecución, pero Si miramos este mensaje, podemos reemplazarlo por Recurso y no habrá ningún problema.

8. El programa en ejecución sigue apareciendo typeException

La mayor parte de esto es causado por problemas en mapper.xml. Revise el archivo del mapeador cuidadosamente para ver si hay algún problema con el tipo, número, uso de #, etc. de los parámetros.
Los anteriores son algunos de los problemas que pueden surgir durante el proceso de integración. Naturalmente, se resuelven para localizar rápidamente el problema la próxima vez. Si puede ayudarlo a pasar, mucho mejor.

Tres. Resumen

Este artículo clasifica el proceso de integración de SpringBoot y MyBatis y los problemas que pueden surgir. El proceso de integración elige la escritura principal y algunas de ellas no están escritas. Los problemas son problemas comunes. De hecho, no importa qué sea la integración de SpringBoot, estos pasos son todos: el primer paso es importar las dependencias y el segundo paso es modificar el archivo de configuración. Entonces empieza a codificar. Este es el proceso principal, y el propósito de organizarse es cometer errores repetidos por usted mismo, y también esperar ayudarlo a pasar.

Supongo que te gusta

Origin blog.csdn.net/m0_46897923/article/details/115245892
Recomendado
Clasificación