Introducción
En este proyecto, aprenderá a agregar propiedades personalizadas a una clase de entidad y a usar un controlador de tipos personalizado para convertir entre valores Booleanos e enteros en una aplicación MyBatis.
👀 Vista previa
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Ejecutando org.lanqiao.test.MyBatisTest
Datos eliminados correctamente
Datos agregados correctamente
[Número de curso: 1 Nombre del curso: Estructuras de datos Instructor: Zoe Curso obligatorio: falso, Número de curso: 2 Nombre del curso: JAVA Instructor: William Curso obligatorio: verdadero, Número de curso: 3 Nombre del curso: Python Instructor: Olivia Curso obligatorio: verdadero, Número de curso: 4 Nombre del curso: C++ Instructor: Brian Curso obligatorio: falso, Número de curso: 6 Nombre del curso: C Instructor: Lisa Curso obligatorio: verdadero, Número de curso: 8 Nombre del curso: Inteligencia Artificial Instructor: Tom Curso obligatorio: verdadero]
Datos actualizados correctamente
Pruebas ejecutadas: 4, Fallos: 0, Errores: 0, Omisiones: 0, Tiempo transcurrido: 2,119 segundos
...
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
🎯 Tareas
En este proyecto, aprenderá:
- Cómo agregar una propiedad a la clase de entidad
Coursepara representar la propiedad del curso (BooleanocProperties, dondetruerepresenta un curso obligatorio yfalserepresenta un curso optativo) - Cómo crear un controlador de tipos personalizado para convertir entre valores Booleanos y enteros
- Cómo registrar el controlador de tipos personalizado en el archivo de configuración de MyBatis
- Cómo actualizar la tabla de cursos y el
CourseMapperpara usar el nuevo campocProperties - Cómo usar el controlador de tipos personalizado para actualizar la información de cursos en la base de datos
🏆 Logros
Después de completar este proyecto, podrá:
- Extender la clase
BaseTypeHandlerpara crear un controlador de tipos personalizado - Registrar un controlador de tipos personalizado en el archivo de configuración de MyBatis
- Actualizar el esquema de la base de datos y el archivo de mapper correspondiente para usar un campo personalizado
- Usar el controlador de tipos personalizado para actualizar datos en la base de datos
Agregar propiedad de curso a la clase de entidad
En este paso, aprenderá a agregar una propiedad a la clase de entidad Course.java para representar la propiedad del curso (Booleano cProperties, donde true representa un curso obligatorio y false representa un curso optativo).
Abra el archivo
Course.javaubicado en el paqueteorg.lanqiao.pojo.Agregue un campo privado Booleano
cPropertiesa la claseCourse:
private Boolean cProperties;
- Genere los métodos
getterysetterpara el campocProperties:
public Boolean getcProperties() {
return cProperties;
}
public void setcProperties(Boolean cProperties) {
this.cProperties = cProperties;
}
- Actualice el constructor para incluir el 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;
}
- Actualice el método
toString()para incluir la información decProperties:
@Override
public String toString() {
return "Course Number: " + this.cNo + "\tCourse Name: " + this.cName + "\tInstructor: " + this.teacher + "\tCompulsory Course: " + (this.cProperties? "true" : "false");
}
Crear un controlador de tipos personalizado
En este paso, aprenderá a crear un controlador de tipos personalizado para convertir entre valores Booleanos y enteros.
Cree una nueva clase Java
BooleanAndIntConverteren el paqueteorg.lanqiao.converter.Extienda la clase
BaseTypeHandler<Boolean>e implemente los siguientes 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;
}
}
El método setNonNullParameter() convierte un valor Booleano en un valor entero (1 para true, 0 para false), y los métodos getNullableResult() convierten un valor entero en un valor Booleano (1 para true, 0 para false).
Registrar el controlador de tipos personalizado
En este paso, aprenderá a registrar el controlador de tipos personalizado en el archivo de configuración de MyBatis mybatis-config.xml.
Abra el archivo
mybatis-config.xmlubicado en el directorio raíz del proyecto.Agregue la siguiente configuración para registrar el controlador de tipos personalizado:
<typeHandlers>
<typeHandler handler="org.lanqiao.converter.BooleanAndIntConverter"/>
</typeHandlers>
Esta configuración le dice a MyBatis que use la clase BooleanAndIntConverter para manejar la conversión entre valores Booleanos y enteros.
Actualizar la tabla y el mapper de Course
En este paso, aprenderá a actualizar la tabla de cursos y el CourseMapper para usar el nuevo campo cProperties.
- Abra el archivo
CourseMapper.xmly actualice las instrucciones SQL para usar el 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>
Las instrucciones insertCourse y updateCourse ahora incluyen el campo cProperties.
Actualizar la información del curso
En este paso, aprenderá a usar el controlador de tipos personalizado para actualizar la información del curso.
Abra el archivo
MyBatisTest.java.En el método
testUpd(), actualice la información del curso con número de curso 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();
}
El campo cProperties se establece en true, lo que representa un curso obligatorio.
- En el método
testIns(), inserte un nuevo curso con número de curso 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();
}
El campo cProperties se establece en true, lo que representa un curso obligatorio.
- En el método
testDEl(), elimine el curso con número de curso 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();
}
Después de completar estos pasos, ha agregado con éxito una propiedad de curso a la clase de entidad, creado un controlador de tipos personalizado para convertir entre valores Booleanos y enteros y usado el controlador de tipos personalizado para actualizar la información del curso en la base de datos.
- Pruebe la aplicación.
cd ~/project/MyBatisCourseDemo02/
mvn test
echo "USE MyBatisDemo; SELECT * FROM course;" | mysql -u root > course_data.txt
cat course_data.txt
La salida debería ser así:
-------------------------------------------------------
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
Resumen
¡Felicidades! Has completado este proyecto. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.



