Расширение сущности с пользовательскими свойствами

JavaBeginner
Практиковаться сейчас

Введение

В этом проекте вы научитесь добавлять пользовательские свойства в класс сущности и использовать пользовательский обработчик типов для преобразования между значениями Boolean и Integer в приложении MyBatis.

👀 Предварительный просмотр

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

🎯 Задачи

В этом проекте вы научитесь:

  • Как добавить свойство в класс сущности Course для представления свойства курса (Boolean cProperties, где true представляет обязательный курс, а false -选修ный курс)
  • Как создать пользовательский обработчик типов для преобразования между значениями Boolean и Integer
  • Как зарегистрировать пользовательский обработчик типов в файле конфигурации MyBatis
  • Как обновить таблицу курсов и CourseMapper для использования нового поля cProperties
  • Как использовать пользовательский обработчик типов для обновления информации о курсах в базе данных

🏆 Достижения

После завершения этого проекта вы сможете:

  • Расширить класс BaseTypeHandler для создания пользовательского обработчика типов
  • Зарегистрировать пользовательский обработчик типов в файле конфигурации MyBatis
  • Обновить схему базы данных и соответствующий файл маппера для использования пользовательского поля
  • Использовать пользовательский обработчик типов для обновления данных в базе данных

Добавить свойство курса в класс сущности

В этом шаге вы научитесь добавлять свойство в класс сущности Course.java для представления свойства курса (Boolean cProperties, где true представляет обязательный курс, а false -选修ный курс).

  1. Откройте файл Course.java, расположенный в пакете org.lanqiao.pojo.

  2. Добавьте приватное поле Boolean cProperties в класс Course:

private Boolean cProperties;
  1. Сгенерируйте методы getter и setter для поля cProperties:
public Boolean getcProperties() {
    return cProperties;
}

public void setcProperties(Boolean cProperties) {
    this.cProperties = cProperties;
}
  1. Обновите конструктор, чтобы включить параметр cProperties:
public Course(int cNo, String cName, String teacher, Boolean cProperties) {
    this.cNo = cNo;
    this.cName = cName;
    this.teacher = teacher;
    this.cProperties = cProperties;
}
  1. Обновите метод toString(), чтобы включить информацию о cProperties:
@Override
public String toString() {
    return "Course Number: " + this.cNo + "\tCourse Name: " + this.cName + "\tInstructor: " + this.teacher + "\tCompulsory Course: " + (this.cProperties? "true" : "false");
}

Создать пользовательский обработчик типов

В этом шаге вы научитесь создавать пользовательский обработчик типов для преобразования между значениями Boolean и Integer.

  1. Создайте новый Java-класс BooleanAndIntConverter в пакете org.lanqiao.converter.

  2. Расширьте класс BaseTypeHandler<Boolean> и реализуйте следующие методы:

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

Метод setNonNullParameter() преобразует значение Boolean в значение Integer (1 для true, 0 для false), а методы getNullableResult() преобразуют значение Integer в значение Boolean (1 для true, 0 для false).

Зарегистрировать пользовательский обработчик типов

В этом шаге вы научитесь регистрировать пользовательский обработчик типов в файле конфигурации MyBatis mybatis-config.xml.

  1. Откройте файл mybatis-config.xml, расположенный в корневом каталоге проекта.

  2. Добавьте следующую конфигурацию для регистрации пользовательского обработчика типов:

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

Эта конфигурация сообщает MyBatis использовать класс BooleanAndIntConverter для обработки преобразования между значениями Boolean и Integer.

Обновить таблицу Course и маппер

В этом шаге вы научитесь обновлять таблицу курсов и CourseMapper для использования нового поля cProperties.

  1. Откройте файл CourseMapper.xml и обновите SQL-запросы для использования поля 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>

Теперь в запросах insertCourse и updateCourse включено поле cProperties.

Обновить информацию о курсе

В этом шаге вы научитесь использовать пользовательский обработчик типов для обновления информации о курсе.

  1. Откройте файл MyBatisTest.java.

  2. В методе testUpd() обновите информацию о курсе с номером курса 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();
}

Поле cProperties установлено в значение true, что означает обязательный курс.

  1. В методе testIns() вставьте новый курс с номером курса 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();
}

Поле cProperties установлено в значение true, что означает обязательный курс.

  1. В методе testDEl() удалите курс с номером курса 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();
}

После завершения этих шагов вы успешно добавили свойство курса в класс сущности, создали пользовательский обработчик типов для преобразования между значениями Boolean и Integer и использовали пользовательский обработчик типов для обновления информации о курсе в базе данных.

  1. Протестируйте приложение.
cd ~/project/MyBatisCourseDemo02/
mvn test
echo "USE MyBatisDemo; SELECT * FROM course;" | mysql -u root > course_data.txt
cat course_data.txt

Вывод должен выглядеть так:

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

Резюме

Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.

✨ Проверить решение и практиковаться✨ Проверить решение и практиковаться✨ Проверить решение и практиковаться✨ Проверить решение и практиковаться✨ Проверить решение и практиковаться