Anotações comuns do MyBatis-Plus
Tags relacionados:1. MyBatis com uma experiência mais fluida
2. Poderoso: MyBatis e três métodos de consulta streaming
Anotações comuns do MyBatis-Plus
As anotações comuns do MyBatis-Plus que aprendemos juntos ao longo dos anos
I. Anotações comuns do MyBatis-Plus — Introdução
Recentemente estudei o MyBatis-Plus e agora vou revisar com você quais anotações usamos frequentemente durante o aprendizado, quais são as funções dessas anotações e como utilizá-las. Especialmente indicado para iniciantes em aprendizado e veteranos em revisão~
Sem mais delongas, vamos começar!
2. Introdução ao MyBatis-Plus
MyBatis-Plus (MP, abreviado) é uma ferramenta de aprimoramento para o MyBatis. Ele apenas aprimora, sem alterar a base do MyBatis. Foi criado para simplificar o desenvolvimento e aumentar a eficiência.
Sua visão é ser o melhor parceiro do MyBatis!
Endereço oficial: https://baomidou.com/
Endereço da documentação: https://baomidou.com/pages/24112f
3. Anotações comuns do MyBatis — Anotações mais utilizadas
1. @MapperScan
@SpringBootApplication _
@MapperScan ( " com.cabbage.mapper " )
public class Mybatisplus01Application {
public static void main( String[] args ) {
SpringApplication.run ( Mybatisplus01Application.class, args );
}
}
Combinando o código e as imagens, é possível perceber: a anotação @MapperScan é usada para escanear o arquivo de mapeamento do mapper, e somente após seu uso podemos utilizar os diversos métodos fornecidos oficialmente.
2. @Mapper
@Mapper
@Repository
public interface UserMapper extends BaseMapper {
/**
* Consulta para mapear coleção por id
* @param id
* @return
*/
Map< String,Object > selectMapById (Long id);
}
Por que estou apresentando esta anotação pela segunda vez? Porque @Mapper atua sobre a classe de entidade no banco de dados, não sendo necessário escrever novamente a anotação @MapperScan. A diferença entre elas é que @Mapper só pode mapear uma classe de entidade, enquanto @MapperScan pode mapear todas as classes de entidade dentro de um pacote inteiro. Mais abrangente e mais fácil de operar.
3. @TableName
Primeiro, observe o seguinte código:
@Data
//Define o nome da tabela correspondente à classe de entidade
@TableName("t_user")
public class User {
@TableId(value = "id",type = IdType.AUTO)
private Long uid;
@TableField(value = "name")
private String name;
private Integer age;
private String email;
@TableField(value = "is_deleted")
@TableLogic
private Integer isDeleted ;
}

Como todos sabem, quando o nome da classe de entidade não corresponde ao nome da tabela a ser operada, um erro será gerado, e a anotação @TableName pode nos ajudar a resolver esse problema. O nome da minha tabela no banco de dados é t_user, e o nome da classe de entidade é User — basta escrever @TableName("t_user") acima do nome da classe.
4. @Data
Esta anotação também simplifica bastante nosso desenvolvimento. Por quê? Porque, ao usar esta anotação, você pode omitir getter(), setter(), toString() e sobrescrever os métodos equals() e hashCode() da classe. Surpreendente, não é?
5. @TableId
Quando o MyBatis-Plus executa operações de inserção, exclusão, alteração e consulta, ele usa id como coluna de chave primária por padrão e, ao inserir dados, a estratégia padrão
baseada no algoritmo snowflake gera o id. O algoritmo snowflake não será explicado aqui.
Ao usar a declaração @TableId(value = "id"), se a chave primária na classe de entidade e na tabela não for id, mas outro campo, como uid no código, o MyBatis-Plus identificará automaticamente uid como a coluna de chave primária; caso contrário, o seguinte erro será gerado:
Ao usar a declaração @TableId(value = "id", type = IdType.AUTO), indica-se o uso da estratégia de incremento automático do banco de dados. Atenção: para este tipo, certifique-se de que o banco de dados esteja configurado com incremento automático de id, caso contrário, a configuração será inválida!
É claro que a função do @TableId também pode ser definida no arquivo de configuração application.yml, conforme abaixo:
mybatis -plus:
global-config:
banner: false
db -config:
# Configurar o prefixo padrão da tabela de operações do MyBatis-Plus
table-prefix: "t_"
# Configurar a estratégia de chave primária do MyBatis-Plus
id-type: auto
# Configurar logs do MyBatis
configuration:
log - impl : org.apache.ibatis.logging.stdout.StdOutImpl
6. @TableField
Quando o MyBatis-Plus executa uma instrução SQL, é necessário garantir que o nome do atributo na classe de entidade seja igual ao nome do campo na tabela; caso contrário, um erro será gerado. A declaração @TableField(value = "is_deleted") indica que o campo is_deleted na tabela do banco de dados corresponde ao campo isDeleted na classe de entidade.
Observação:
Se os atributos na classe de entidade usam o estilo de nomenclatura camelCase e os campos na tabela usam o estilo de nomenclatura com underscore
Por exemplo, atributo da classe de entidade userName, campo da tabela user_name — o MyBatis-Plus converterá automaticamente o estilo underscore para o estilo camelCase
Se os atributos na classe de entidade e os campos na tabela não atenderem às condições acima, como o atributo da classe de entidade name e o campo da tabela username, é necessário usar @TableField("username") no atributo da classe de entidade para definir o nome do campo correspondente ao atributo
7. @TableLogic
Antes de falar sobre esta anotação, vamos primeiro entender a exclusão lógica.
Exclusão física: exclusão real, remove os dados correspondentes do banco de dados; após isso, os dados excluídos não podem mais ser consultados
Exclusão lógica: exclusão simulada, altera o status do campo de dados correspondente que indica se o registro foi excluído para "status de excluído"; o registro de dados ainda pode ser visualizado no banco de dados
Cenário de uso: recuperação de dados é possível
Na minha tabela do banco de dados, quando is_delete é 1, significa exclusão lógica; quando is_delete é 0, significa que não houve exclusão
A anotação @TableLogic indica que as propriedades na classe são propriedades de exclusão lógica
Observação:
Ao testar exclusões lógicas, o que realmente é executado é uma modificação: UPDATE t_user SET is_deleted =1 WHERE id=? AND is_deleted =0
Ao testar a função de consulta, os dados marcados como excluídos não serão consultados por padrão: SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE is_deleted =0
Ao aprender sobre o plugin de paginação do MyBatis-Plus, precisamos configurar o interceptador. Veja o código:
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor ( ) {
MybatisPlusInterceptor interceptor =
new MybatisPlusInterceptor ( );
interceptor.addInnerInterceptor
(new PaginationInnerInterceptor ( DbType.MYSQL ));
return interceptor;
}
}
8. @Configuration
Acredito que você já tenha visto esta anotação muitas vezes e possa estar um pouco impaciente, mas ainda quero mencioná-la aqui: a classe que usa esta anotação representa uma classe de configuração, e a própria classe também é um bean. Você também pode carregar beans nesta classe usando a anotação @Bean
9. @Bean
A anotação @Bean indica que o objeto retornado pelo método é injetado no contêiner Spring, facilitando a recuperação posterior do objeto no contêiner para simplificar o desenvolvimento. É frequentemente usada em conjunto com a anotação @Configuration. Acredito que você veja essa anotação com frequência, então não vou me estender aqui~
Agora que falamos sobre plugins de paginação, vamos dar uma olhada em seu uso básico.
@Test
void test01() {
//Definir parâmetros de paginação
Page page = new Page< >( 1, 3);
userMapper.selectPage (page, null);
//Obter dados de paginação
List list = page.getRecords ();
list.forEach ( System.out :: println );
System.out.println ("Página atual:" + page.getCurrent ());
System.out.println ("Número de itens exibidos por página: " + page.getSize ());
System.out.println ("Total de registros:" + page.getTotal ());
System.out.println ("Total de páginas: " + page.getPages ());
System.out.println ("Existe página anterior:" + page.hasPrevious ());
System.out.println ("Existe próxima página: " + page.hasNext ());
}
Resultado da execução:
10. @Param
Ao usar uma instrução de paginação personalizada:
@Mapper
@Repository
public interface UserMapper extends BaseMapper {
/**
* Consultar informações do usuário por idade e paginar
* @param page
* @param age
* @return
*/
Page selectPageByAge ( Page page, @Param("age") Integer age);
}
@Param é fornecido pelo MyBatis. Como anotação da camada Dao, é usado para passar parâmetros, permitindo a correspondência com o nome do campo no SQL, o que simplifica o desenvolvimento~
11. @Version
Ao estudarmos bloqueio otimista, certamente já vimos o seguinte código:
@Data
@TableName("t_product")
public class Product {
private Long id;
private String name;
private Integer price;
@Version
private Integer version;
}
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor =
new MybatisPlusInterceptor ( );
//Plugin de paginação
interceptor.addInnerInterceptor
(new PaginationInnerInterceptor ( DbType.MYSQL ));
//Plugin de bloqueio otimista
interceptor.addInnerInterceptor (new OptimisticLockerInnerInterceptor ());
return interceptor;
}
}
E esta anotação @Version é fundamental para implementar o bloqueio otimista. Quando os dados no banco de dados precisam ser atualizados, como o preço, o version será incrementado em 1. Se o version na cláusula where estiver incorreto, a atualização falhará.
Anotações comuns do MyBatis — @EnumValue
@Getter
public enum SexEnum {
MALE(1, "ç·"),
FEMALE(2, "女");
@EnumValue
private Integer sex;
private String sexName;
SexEnum(Integer sex, String sexName) {
this.sex = sex;
this.sexName = sexName;
}
}
mybatis -plus:
global-config:
banner: false
db -config:
# Configurar o prefixo padrão da tabela de operações do MyBatis-Plus
table-prefix: "t_"
# Configurar a estratégia de chave primária do MyBatis-Plus
id-type: auto
# Configurar logs do MyBatis
configuration:
log - impl : org.apache.ibatis.logging.stdout.StdOutImpl
# Configurar o pacote correspondente ao alias de tipo
type-aliases-package: cabbage.pojo
# Configurar varredura de enumerações gerais
type- enums - package: cabbage.pojo
O valor do atributo identificado pela anotação @EnumValue será armazenado no banco de dados, equivalente à instrução INSERT INTO t_user ( username, age, sex ) VALUES ( ?, ?, ? )
Parâmetros: Enum ( String), 20(Integer), 1(Integer)
Bem, pessoal, as anotações comuns do MyBatis-Plus foram praticamente todas explicadas. Acredito que vocês já puderam sentir a conveniência desse framework. Espero que o apoiem ativamente. Se acharem que a escrita do autor é boa, não deixem de curtir, compartilhar e favoritar~~
2. Poderoso: MyBatis e três métodos de consulta streaming
Anotações comuns do MyBatis-Plus
As anotações comuns do MyBatis-Plus que aprendemos juntos ao longo dos anos
I. Anotações comuns do MyBatis-Plus — Introdução
Recentemente estudei o MyBatis-Plus e agora vou revisar com você quais anotações usamos frequentemente durante o aprendizado, quais são as funções dessas anotações e como utilizá-las. Especialmente indicado para iniciantes em aprendizado e veteranos em revisão~
Sem mais delongas, vamos começar!
2. Introdução ao MyBatis-Plus
MyBatis-Plus (MP, abreviado) é uma ferramenta de aprimoramento para o MyBatis. Ele apenas aprimora, sem alterar a base do MyBatis. Foi criado para simplificar o desenvolvimento e aumentar a eficiência.
Sua visão é ser o melhor parceiro do MyBatis!
Endereço oficial: https://baomidou.com/
Endereço da documentação: https://baomidou.com/pages/24112f
3. Anotações comuns do MyBatis — Anotações mais utilizadas
1. @MapperScan
@SpringBootApplication _
@MapperScan ( " com.cabbage.mapper " )
public class Mybatisplus01Application {
public static void main( String[] args ) {
SpringApplication.run ( Mybatisplus01Application.class, args );
}
}
Combinando o código e as imagens, é possível perceber: a anotação @MapperScan é usada para escanear o arquivo de mapeamento do mapper, e somente após seu uso podemos utilizar os diversos métodos fornecidos oficialmente.
2. @Mapper
@Mapper
@Repository
public interface UserMapper extends BaseMapper
/**
* Consulta para mapear coleção por id
* @param id
* @return
*/
Map< String,Object > selectMapById (Long id);
}
Por que estou apresentando esta anotação pela segunda vez? Porque @Mapper atua sobre a classe de entidade no banco de dados, não sendo necessário escrever novamente a anotação @MapperScan. A diferença entre elas é que @Mapper só pode mapear uma classe de entidade, enquanto @MapperScan pode mapear todas as classes de entidade dentro de um pacote inteiro. Mais abrangente e mais fácil de operar.
3. @TableName
Primeiro, observe o seguinte código:
@Data
//Define o nome da tabela correspondente à classe de entidade
@TableName("t_user")
public class User {
@TableId(value = "id",type = IdType.AUTO)
private Long uid;
@TableField(value = "name")
private String name;
private Integer age;
private String email;
@TableField(value = "is_deleted")
@TableLogic
private Integer isDeleted ;
}

Como todos sabem, quando o nome da classe de entidade não corresponde ao nome da tabela a ser operada, um erro será gerado, e a anotação @TableName pode nos ajudar a resolver esse problema. O nome da minha tabela no banco de dados é t_user, e o nome da classe de entidade é User — basta escrever @TableName("t_user") acima do nome da classe.
4. @Data
Esta anotação também simplifica bastante nosso desenvolvimento. Por quê? Porque, ao usar esta anotação, você pode omitir getter(), setter(), toString() e sobrescrever os métodos equals() e hashCode() da classe. Surpreendente, não é?
5. @TableId
Quando o MyBatis-Plus executa operações de inserção, exclusão, alteração e consulta, ele usa id como coluna de chave primária por padrão e, ao inserir dados, a estratégia padrão
baseada no algoritmo snowflake gera o id. O algoritmo snowflake não será explicado aqui.
Ao usar a declaração @TableId(value = "id"), se a chave primária na classe de entidade e na tabela não for id, mas outro campo, como uid no código, o MyBatis-Plus identificará automaticamente uid como a coluna de chave primária; caso contrário, o seguinte erro será gerado:
Ao usar a declaração @TableId(value = "id", type = IdType.AUTO), indica-se o uso da estratégia de incremento automático do banco de dados. Atenção: para este tipo, certifique-se de que o banco de dados esteja configurado com incremento automático de id, caso contrário, a configuração será inválida!
É claro que a função do @TableId também pode ser definida no arquivo de configuração application.yml, conforme abaixo:
mybatis -plus:
global-config:
banner: false
db -config:
# Configurar o prefixo padrão da tabela de operações do MyBatis-Plus
table-prefix: "t_"
# Configurar a estratégia de chave primária do MyBatis-Plus
id-type: auto
# Configurar logs do MyBatis
configuration:
log - impl : org.apache.ibatis.logging.stdout.StdOutImpl
6. @TableField
Quando o MyBatis-Plus executa uma instrução SQL, é necessário garantir que o nome do atributo na classe de entidade seja igual ao nome do campo na tabela; caso contrário, um erro será gerado. A declaração @TableField(value = "is_deleted") indica que o campo is_deleted na tabela do banco de dados corresponde ao campo isDeleted na classe de entidade.
Observação:
Se os atributos na classe de entidade usam o estilo de nomenclatura camelCase e os campos na tabela usam o estilo de nomenclatura com underscore
Por exemplo, atributo da classe de entidade userName, campo da tabela user_name — o MyBatis-Plus converterá automaticamente o estilo underscore para o estilo camelCase
Se os atributos na classe de entidade e os campos na tabela não atenderem às condições acima, como o atributo da classe de entidade name e o campo da tabela username, é necessário usar @TableField("username") no atributo da classe de entidade para definir o nome do campo correspondente ao atributo
7. @TableLogic
Antes de falar sobre esta anotação, vamos primeiro entender a exclusão lógica.
Exclusão física: exclusão real, remove os dados correspondentes do banco de dados; após isso, os dados excluídos não podem mais ser consultados
Exclusão lógica: exclusão simulada, altera o status do campo de dados correspondente que indica se o registro foi excluído para "status de excluído"; o registro de dados ainda pode ser visualizado no banco de dados
Cenário de uso: recuperação de dados é possível
Na minha tabela do banco de dados, quando is_delete é 1, significa exclusão lógica; quando is_delete é 0, significa que não houve exclusão
A anotação @TableLogic indica que as propriedades na classe são propriedades de exclusão lógica
Observação:
Ao testar exclusões lógicas, o que realmente é executado é uma modificação: UPDATE t_user SET is_deleted =1 WHERE id=? AND is_deleted =0
Ao testar a função de consulta, os dados marcados como excluídos não serão consultados por padrão: SELECT id,username AS name,age,email,is_deleted FROM t_user WHERE is_deleted =0
Ao aprender sobre o plugin de paginação do MyBatis-Plus, precisamos configurar o interceptador. Veja o código:
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor ( ) {
MybatisPlusInterceptor interceptor =
new MybatisPlusInterceptor ( );
interceptor.addInnerInterceptor
(new PaginationInnerInterceptor ( DbType.MYSQL ));
return interceptor;
}
}
8. @Configuration
Acredito que você já tenha visto esta anotação muitas vezes e possa estar um pouco impaciente, mas ainda quero mencioná-la aqui: a classe que usa esta anotação representa uma classe de configuração, e a própria classe também é um bean. Você também pode carregar beans nesta classe usando a anotação @Bean
9. @Bean
A anotação @Bean indica que o objeto retornado pelo método é injetado no contêiner Spring, facilitando a recuperação posterior do objeto no contêiner para simplificar o desenvolvimento. É frequentemente usada em conjunto com a anotação @Configuration. Acredito que você veja essa anotação com frequência, então não vou me estender aqui~
Agora que falamos sobre plugins de paginação, vamos dar uma olhada em seu uso básico.
@Test
void test01() {
//Definir parâmetros de paginação
Page
userMapper.selectPage (page, null);
//Obter dados de paginação
List
list.forEach ( System.out :: println );
System.out.println ("Página atual:" + page.getCurrent ());
System.out.println ("Número de itens exibidos por página: " + page.getSize ());
System.out.println ("Total de registros:" + page.getTotal ());
System.out.println ("Total de páginas: " + page.getPages ());
System.out.println ("Existe página anterior:" + page.hasPrevious ());
System.out.println ("Existe próxima página: " + page.hasNext ());
}
Resultado da execução:
10. @Param
Ao usar uma instrução de paginação personalizada:
@Mapper
@Repository
public interface UserMapper extends BaseMapper
/**
* Consultar informações do usuário por idade e paginar
* @param page
* @param age
* @return
*/
Page
}
@Param é fornecido pelo MyBatis. Como anotação da camada Dao, é usado para passar parâmetros, permitindo a correspondência com o nome do campo no SQL, o que simplifica o desenvolvimento~
11. @Version
Ao estudarmos bloqueio otimista, certamente já vimos o seguinte código:
@Data
@TableName("t_product")
public class Product {
private Long id;
private String name;
private Integer price;
@Version
private Integer version;
}
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor =
new MybatisPlusInterceptor ( );
//Plugin de paginação
interceptor.addInnerInterceptor
(new PaginationInnerInterceptor ( DbType.MYSQL ));
//Plugin de bloqueio otimista
interceptor.addInnerInterceptor (new OptimisticLockerInnerInterceptor ());
return interceptor;
}
}
E esta anotação @Version é fundamental para implementar o bloqueio otimista. Quando os dados no banco de dados precisam ser atualizados, como o preço, o version será incrementado em 1. Se o version na cláusula where estiver incorreto, a atualização falhará.
Anotações comuns do MyBatis — @EnumValue
@Getter
public enum SexEnum {
MALE(1, "ç·"),
FEMALE(2, "女");
@EnumValue
private Integer sex;
private String sexName;
SexEnum(Integer sex, String sexName) {
this.sex = sex;
this.sexName = sexName;
}
}
mybatis -plus:
global-config:
banner: false
db -config:
# Configurar o prefixo padrão da tabela de operações do MyBatis-Plus
table-prefix: "t_"
# Configurar a estratégia de chave primária do MyBatis-Plus
id-type: auto
# Configurar logs do MyBatis
configuration:
log - impl : org.apache.ibatis.logging.stdout.StdOutImpl
# Configurar o pacote correspondente ao alias de tipo
type-aliases-package: cabbage.pojo
# Configurar varredura de enumerações gerais
type- enums - package: cabbage.pojo
O valor do atributo identificado pela anotação @EnumValue será armazenado no banco de dados, equivalente à instrução INSERT INTO t_user ( username, age, sex ) VALUES ( ?, ?, ? )
Parâmetros: Enum ( String), 20(Integer), 1(Integer)
4. Anotações comuns do MyBatis — Resumo
Bem, pessoal, as anotações comuns do MyBatis-Plus foram praticamente todas explicadas. Acredito que vocês já puderam sentir a conveniência desse framework. Espero que o apoiem ativamente. Se acharem que a escrita do autor é boa, não deixem de curtir, compartilhar e favoritar~~
Artigos relacionados
-
6 tecnologias opcionais para armazenamento de dados
Equipe da Base de Conhecimento
Explorar mais ofertas especiais
-
Short Message Service (SMS) e Serviço de e-mail
Pacote de 50.000 e-mails a partir de US$ 1,99; 120 mensagens curtas a partir de apenas US$ 1,00
