Por que o Mybatis-plus é tão fácil de usar, mas não é muito usado?

1. O que é Mybatis-plus?

MyBatis-Plus (MP para abreviar) é uma ferramenta de aprimoramento para mybatis. Com base em mybatis, apenas melhorias são feitas e nenhuma alteração é feita. Nasceu para simplificar o desenvolvimento e melhorar a eficiência.
insira a descrição da imagem aqui

2. Recursos

1. Hidrate as coisas silenciosamente

Basta fazer melhorias sem alterações, introduzi-lo sem afetar os projetos existentes, suave como seda.

2. Eficiência em primeiro lugar

Com uma configuração simples, você pode executar rapidamente operações CRUD de tabela única, economizando muito tempo.

3. Funções ricas

Geração de código, paginação automática, exclusão lógica, preenchimento automático e outras funções estão disponíveis.

3. Vantagens

1. Sem intrusão

O MyBatis-Plus é estendido com base no MyBatis, apenas aprimoramentos são feitos sem alterações. A introdução do MyBatis-Plus não terá nenhum impacto na estrutura MyBatis existente, e o MP suporta todos os recursos nativos do MyBatis.

2. Menos dependência

Confie apenas em MyBatis e MyBatis-Spring

3. Pequena perda

O CRUD básico será injetado na inicialização, o desempenho é basicamente sem perdas e a operação orientada a objetos é executada diretamente.

4. Evitar injeção de SQL

Removedor de injeção de SQL integrado para prevenir efetivamente ataques de injeção de SQL

5. Operações gerais de CRUD

Com o mapeador geral e o serviço geral integrados, a maioria das operações CRUD de uma única tabela pode ser realizada com apenas uma pequena quantidade de configuração, e existem construtores condicionais mais poderosos para atender a várias necessidades de uso, um pesadelo para os programadores CRUD.

6. Várias estratégias de chave primária

Suporta até 4 estratégias de chave primária (incluindo gerador de ID exclusivo distribuído), que pode ser configurado livremente para resolver perfeitamente o problema da chave primária.

  1. Incremento automático do ID do banco de dados AUTO
  2. INPUT ID de entrada do usuário
  3. ID_WORKER ID globalmente exclusivo, chave primária do tipo Longo
  4. ID_WORKER_STR string ID globalmente exclusivo
  5. UUID ID globalmente exclusivo, a chave primária do tipo UUID
  6. NONE Este tipo não está definido como o tipo de chave primária

Existem várias maneiras de gerar a chave primária:

  1. banco de dados auto-crescimento
  2. UUID
  3. Redis gera id

7. Suporta carregamento a quente

O xml correspondente ao mapeador suporta carregamento a quente.Para operações simples de CRUD, ele pode até ser iniciado sem xml.

Observação: esta função foi removida na versão 3.0.6, mas a versão mais recente do snapshot foi adicionada novamente e marcada com um logotipo obsoleto. Espera-se que seja completamente removida na versão 3.1.0

8. Suporte ao Registro Ativo

Active Record (referido como AR) é um padrão de modelo de domínio, caracterizado pelo fato de que uma classe de modelo corresponde a uma tabela em um banco de dados relacional e uma instância de uma classe de modelo corresponde a uma linha de registros na tabela.

MyBatis-Plus suporta AR apenas herdando a classe Model e implementando o método de especificação de chave primária.

9. Geração de código de suporte

Usando o código ou o plug-in Maven pode gerar rapidamente mapeador, modelo, serviço, código da camada do controlador, mecanismo de modelo de suporte, a classe do gerador de código só precisa modificar o nome da tabela e inserir a estrutura do pacote do projeto, é fácil e confortável.

10. Suporte a operações gerais globais personalizadas

Suporta injeção de método genérico global

11. Suporta escape automático de palavras-chave

Suporte a transferência automática de palavras-chave do banco de dados e você também pode personalizar palavras-chave

12. Plug-in de paginação integrado

Com base na paginação física do Mybatis, os desenvolvedores não precisam se preocupar com operações específicas.Depois de configurar o plug-in, escrever paginação é equivalente a escrever uma consulta List básica.

Paginação? O pesadelo de um programador júnior, agora? tão fácil!

13. Plugin de análise de desempenho integrado

Ele pode gerar a instrução sql e o tempo de execução. Recomenda-se habilitá-lo na fase de desenvolvimento e teste.

14. Plugin de interceptação global integrado

Forneça operações completas de exclusão e atualização de tabela, análise inteligente e bloqueio, para evitar operações incorretas.

Quarto, Mapeador de Base

No uso do MyBatis-Plus, muitas vezes usamos a interface BaseMapper. Eu escrevi este blog por causa do BaseMapper. É realmente um novato.

BaseMapper é um mecanismo de implementação usando a programação de interface MyBatis. Ele fornece uma série de métodos básicos para adicionar, excluir, modificar e verificar por padrão, e os desenvolvedores não precisam escrever SQL para essas operações básicas para processar operações (o mecanismo fornecido pelo Mybatis requer desenvolvedores para realizar operações no mapper.xml fornece a instrução sql), então podemos supor que o Mybatis-Plus concluiu a geração da instrução SQL do método fornecido pela interface BaseMapper.

Classe BaseMapper:

package com.baomidou.mybatisplus.core.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;
 
public interface BaseMapper<T> {
    
    
    int insert(T var1);
 
    int deleteById(Serializable var1);
 
    int deleteByMap(@Param("cm") Map<String, Object> var1);
 
    int delete(@Param("ew") Wrapper<T> var1);
 
    int deleteBatchIds(@Param("coll") Collection<? extends Serializable> var1);
 
    int updateById(@Param("et") T var1);
 
    int update(@Param("et") T var1, @Param("ew") Wrapper<T> var2);
 
    T selectById(Serializable var1);
 
    List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> var1);
 
    List<T> selectByMap(@Param("cm") Map<String, Object> var1);
 
    T selectOne(@Param("ew") Wrapper<T> var1);
 
    Integer selectCount(@Param("ew") Wrapper<T> var1);
 
    List<T> selectList(@Param("ew") Wrapper<T> var1);
 
    List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> var1);
 
    List<Object> selectObjs(@Param("ew") Wrapper<T> var1);
 
    IPage<T> selectPage(IPage<T> var1, @Param("ew") Wrapper<T> var2);
 
    IPage<Map<String, Object>> selectMapsPage(IPage<T> var1, @Param("ew") Wrapper<T> var2);
}

5. Use Mybatis-plus para realizar adição, exclusão, modificação e inspeção

1. Camada do controlador

@Controller
@RequestMapping("/user")
public class UserController {
    
    

    @Autowired
    private UserService userService;
    
	public void query(){
    
    
        Map<String, String> map = new HashMap<String, String>();
        map.put("userName","哪吒");
        List<User> userList = userService.query().allEq(paramMap).list();
    }

    @PostMapping("/save")
    public void save(User user){
    
    
        userService.save(user);
    }

    @PostMapping("/update")
    public void update(User user){
    
    
        userService.updateById(user);
    }

    @PostMapping("/delete")
    public void delete(String userId){
    
    
        userService.removeById(userId);
    }
}

Expansão de Conhecimento >> Construtor de Condição
Construtor
de Condição é montar várias condições para completar a consulta de diferentes condições, como eq (igual a), gt (maior que), orderBy (sort), tendo, groupBy, entre, etc., Condicional A montagem é realizada traduzindo esses operadores em SQL em código.
Pessoalmente, o construtor condicional é um pouco como o hibernate, ele mapeia operações de banco de dados para operações de objetos, o que está mais de acordo com o pensamento do programador, mas também há algumas desvantagens.
Por exemplo, se o projeto relatar um erro, é difícil localizar o sql específico. Não há escrita direta do sql. Mybatis-plus raramente é considerado no processo de desenvolvimento real.

2. Camada de serviço

public interface UserService extends IService<User> {
    
    

}
@Service
public class UserServiceImpl extends ServiceImpl<UserDao, User> implements UserService {
    
    
	
}

3. Camada Dao

@Mapper
public interface UserDao extends BaseMapper<User> {
    
    

}

4. Paginação

(1) Classe de configuração de paginação

@Configuration
public class MybatisPlusConfig {
    
    

    /**
     * 分页插件
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
    
    
        return new PaginationInterceptor();
    }
}

(2) controlador

@Controller
@RequestMapping("/user")
public class UserController {
    
    

    @Autowired
    private UserService userService;
    
    // 分页
	@RequestMapping(value = "/findAll",method = RequestMethod.POST)
    public Object findAll(HttpServletRequest request){
    
    
        //获取前台发送过来的数据
        Integer pageNo = Integer.valueOf(request.getParameter("pageNo"));
        Integer pageSize = Integer.valueOf(request.getParameter("pageSize"));
        IPage<User> page = new Page<>(pageNo, pageSize);
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        User user= new User();
        user.setId(1);
        wrapper.setEntity(user);
        return userService.page(page,wrapper);
    }
}

Este código, absolutamente, muito conciso. É tarde demais para conhecê-lo, escrevi código inútil por tantos anos! ! !

5. Lembro-me da arquitetura de três camadas do SpringMVC, não é assim.

(1) Camada de apresentação:

Receba os parâmetros passados ​​do front desk e, em seguida, passe esses parâmetros para a camada de negócios para processamento. A camada de negócios retorna os dados processados ​​para a camada de apresentação e a camada de apresentação retorna os dados para a página e faz um salto de página.

(2) Camada de negócios:

Recebe os parâmetros da camada de apresentação e processa a lógica de negócios. No processo de processamento de negócios, os dados podem ser manipulados do banco de dados, de modo que a camada de negócios não operará o banco de dados por si só, mas passará a tarefa de operar o banco de dados para o processamento da camada persistente.

(3) Camada de persistência de dados:

Receba os parâmetros passados ​​pela camada de negócios, execute o processamento interativo do banco de dados e retorne os resultados da operação do banco de dados para a camada de negócios.

Isso mesmo!

Mas o que diabos é Mybatis-plus?

O controlador da camada de apresentação, o serviço da camada de negócios e o dao da camada de persistência de dados não possuem um único método e são todos cobertos diretamente na camada do controlador.

Muitas pessoas dizem que isso não é muito bom, mas aqui está o problema

  1. Por exemplo, se o projeto relatar um erro, é difícil localizar o sql específico e não há uma maneira direta de escrever o sql.
  2. Baixa legibilidade do código
  3. Não é bom para otimização de sql

Embora o Mybatis-plus possa tornar seu código mais conciso e tenha as 14 vantagens mencionadas acima, ele também reduz a reutilização de código e a clareza da hierarquia e aumenta muito os custos de modificação e manutenção do código.

O código da camada de serviço e o código da camada de acesso ao banco de dados são confundidos, tornando difícil para os programadores se concentrarem em um detalhe específico. Operações SQL comuns Mybatis-plus pode construir condições de execução SQL através do Wrapper. Programadores não podem ver instruções SQL, e ler e verificar a lógica SQL consome mais energia. Mybatis-plus é baseado apenas em custos de manutenção posteriores. A vantagem é a troca de aparentemente asseio no desenvolvimento.

6. Resumo

Em uma palavra, não use o Mybatis-plus no desenvolvimento real, exceto para operação sem cérebro de mesa única.

Resumo do artigo da essência de Nezha

Resumo de 100.000 palavras e 208 perguntas de entrevista clássicas Java (com respostas)

Acho que você gosta

Origin blog.csdn.net/guorui_java/article/details/126375530
Recomendado
Clasificación