2021 Resumo do MyBatis de integração SpringBoot


Prefácio:
Se você ainda não tem um banco de dados, então você precisa primeiro instalar um banco de dados, seja local ou uma máquina virtual ou um servidor, você precisa ter um banco de dados como base. Forneça um tutorial detalhado sobre como instalar o banco de dados mysql no Linux. Minha namorada vai ler: o banco de dados mysql está instalado no ambiente Linux
e um projeto SpringBoot foi estabelecido por padrão aqui. Se você não sabe como construir rapidamente um SpringBoot projeto, você pode ver o próximo artigo: Construir rapidamente um projeto Jsp + SpringBoot .

1. Processo de integração

SpringBoot integra MyBatis principalmente nas seguintes etapas: importar dependências relacionadas, configurar o arquivo application.properties, criar interface de serviço e sua classe de implementação, criar interface dao, criar arquivo mapeador de acordo com o conteúdo do método na interface dao e seguir cada etapa de acordo com este processo Dê detalhes.

1. Importar dependências relacionadas

As dependências que precisam ser importadas aqui incluem pacote de dependência MyBatis, pacote de driver de banco de dados mysql e pacote de dependência de pool de conexão de fonte de dados, como segue:
Introdução da versão:
SpringBoot: 2.4.4
mybatis-spring-boot-starter: 2.1.2
mysql - conector-java
: 5.1.38 druid: 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. Arquivo de configuração application.properties

Os parâmetros que precisam ser configurados aqui são banco de dados e mybatis. As especificações são as seguintes. Observe que não precisamos fornecer parâmetros de configuração para outros bancos de dados. SpringBoot terá uma configuração padrão.

# 数据库相关配置
#连接池
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. Crie a interface de serviço e sua classe de implementação, crie a interface dao

Não há nada a dizer sobre isso, ou seja, a interface comum é criada, a classe é implementada e a interface dao é chamada. O código é o seguinte:

  1. interface de serviço

    public interface ShiroUserService {
          
          
        void insertUser(ShiroUser shiroUser);
        ShiroUser queryUser(String username);
    }
    
  2. classe de implementação de interface de serviço

    @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. criação de interface dao

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

    Deve-se observar que a anotação do mapeador pode ser usada aqui, ou a anotação do mapperScan pode ser adicionada à classe de inicialização. Ambas as anotações podem mapear os arquivos dao e mapeador juntos. Recomenda-se adicionar a anotação MapperScan à classe de inicialização para passar o caminho do pacote que precisa ser verificado É isso, da seguinte maneira:

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

4. Crie um arquivo mapeador baseado em dao

Primeiro, você precisa criar uma pasta na pasta de recursos para armazenar o arquivo mapper.xml. O caminho da pasta é o caminho que configuramos em apliction.properties. Na verdade, ele deve ser criado primeiro e, em seguida, configurado. Isso está escrito aqui para configurar o Write together

  1. Não há
    nenhum requisito para criar uma pasta de mapeamento . O caminho não precisa ser consistente com dao ou quem quer que seja. É importante notar que barras devem ser usadas para criar diretórios de arquivos de vários níveis. Não use pontos. Os pontos criam um único estrutura de diretório de nível. Eu pisei nisso por causa disso. Estou profundamente impressionado depois de passar pelo poço.
    Insira a descrição da imagem aqui

  2. Criar arquivo 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 também é um arquivo mapeador padrão, que pode ser usado como modelo.O significado de cada frase no arquivo mapeador específico não é explicado uma a uma. Este artigo tem como objetivo resumir o processo.

5. Conclua a integração

Na verdade, a integração do SpringBoot + MyBatis agora está completa. O processo não principal de criação de classes de entidade e criação de interfaces de controlador não foi escrito. Não é uma coisa complicada no início, mas este não é o único método de integração, mas este método de integração é mais rápido, e a raiz rápida está no uso do iniciador Mybatis fornecido pelo SpringBoot, que economiza muita configuração xml. Mas não importa o quão simples as coisas sejam, podem haver vários problemas. A seguir, uma lista de vários problemas que podem surgir durante o processo de integração, dá respostas, faz um resumo por conta própria e espero que também ajude os leitores de passagem.

2. Resumo do problema

Este processo inevitavelmente encontrará muitos problemas.Para aqueles que estão em contato com esta arquitetura por um longo tempo, pode ser óbvio à primeira vista que para aqueles que são novos nela, vários bd podem ser necessários. Aqui estão alguns problemas comuns listados um por um.

1. Usar anotação do Mapper no dao?

No processo de integração acima, não há anotação no dao, mas, na verdade, podemos adicionar uma anotação de mapeador a cada arquivo dao, que pode associar o dao ao arquivo mapper.xml e gerar automaticamente uma classe de implementação para o dao e injete-o no recipiente da mola. No entanto, adicionar a anotação MapperScan à classe de inicialização tem o mesmo efeito que a anotação.

2. 报错 A conexão SSL sem verificação de identidade do servidor não é recomendada

Insira a descrição da imagem aqui
Isso é causado pela incapacidade de verificar a segurança do servidor onde o banco de dados está localizado. Podemos deixar Spring não verificar o valor e adicionar useSSL = false à configuração do caminho do banco de dados.

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

Isso está resolvido.

3.BindingException binding exception

Isso ocorre porque o IDEA não compila arquivos xml por padrão. Precisamos adicionar o seguinte conteúdo no nível de compilação do arquivo pom para nos dizer para compilar nossos arquivos xml ao compilar o projeto:

		<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. Se um erro de conexão de banco de dados for relatado

Este erro foi encontrado pelo autor, mas não foi restaurado. Os parâmetros de configuração do banco de dados estão todos normais. O banco de dados também está normal. Mas não pode ser conectado.Neste momento, outros parâmetros de conexão do banco de dados são adicionados e está normal. Mas não foi restaurado, como referência.

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

5. Se o problema da chave primária for relatado

O erro é relatado, ou esses dois parâmetros não são configurados na instrução insert no arquivo mapeador, use a chave primária gerada automaticamente, e a segunda é o nome da chave primária do banco de dados. Se ambos estiverem configurados, verifique se a tabela em o banco de dados está configurado com suporte A chave primária é incrementada.

useGeneratedKeys="true" keyProperty="oid"

Insira a descrição da imagem aqui

6. O problema do armazenamento de dados ilegíveis

Adicione characherEncoding = UTF-8 ao configurar o endereço do banco de dados em application.properties, como segue:

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

Além disso, verifique se o banco de dados foi criado em UTF-8.
Insira a descrição da imagem aqui
Se tudo isso for normal, pode haver caracteres ilegíveis nas interações de front-end e back-end. Preste atenção se a codificação dos arquivos de front-end é normal, por exemplo, se a codificação de jsp, html, etc. está errado.

7. Ao usar a anotação Autowired para injetar dao, a IDEA avisa que nenhum Bean disponível pode ser encontrado

Se autowired for usado no processo de integração acima, este problema será solicitado da seguinte maneira:
Insira a descrição da imagem aqui
IDEA nos informa que não há bean que possa ser injetado, por que IDEA nos avisa assim, porque não fornecemos uma classe de implementação para a interface dao , IDEA naturalmente não pode detectá-lo, mas podemos ignorá-lo, isso não afetará a compilação e o tempo de execução, porque Mybatis irá implementar uma classe de implementação para nós e injetá-la no contêiner do Spring, para que não haja problemas em tempo de execução, mas se olharmos para este prompt, podemos substituí-lo por Recurso e não haverá problema.

8. O programa em execução continua aparecendo typeException

A maior parte disso é causado por problemas no mapper.xml. Verifique o arquivo mapper cuidadosamente para ver se há algum problema com o tipo, número, uso de #, etc. dos parâmetros.
Os itens acima são alguns dos problemas que podem ser encontrados durante o processo de integração. Naturalmente, eles são resolvidos para localizar o problema rapidamente na próxima vez. Se isso pode ajudá-lo a passar por aqui, melhor ainda.

Três. Resumo

Este artigo classifica o processo de integração do SpringBoot e MyBatis e os problemas que podem ser encontrados. O processo de integração escolhe a escrita principal, e algumas delas não são escritas. Os problemas são problemas comuns. Na verdade, não importa o que seja a integração do SpringBoot, essas etapas são todas: a primeira etapa é importar dependências e a segunda etapa é modificar o arquivo de configuração. Em seguida, comece a codificar. Este é o processo principal, e o objetivo da organização é cometer erros repetidos por você mesmo, e também espero ajudá-lo a passar.

Acho que você gosta

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