Extendiendo la entidad con propiedades personalizadas

JavaJavaBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

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 Course para representar la propiedad del curso (Booleano cProperties, donde true representa un curso obligatorio y false representa 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 CourseMapper para usar el nuevo campo cProperties
  • 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 BaseTypeHandler para 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

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java/BasicSyntaxGroup -.-> java/type_casting("Type Casting") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/classes_objects("Classes/Objects") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/class_attributes("Class Attributes") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/constructors("Constructors") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/encapsulation("Encapsulation") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/annotation("Annotation") java/ObjectOrientedandAdvancedConceptsGroup -.-> java/jdbc("JDBC") java/SystemandDataProcessingGroup -.-> java/xml_dom4j("XML/Dom4j") java/SystemandDataProcessingGroup -.-> java/object_methods("Object Methods") subgraph Lab Skills java/type_casting -.-> lab-300358{{"Extendiendo la entidad con propiedades personalizadas"}} java/classes_objects -.-> lab-300358{{"Extendiendo la entidad con propiedades personalizadas"}} java/class_attributes -.-> lab-300358{{"Extendiendo la entidad con propiedades personalizadas"}} java/constructors -.-> lab-300358{{"Extendiendo la entidad con propiedades personalizadas"}} java/encapsulation -.-> lab-300358{{"Extendiendo la entidad con propiedades personalizadas"}} java/annotation -.-> lab-300358{{"Extendiendo la entidad con propiedades personalizadas"}} java/jdbc -.-> lab-300358{{"Extendiendo la entidad con propiedades personalizadas"}} java/xml_dom4j -.-> lab-300358{{"Extendiendo la entidad con propiedades personalizadas"}} java/object_methods -.-> lab-300358{{"Extendiendo la entidad con propiedades personalizadas"}} end

Agregar una 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).

  1. Abra el archivo Course.java ubicado en el paquete org.lanqiao.pojo.

  2. Agregue un campo privado Booleano cProperties a la clase Course:

private Boolean cProperties;
  1. Genere los métodos getter y setter para el campo cProperties:
public Boolean getcProperties() {
    return cProperties;
}

public void setcProperties(Boolean cProperties) {
    this.cProperties = cProperties;
}
  1. 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;
}
  1. Actualice el método toString() para incluir la información de cProperties:
@Override
public String toString() {
    return "Course Number: " + this.cNo + "\tCourse Name: " + this.cName + "\tInstructor: " + this.teacher + "\tCompulsory Course: " + (this.cProperties? "true" : "false");
}
✨ Revisar Solución y Practicar

Crear un controlador de tipos personalizado

En este paso, aprenderá a crear un controlador de tipos personalizado para convertir entre valores Booleanos y enteros.

  1. Cree una nueva clase Java BooleanAndIntConverter en el paquete org.lanqiao.converter.

  2. 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).

✨ Revisar Solución y Practicar

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.

  1. Abra el archivo mybatis-config.xml ubicado en el directorio raíz del proyecto.

  2. 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.

✨ Revisar Solución y Practicar

Actualizar la tabla de cursos y el mapper

En este paso, aprenderá a actualizar la tabla de cursos y el CourseMapper para usar el nuevo campo cProperties.

  1. Abra el archivo CourseMapper.xml y actualice las instrucciones SQL para usar el 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>

Las instrucciones insertCourse y updateCourse ahora incluyen el campo cProperties.

✨ Revisar Solución y Practicar

Actualizar la información del curso

En este paso, aprenderá a usar el controlador de tipos personalizado para actualizar la información del curso.

  1. Abra el archivo MyBatisTest.java.

  2. 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.

  1. 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.

  1. 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.

  1. 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
✨ Revisar Solución y Practicar

Resumen

¡Felicidades! Has completado este proyecto. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.