[Spring Boot] Use anotações MyBatis para implementar operações de banco de dados

Use anotações MyBatis para implementar operações de banco de dados

MyBatis também fornece um método de anotação. Comparado com o método XML, o método de anotação é mais simples e conveniente e não há necessidade de criar um arquivo de configuração XML. A seguir, dê uma olhada mais de perto em como usar anotações.

1. Semelhanças e diferenças entre XML e anotações

1) O modo de anotação é fácil de usar e tem alta eficiência de desenvolvimento, mas é difícil de manter. Modificar o SQL requer recompilação e empacotamento.

2) O modo XML é fácil de manter, SQL e código são separados e o código é claro e fácil de entender.No entanto, o uso do modo de anotação requer a adição de várias anotações e instruções SQL antes do método, tornando o código menos legível.

3) Embora o modo XML forneça tags completas para implementar instruções SQL complexas, não é tão simples e conveniente quanto julgar diretamente a emenda no código Java.

4) Modo XML: Como o SQL é configurado em um arquivo XML, alguns caracteres especiais precisam ser escapados, por isso é problemático de usar e sujeito a erros.

2. Use anotações MyBatis para implementar consulta de dados

A maior característica do modo de anotação MyBatis é que a configuração XML do Mapper é cancelada.As instruções SQL são definidas no método de interface do Mapper ou no método SQLProvider através de @Insert, @Update, @Select, @Delete e outras anotações, eliminando assim o necessidade de configuração XML.documento. O uso dessas anotações e parâmetros é basicamente consistente com o arquivo de configuração mapper.xml. Vamos demonstrar o uso de anotações MyBatis para implementar consulta de dados.

2.1 Modificar arquivo de configuração

Primeiro crie um projeto Spring Boot e o processo de integração do MyBatis é o mesmo da configuração XML.

Para usar o método de anotação, você só precisa especificar o caminho do pacote da classe de entidade em application.properties, e os demais permanecem inalterados. O exemplo de configuração é o seguinte:

#mapper.xml mapper接口的包路径
MyBatis.type-aliases-package=com.example.ysxq

#数据库连接
spring.datasource.url=jdbc:mysql://Localhost:3306/ceshi?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

No exemplo acima, o caminho do pacote e a fonte de dados da interface do mapeador estão configurados e não há necessidade de configurar o caminho do arquivo mapper.xml.

2.2 Adicionar interface do mapeador

O uso das anotações de instrução SQL fornecidas por MyBatis não requer a criação de um arquivo de mapeamento mapper.xml, a criação de uma classe de interface do mapeador e a adição de métodos relacionados:

public interface StudentMapper {
    
    
    @Select("select * from student")
    List<Student> selectAll();
}

No exemplo acima, usar a anotação @Select para definir a instrução de consulta SQL pode realizar a função de consultar a lista de todos os alunos, sem definir o arquivo de mapeamento mapper.xml.

2.3 Teste de verificação

Adicione um método de teste de unidade para verificar se ele entra em vigor. O código de exemplo é o seguinte:

@Test
    public void testSelectAll() {
    
    
        // 查询
        List<Student> students = studentMapper.selectAll();
        for (Student stu : students) {
    
    
            System.out.println("name:"+stu.getName()+", age:"+stu.getAge());
        }
    }

Clique em Executar teste ou clique com o botão direito no método e selecione Executar 'testSelectAll' para visualizar os resultados do teste de unidade. Os resultados da execução são mostrados na figura.

Insira a descrição da imagem aqui
Os resultados mostram que o método de teste de unidade testSelectAll é executado com êxito e os resultados da consulta correspondentes são gerados. Isso mostra que a função de consultar todas as informações dos alunos foi implementada com sucesso por meio de anotações.

3. Passagem de parâmetros

Acredito que muitas pessoas terão dúvidas: Como o MyBatis passa parâmetros para SQL? Quais são as diferentes formas de passar parâmetros? Vamos apresentar os métodos de passagem de parâmetros das anotações MyBatis, um por um.

3.1 Passando parâmetros diretamente

Para parâmetros simples, você pode usar #{id} diretamente para receber parâmetros variáveis ​​com o mesmo nome. O código de exemplo é o seguinte:

@Select("SELECT * FROM student where id=#{id,jdbcType=VARCHAR}")
Student selectOne(Long id);

No exemplo acima, use #{id} para passar parâmetros variáveis, o que suporta a passagem de vários parâmetros. Observe apenas que os nomes dos parâmetros definidos usando #{} devem ser consistentes com os nomes dos parâmetros no método.

3.2 Use a anotação @Param

A função da anotação @Param é nomear os parâmetros.Depois que os parâmetros são nomeados, os valores dos parâmetros podem ser combinados de acordo com os nomes e os parâmetros podem ser passados ​​​​corretamente para a instrução SQL. Por exemplo, se a anotação for @Param("person"), então o parâmetro será nomeado #{person}. O código de exemplo é o seguinte:

@Select("select * from student where name=#{name} and sex=#{sex}")
Student selectByNameAndSex(@Param("name") String name, @Param("sex") Integer sex);

Se o método tiver vários parâmetros, você não precisa personalizar param. MyBatis pode fornecer nomes personalizados nos parâmetros do método. Os parâmetros são primeiro prefixados com "param" e suas posições de parâmetro são adicionadas como aliases de parâmetro. Por exemplo , #{param1}, #{param2}.

// 默认使用param +参数序号或者0、1,值就是参数的值
@Select("select * from student where name=#{param1} and sex=#{param2}")
Student selectByNameAndSex(String name, Integer sex);

Se não quiser nomear cada parâmetro, você pode usar o parâmetro param. O formato padrão é param+número do parâmetro ou 0, 1, e o valor é o valor do parâmetro.

3.3 Mapeamento de transferência de valor

Quando vários parâmetros precisam ser transmitidos, você também pode considerar o uso do formulário de mapa.

@Select("select * from student where name=#{name} and sex=#{sex}")
Student selectByNameAndSex(Map<String, Object> map);

No exemplo acima, os parâmetros exigidos pela instrução SQL são passados ​​por meio do tipo de mapa, chave é o nome do parâmetro e valor é o valor do parâmetro. MyBatis corresponderá automaticamente aos valores dos parâmetros no mapeamento correspondente.

Ao chamar, basta adicionar os parâmetros ao mapeamento em sequência:

@Map param= new HashMap();
param.put("name", "ysxq");
param.put("sex", 1);
Student student = studentMapper.selectByNameAndSex(param);

3.4 Usando objetos pojo

Usar o objeto pojo para passar parâmetros é um método comum de passar parâmetros.Métodos como insert e update introduzidos anteriormente passam diretamente no objeto de usuário.

@Update({
    
    
     "update student",
     "set name = #{name,jdbcType=VARCHAR},",
     "age = #{age,jdbcType=INTEGER},",
     "sex = #{sex,jdbcType=INTEGER}",
     "where id =#{id,jdbcType=VARCHAR}"
})
void update(Student record);

Para métodos com muitos parâmetros, como insert e update, você pode usar objetos pojo para passar parâmetros. Deve-se observar que o nome e o tipo do parâmetro devem ser consistentes com as propriedades do objeto pojo.

O texto acima descreve as quatro formas de passar parâmetros no MyBatis. Ao utilizá-lo, basta escolher o método de passagem de valor adequado de acordo com os parâmetros do método.

4. Mapeamento de resultados

MyBatis converterá automaticamente o conjunto de resultados da consulta no tipo de dados que precisa ser retornado, mas existem alguns cenários especiais que precisam ser tratados.Por exemplo, o que deve ser feito quando os resultados do retorno da consulta são inconsistentes com o formato de dados esperado?

Isso requer o uso das anotações @Results e @Result. Essas duas anotações podem converter os valores consultados no banco de dados em atributos ou tipos específicos e modificar o conjunto de resultados retornado.Por exemplo, o nome do atributo do valor de retorno do objeto de consulta é inconsistente com o nome do campo ou enumerações são usadas em os atributos do objeto, etc.

    @Select({
    
    
            "select",
            "id, name as student_name,age, sex as student_sex",
            "from student",
            "where id = #{id,jdbcType=VARCHAR}"
    })
    @Results({
    
    
            @Result(column="id",property="id",jdbcType= JdbcType.VARCHAR,id=true),
            @Result(column="student_name",property="name",jdbcType=JdbcType.VARCHAR),
            @Result(column="student_sex",property="sex",jdbcType=JdbcType.TIMESTAMP)
    })
    Student selectById(Long id);

No exemplo acima, o nome do campo student_name no conjunto de resultados da consulta é inconsistente com o atributo name definido pela classe de entidade Student, portanto o Result é obrigatório para a conversão; enquanto o nome da idade é consistente, portanto o Result não é obrigatório para a conversão .

Acho que você gosta

Origin blog.csdn.net/weixin_45627039/article/details/132609088
Recomendado
Clasificación