Estendendo Entidades com Propriedades Personalizadas

JavaBeginner
Pratique Agora

Introdução

Neste projeto, você aprenderá como adicionar propriedades personalizadas a uma classe de entidade e usar um manipulador de tipo personalizado para converter entre valores Booleanos e Inteiros em uma aplicação MyBatis.

👀 Visualização

-------------------------------------------------------
 T E S T E S
-------------------------------------------------------
Running org.lanqiao.test.MyBatisTest
Data deleted successfully
Data added successfully
[Course Number: 1       Course Name: Data Structures    Instructor: Zoe Compulsory Course: false, Course Number: 2      Course Name: JAVA       Instructor: William     Compulsory Course: true, Course Number: 3  Course Name: Python     Instructor: Olivia      Compulsory Course: true, Course Number: 4       Course Name: C++        Instructor: Brian  Compulsory Course: false, Course Number: 6      Course Name: C  Instructor: Lisa        Compulsory Course: true, Course Number: 8       Course Name: Artificial Intelligence       Instructor: Tom Compulsory Course: true]
Data updated successfully
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.119 sec
...
cNo     cName   teacher cProperties
1       Software Testing        Jack    1
2       JAVA    William 1
3       Python  Olivia  1
4       C++     Brian   0
6       C       Lisa    1
8       Artificial Intelligence Tom     1

🎯 Tarefas

Neste projeto, você aprenderá:

  • Como adicionar uma propriedade à classe de entidade Course para representar a propriedade do curso (Booleano cProperties, onde true representa um curso obrigatório e false representa um curso eletivo)
  • Como criar um manipulador de tipo personalizado para converter entre valores Booleanos e Inteiros
  • Como registrar o manipulador de tipo personalizado no arquivo de configuração do MyBatis
  • Como atualizar a tabela de cursos e o CourseMapper para usar o novo campo cProperties
  • Como usar o manipulador de tipo personalizado para atualizar as informações do curso no banco de dados

🏆 Conquistas

Após concluir este projeto, você será capaz de:

  • Estender a classe BaseTypeHandler para criar um manipulador de tipo personalizado
  • Registrar um manipulador de tipo personalizado no arquivo de configuração do MyBatis
  • Atualizar o esquema do banco de dados e o arquivo mapper correspondente para usar um campo personalizado
  • Usar o manipulador de tipo personalizado para atualizar dados no banco de dados

Adicionar a Propriedade 'Curso' à Classe de Entidade

Nesta etapa, você aprenderá como adicionar uma propriedade à classe de entidade Course.java para representar a propriedade do curso (Booleano cProperties, onde true representa um curso obrigatório e false representa um curso eletivo).

  1. Abra o arquivo Course.java localizado no pacote org.lanqiao.pojo.

  2. Adicione um campo privado Booleano cProperties à classe Course:

private Boolean cProperties;
  1. Gere os métodos getter e setter para o campo cProperties:
public Boolean getcProperties() {
    return cProperties;
}

public void setcProperties(Boolean cProperties) {
    this.cProperties = cProperties;
}
  1. Atualize o construtor para incluir o parâmetro cProperties:
public Course(int cNo, String cName, String teacher, Boolean cProperties) {
    this.cNo = cNo;
    this.cName = cName;
    this.teacher = teacher;
    this.cProperties = cProperties;
}
  1. Atualize o método toString() para incluir a informação cProperties:
@Override
public String toString() {
    return "Course Number: " + this.cNo + "\tCourse Name: " + this.cName + "\tInstructor: " + this.teacher + "\tCompulsory Course: " + (this.cProperties ? "true" : "false");
}

Criar um Custom Type Handler

Nesta etapa, você aprenderá como criar um manipulador de tipo personalizado para converter entre valores Booleanos e Inteiros.

  1. Crie uma nova classe Java BooleanAndIntConverter no pacote org.lanqiao.converter.

  2. Estenda a classe BaseTypeHandler<Boolean> e implemente os seguintes métodos:

public class BooleanAndIntConverter extends BaseTypeHandler<Boolean> {

    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, Boolean aBoolean, JdbcType jdbcType) throws SQLException {
        preparedStatement.setInt(i, aBoolean ? 1 : 0);
    }

    @Override
    public Boolean getNullableResult(ResultSet resultSet, String s) throws SQLException {
        int result = resultSet.getInt(s);
        return result == 1;
    }

    @Override
    public Boolean getNullableResult(ResultSet resultSet, int i) throws SQLException {
        int result = resultSet.getInt(i);
        return result == 1;
    }

    @Override
    public Boolean getNullableResult(CallableStatement callableStatement, int i) throws SQLException {
        int result = callableStatement.getInt(i);
        return result == 1;
    }
}

O método setNonNullParameter() converte um valor Booleano em um valor Inteiro (1 para true, 0 para false), e os métodos getNullableResult() convertem um valor Inteiro em um valor Booleano (1 para true, 0 para false).

Registrar o Custom Type Handler

Nesta etapa, você aprenderá como registrar o manipulador de tipo personalizado no arquivo de configuração do MyBatis mybatis-config.xml.

  1. Abra o arquivo mybatis-config.xml localizado no diretório raiz do projeto.

  2. Adicione a seguinte configuração para registrar o manipulador de tipo personalizado:

<typeHandlers>
    <typeHandler handler="org.lanqiao.converter.BooleanAndIntConverter"/>
</typeHandlers>

Esta configuração informa ao MyBatis para usar a classe BooleanAndIntConverter para lidar com a conversão entre valores Booleanos e Inteiros.

Atualizar a Tabela e o Mapper do Curso

Nesta etapa, você aprenderá como atualizar a tabela de cursos e o CourseMapper para usar o novo campo cProperties.

  1. Abra o arquivo CourseMapper.xml e atualize as instruções SQL para usar o campo cProperties:
<insert id="insertCourse" parameterType="org.lanqiao.pojo.Course">
    insert into course(cNo,cName,teacher,cProperties)
    values(#{cNo},#{cName},#{teacher},#{cProperties})
</insert>

<update id="updateCourse" parameterType="org.lanqiao.pojo.Course">
    update course set cName=#{cName},teacher=#{teacher},cProperties=#{cProperties}
    where cNo=#{cNo}
</update>

As instruções insertCourse e updateCourse agora incluem o campo cProperties.

Atualizar as Informações do Curso

Nesta etapa, você aprenderá como usar o manipulador de tipo personalizado para atualizar as informações do curso.

  1. Abra o arquivo MyBatisTest.java.

  2. No método testUpd(), atualize as informações do curso para o curso com o número 1:

@Test
public void testUpd() throws IOException {
    CourseMapper cMapper = session.getMapper(CourseMapper.class);

    Course course = new Course(1, "Software Testing", "Jack", true);

    int i = cMapper.updateCourse(course);

    session.commit();

    System.out.println((i != 0 ? "Data updated successfully" : "Failed to update data"));

    session.close();
}

O campo cProperties é definido como true, o que representa um curso obrigatório.

  1. No método testIns(), insira um novo curso com o número 8:
@Test
public void testIns() throws IOException {
    CourseMapper cMapper = session.getMapper(CourseMapper.class);

    Course course = new Course(8, "Artificial Intelligence", "Tom", true);

    int i = cMapper.insertCourse(course);

    session.commit();

    System.out.println((i != 0 ? "Data added successfully" : "Failed to add data"));

    session.close();
}

O campo cProperties é definido como true, o que representa um curso obrigatório.

  1. No método testDEl(), exclua o curso com o número 7:
@Test
public void testDEl() throws IOException {
    CourseMapper cMapper = session.getMapper(CourseMapper.class);

    int i = cMapper.deleteCourse(7);

    session.commit();

    System.out.println((i != 0 ? "Data deleted successfully" : "Failed to delete data"));

    session.close();
}

Após concluir estas etapas, você adicionou com sucesso uma propriedade de curso à classe de entidade, criou um manipulador de tipo personalizado para converter entre valores Booleanos e Inteiros e usou o manipulador de tipo personalizado para atualizar as informações do curso no banco de dados.

  1. Teste a aplicação.
cd ~/project/MyBatisCourseDemo02/
mvn test
echo "USE MyBatisDemo; SELECT * FROM course;" | mysql -u root > course_data.txt
cat course_data.txt

A saída deve ser semelhante a esta:

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.lanqiao.test.MyBatisTest
Data deleted successfully
Data added successfully
[Course Number: 1       Course Name: Data Structures    Instructor: Zoe Compulsory Course: false, Course Number: 2      Course Name: JAVA       Instructor: William     Compulsory Course: true, Course Number: 3  Course Name: Python     Instructor: Olivia      Compulsory Course: true, Course Number: 4       Course Name: C++        Instructor: Brian  Compulsory Course: false, Course Number: 6      Course Name: C  Instructor: Lisa        Compulsory Course: true, Course Number: 8       Course Name: Artificial Intelligence       Instructor: Tom Compulsory Course: true]
Data updated successfully
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.119 sec
...
cNo     cName   teacher cProperties
1       Software Testing        Jack    1
2       JAVA    William 1
3       Python  Olivia  1
4       C++     Brian   0
6       C       Lisa    1
8       Artificial Intelligence Tom     1

Resumo

Parabéns! Você concluiu este projeto. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.

✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar