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
Coursepara representar a propriedade do curso (BooleanocProperties, ondetruerepresenta um curso obrigatório efalserepresenta 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
CourseMapperpara usar o novo campocProperties - 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
BaseTypeHandlerpara 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).
Abra o arquivo
Course.javalocalizado no pacoteorg.lanqiao.pojo.Adicione um campo privado Booleano
cPropertiesà classeCourse:
private Boolean cProperties;
- Gere os métodos
getteresetterpara o campocProperties:
public Boolean getcProperties() {
return cProperties;
}
public void setcProperties(Boolean cProperties) {
this.cProperties = cProperties;
}
- 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;
}
- Atualize o método
toString()para incluir a informaçãocProperties:
@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.
Crie uma nova classe Java
BooleanAndIntConverterno pacoteorg.lanqiao.converter.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.
Abra o arquivo
mybatis-config.xmllocalizado no diretório raiz do projeto.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.
- Abra o arquivo
CourseMapper.xmle atualize as instruções SQL para usar o campocProperties:
<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.
Abra o arquivo
MyBatisTest.java.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.
- 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.
- 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.
- 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.



