Étendre une entité avec des propriétés personnalisées

JavaJavaBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce projet, vous allez apprendre à ajouter des propriétés personnalisées à une classe d'entité et à utiliser un gestionnaire de type personnalisé pour convertir entre les valeurs booléennes et entières dans une application MyBatis.

👀 Aperçu

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Exécution de org.lanqiao.test.MyBatisTest
Données supprimées avec succès
Données ajoutées avec succès
[Numéro de cours : 1       Nom du cours : Structures de données    Enseignant : Zoe Cours obligatoire : faux, Numéro de cours : 2      Nom du cours : JAVA       Enseignant : William     Cours obligatoire : vrai, Numéro de cours : 3  Nom du cours : Python     Enseignant : Olivia      Cours obligatoire : vrai, Numéro de cours : 4       Nom du cours : C++        Enseignant : Brian  Cours obligatoire : faux, Numéro de cours : 6      Nom du cours : C  Enseignant : Lisa        Cours obligatoire : vrai, Numéro de cours : 8       Nom du cours : Intelligence artificielle       Enseignant : Tom Cours obligatoire : vrai]
Données mises à jour avec succès
Tests exécutés : 4, Échecs : 0, Erreurs : 0, Ignorés : 0, Durée écoulée : 2,119 s
...
cNo     cName   teacher cProperties
1       Tests logiciels        Jack    1
2       JAVA    William 1
3       Python  Olivia  1
4       C++     Brian   0
6       C       Lisa    1
8       Intelligence artificielle Tom     1

🎯 Tâches

Dans ce projet, vous allez apprendre :

  • Comment ajouter une propriété à la classe d'entité Course pour représenter la propriété du cours (booléen cProperties, où vrai représente un cours obligatoire et faux représente un cours facultatif)
  • Comment créer un gestionnaire de type personnalisé pour convertir entre les valeurs booléennes et entières
  • Comment enregistrer le gestionnaire de type personnalisé dans le fichier de configuration MyBatis
  • Comment mettre à jour la table de cours et le CourseMapper pour utiliser le nouveau champ cProperties
  • Comment utiliser le gestionnaire de type personnalisé pour mettre à jour les informations sur les cours dans la base de données

🏆 Réalisations

Après avoir terminé ce projet, vous serez capable de :

  • Étendre la classe BaseTypeHandler pour créer un gestionnaire de type personnalisé
  • Enregistrer un gestionnaire de type personnalisé dans le fichier de configuration MyBatis
  • Mettre à jour le schéma de base de données et le fichier de mapper correspondant pour utiliser un champ personnalisé
  • Utiliser le gestionnaire de type personnalisé pour mettre à jour les données dans la base de données

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL java(("Java")) -.-> java/BasicSyntaxGroup(["Basic Syntax"]) java(("Java")) -.-> java/SystemandDataProcessingGroup(["System and Data Processing"]) java(("Java")) -.-> java/ObjectOrientedandAdvancedConceptsGroup(["Object-Oriented and Advanced Concepts"]) 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{{"Étendre une entité avec des propriétés personnalisées"}} java/classes_objects -.-> lab-300358{{"Étendre une entité avec des propriétés personnalisées"}} java/class_attributes -.-> lab-300358{{"Étendre une entité avec des propriétés personnalisées"}} java/constructors -.-> lab-300358{{"Étendre une entité avec des propriétés personnalisées"}} java/encapsulation -.-> lab-300358{{"Étendre une entité avec des propriétés personnalisées"}} java/annotation -.-> lab-300358{{"Étendre une entité avec des propriétés personnalisées"}} java/jdbc -.-> lab-300358{{"Étendre une entité avec des propriétés personnalisées"}} java/xml_dom4j -.-> lab-300358{{"Étendre une entité avec des propriétés personnalisées"}} java/object_methods -.-> lab-300358{{"Étendre une entité avec des propriétés personnalisées"}} end

Ajouter une propriété de cours à la classe d'entité

Dans cette étape, vous allez apprendre à ajouter une propriété à la classe d'entité Course.java pour représenter la propriété du cours (booléen cProperties, où vrai représente un cours obligatoire et faux représente un cours facultatif).

  1. Ouvrez le fichier Course.java situé dans le package org.lanqiao.pojo.

  2. Ajoutez un champ privé booléen cProperties à la classe Course :

private Boolean cProperties;
  1. Générez les méthodes getter et setter pour le champ cProperties :
public Boolean getcProperties() {
    return cProperties;
}

public void setcProperties(Boolean cProperties) {
    this.cProperties = cProperties;
}
  1. Mettez à jour le constructeur pour inclure le paramètre cProperties :
public Course(int cNo, String cName, String teacher, Boolean cProperties) {
    this.cNo = cNo;
    this.cName = cName;
    this.teacher = teacher;
    this.cProperties = cProperties;
}
  1. Mettez à jour la méthode toString() pour inclure les informations cProperties :
@Override
public String toString() {
    return "Numéro de cours : " + this.cNo + "\tNom du cours : " + this.cName + "\tEnseignant : " + this.teacher + "\tCours obligatoire : " + (this.cProperties? "vrai" : "faux");
}
✨ Vérifier la solution et pratiquer

Créer un gestionnaire de type personnalisé

Dans cette étape, vous allez apprendre à créer un gestionnaire de type personnalisé pour convertir entre les valeurs booléennes et entières.

  1. Créez une nouvelle classe Java BooleanAndIntConverter dans le package org.lanqiao.converter.

  2. Étendez la classe BaseTypeHandler<Boolean> et implémentez les méthodes suivantes :

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;
    }
}

La méthode setNonNullParameter() convertit une valeur booléenne en une valeur entière (1 pour vrai, 0 pour faux), et les méthodes getNullableResult() convertissent une valeur entière en une valeur booléenne (1 pour vrai, 0 pour faux).

✨ Vérifier la solution et pratiquer

Enregistrer le gestionnaire de type personnalisé

Dans cette étape, vous allez apprendre à enregistrer le gestionnaire de type personnalisé dans le fichier de configuration MyBatis mybatis-config.xml.

  1. Ouvrez le fichier mybatis-config.xml situé dans le répertoire racine du projet.

  2. Ajoutez la configuration suivante pour enregistrer le gestionnaire de type personnalisé :

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

Cette configuration indique à MyBatis d'utiliser la classe BooleanAndIntConverter pour gérer la conversion entre les valeurs booléennes et entières.

✨ Vérifier la solution et pratiquer

Mettre à jour la table de cours et le Mapper

Dans cette étape, vous allez apprendre à mettre à jour la table de cours et le CourseMapper pour utiliser le nouveau champ cProperties.

  1. Ouvrez le fichier CourseMapper.xml et mettez à jour les instructions SQL pour utiliser le champ 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>

Les instructions insertCourse et updateCourse incluent désormais le champ cProperties.

✨ Vérifier la solution et pratiquer

Mettre à jour les informations sur le cours

Dans cette étape, vous allez apprendre à utiliser le gestionnaire de type personnalisé pour mettre à jour les informations sur le cours.

  1. Ouvrez le fichier MyBatisTest.java.

  2. Dans la méthode testUpd(), mettez à jour les informations sur le cours pour le cours avec le numéro de cours 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? "Données mises à jour avec succès" : "Échec de la mise à jour des données"));

    session.close();
}

Le champ cProperties est défini sur true, ce qui représente un cours obligatoire.

  1. Dans la méthode testIns(), insérez un nouveau cours avec le numéro de cours 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? "Données ajoutées avec succès" : "Échec de l'ajout des données"));

    session.close();
}

Le champ cProperties est défini sur true, ce qui représente un cours obligatoire.

  1. Dans la méthode testDEl(), supprimez le cours avec le numéro de cours 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? "Données supprimées avec succès" : "Échec de la suppression des données"));

    session.close();
}

Après avoir effectué ces étapes, vous avez ajouté avec succès une propriété de cours à la classe d'entité, créé un gestionnaire de type personnalisé pour convertir entre les valeurs booléennes et entières, et utilisé le gestionnaire de type personnalisé pour mettre à jour les informations sur le cours dans la base de données.

  1. Testez l'application.
cd ~/project/MyBatisCourseDemo02/
mvn test
echo "USE MyBatisDemo; SELECT * FROM course;" | mysql -u root > course_data.txt
cat course_data.txt

La sortie devrait ressembler à ceci :

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.lanqiao.test.MyBatisTest
Données supprimées avec succès
Données ajoutées avec succès
[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]
Données mises à jour avec succès
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
✨ Vérifier la solution et pratiquer

Sommaire

Félicitations ! Vous avez terminé ce projet. Vous pouvez pratiquer plus de laboratoires sur LabEx pour améliorer vos compétences.