Введение
В этом проекте вы научитесь добавлять пользовательские свойства в класс сущности и использовать пользовательский обработчик типов для преобразования между значениями 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для представления свойства курса (BooleancProperties, гдеtrueпредставляет обязательный курс, аfalse-选修ный курс) - Как создать пользовательский обработчик типов для преобразования между значениями Boolean и Integer
- Как зарегистрировать пользовательский обработчик типов в файле конфигурации MyBatis
- Как обновить таблицу курсов и
CourseMapperдля использования нового поляcProperties - Как использовать пользовательский обработчик типов для обновления информации о курсах в базе данных
🏆 Достижения
После завершения этого проекта вы сможете:
- Расширить класс
BaseTypeHandlerдля создания пользовательского обработчика типов - Зарегистрировать пользовательский обработчик типов в файле конфигурации MyBatis
- Обновить схему базы данных и соответствующий файл маппера для использования пользовательского поля
- Использовать пользовательский обработчик типов для обновления данных в базе данных
Добавить свойство курса в класс сущности
В этом шаге вы научитесь добавлять свойство в класс сущности Course.java для представления свойства курса (Boolean cProperties, где true представляет обязательный курс, а false -选修ный курс).
Откройте файл
Course.java, расположенный в пакетеorg.lanqiao.pojo.Добавьте приватное поле Boolean
cPropertiesв классCourse:
private Boolean cProperties;
- Сгенерируйте методы
getterиsetterдля поляcProperties:
public Boolean getcProperties() {
return cProperties;
}
public void setcProperties(Boolean cProperties) {
this.cProperties = cProperties;
}
- Обновите конструктор, чтобы включить параметр
cProperties:
public Course(int cNo, String cName, String teacher, Boolean cProperties) {
this.cNo = cNo;
this.cName = cName;
this.teacher = teacher;
this.cProperties = cProperties;
}
- Обновите метод
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.
Создайте новый Java-класс
BooleanAndIntConverterв пакетеorg.lanqiao.converter.Расширьте класс
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.
Откройте файл
mybatis-config.xml, расположенный в корневом каталоге проекта.Добавьте следующую конфигурацию для регистрации пользовательского обработчика типов:
<typeHandlers>
<typeHandler handler="org.lanqiao.converter.BooleanAndIntConverter"/>
</typeHandlers>
Эта конфигурация сообщает MyBatis использовать класс BooleanAndIntConverter для обработки преобразования между значениями Boolean и Integer.
Обновить таблицу Course и маппер
В этом шаге вы научитесь обновлять таблицу курсов и CourseMapper для использования нового поля cProperties.
- Откройте файл
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.
Обновить информацию о курсе
В этом шаге вы научитесь использовать пользовательский обработчик типов для обновления информации о курсе.
Откройте файл
MyBatisTest.java.В методе
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, что означает обязательный курс.
- В методе
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, что означает обязательный курс.
- В методе
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 и использовали пользовательский обработчик типов для обновления информации о курсе в базе данных.
- Протестируйте приложение.
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, чтобы улучшить свои навыки.



