CRUD для расписания курсов с использованием MyBatis

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

Введение

В этом проекте вы научитесь выполнять операции CRUD (Create, Read, Update, Delete) с таблицей расписания курсов с использованием MyBatis, популярного Java-фреймворка для работы с данными.

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

Предварительный просмотр таблицы расписания курсов

Предварительный просмотр таблицы расписания курсов

🎯 Задачи

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

  • настраивать проект и настраивать необходимые зависимости;
  • улучшать класс сущности Course, добавляя свойства, конструкторы, методы setter/getter и другое содержимое;
  • улучшать файл конфигурации MyBatis mybatis-config.xml;
  • реализовывать интерфейс CourseMapper и соответствующие методы;
  • реализовывать SQL-отображение в файле CourseMapper.xml;
  • реализовывать тестовые случаи в файле MyBatisTest.java.

🏆 Достижения

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

  • использовать MyBatis для взаимодействия с базой данных MySQL;
  • определять классы сущностей и настраивать файлы отображения MyBatis;
  • выполнять операции CRUD с использованием MyBatis;
  • писать юнит-тесты для проверки функциональности приложения.

Настройка проекта

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

  1. Откройте файл pom.xml в проекте MyBatisCourseDemo02.
  2. Добавьте следующие зависимости в раздел <dependencies>:
<!-- MyBatis jar -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.6</version>
    </dependency>

    <!-- MySQL database driver jar -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.16</version>
    </dependency>
  1. Добавьте следующие свойства в раздел <properties> для настройки кодировки символов и версии JDK:
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
  1. Добавьте следующий раздел <build> для включения XML-отображений в classpath:
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

Улучшить класс сущности

В этом шаге вы улучшите класс сущности Course, добавив свойства, конструкторы, методы setter/getter и другое содержимое.

  1. Откройте файл Course.java в директории /src/main/java/org/labex/pojo.
  2. Добавьте следующие свойства в класс Course:
    private int cNo;
    private String cName;
    private String teacher;
  1. Добавьте следующий конструктор:
    public Course() {

    }

    public Course(int cNo, String cName, String teacher) {
        this.cNo = cNo;
        this.cName = cName;
        this.teacher = teacher;
    }
  1. Добавьте следующие методы getter и setter:
    public int getCNo() {
        return cNo;
    }

    public void setCNo(int cNo) {
        this.cNo = cNo;
    }

    public String getCName() {
        return cName;
    }

    public void setCName(String cName) {
        this.cName = cName;
    }

    public String getTeacher() {
        return teacher;
    }

    public void setTeacher(String teacher) {
        this.teacher = teacher;
    }
  1. Добавьте следующий метод toString():
    @Override
    public String toString() {
        return "Course number: " + this.cNo + "\tCourse name: " + this.cName + "\tTeacher: " + this.teacher;
    }

Улучшить конфигурацию MyBatis

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

  1. Откройте файл mybatis-config.xml в директории src/main/resources.
  2. Добавьте следующий раздел <typeAliases> для определения псевдонимов для классов сущностей:
    <typeAliases>
        <package name="org.labex.pojo"/>
    </typeAliases>
  1. Настройте среду数据源 в разделе <environments>:
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${mysql.driver}" />
                <property name="url" value="${mysql.url}" />
                <property name="username" value="${mysql.username}" />
                <property name="password" value="${mysql.password}" />
            </dataSource>
        </environment>
    </environments>
  1. Зарегистрируйте файл SQL-отображения CourseMapper.xml в разделе <mappers>:
    <mappers>
        <package name="org.labex.mapper" />
    </mappers>

Реализовать интерфейс CourseMapper

В этом шаге вы реализуете интерфейс CourseMapper и соответствующие методы.

  1. Откройте файл CourseMapper.java в пакете org.labex.mapper.
  2. Добавьте следующие методы в интерфейс CourseMapper:
import java.util.List;

import org.labex.pojo.Course;

public interface CourseMapper {

    /**
     * Запросить всю информацию о курсах
     */
    public List<Course> queryAllCourse();

    /**
     * Вставить новый курс
     * @param course
     */
    public int insertCourse(Course course);

    /**
     * Обновить информацию о курсе
     * @param course
     */
    public int updateCourse(Course course);

    /**
     * Удалить информацию о курсе по номеру курса
     * @param course
     */
    public int deleteCourse(int cNo);
}

Реализовать SQL - маппинг

В этом шаге вы реализуете SQL-отображение в файле CourseMapper.xml.

  1. Откройте файл CourseMapper.xml в директории src/main/java/org/labex/mapper.
  2. Добавьте следующие SQL-отображение инструкции:
    <!-- Получить всю информацию о курсах -->
    <select id="queryAllCourse" resultType="org.labex.pojo.Course">
        select * from course
    </select>

    <!-- Вставить новый курс -->
    <insert id="insertCourse" parameterType="org.labex.pojo.Course">
        insert into course(cNo,cName,teacher)
        values(#{cNo},#{cName},#{teacher})
    </insert>

    <!-- Обновить информацию о курсе на основе номера курса -->
    <update id="updateCourse" parameterType="org.labex.pojo.Course">
        update course set cName=#{cName},teacher=#{teacher}
        where cNo=#{cNo}
    </update>

    <!-- Удалить информацию о курсе на основе номера курса -->
    <delete id="deleteCourse" parameterType="int">
        delete from course where cNo=#{cNo}
    </delete>

Реализовать тестовые случаи

В этом шаге вы реализуете тестовые случаи в файле MyBatisTest.java.

  1. Откройте файл MyBatisTest.java в директории /src/test/java/org/labex/test.
  2. Добавьте следующие тестовые методы:
import java.io.IOException;
import java.io.Reader;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
import org.labex.mapper.CourseMapper;
import org.labex.pojo.Course;

public class MyBatisTest {

    SqlSessionFactory sessionFactory = null;
    SqlSession session = null;

    @Before
    public void before() throws IOException{
        String resource = "mybatis-config.xml";
        // Загрузить файл конфигурации MyBatis
        Reader reader = Resources.getResourceAsReader(resource);
        // Создать SqlSessionFactory
        sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        // Создать объект SqlSession, способный выполнять SQL-запросы в файлах SQL-отображения
        session = sessionFactory.openSession();
    }

    @Test
    public void testSel() throws IOException{
        // Вызвать метод getMapper() в session, чтобы вернуть объект интерфейса
        CourseMapper cMapper = session.getMapper(CourseMapper.class);
        // Выполнить запрос и вернуть все объекты Course
        List<Course> courses = cMapper.queryAllCourse();
        System.out.println(courses);
        session.close();
    }

    @Test
    public void testIns() throws IOException{
        // Вызвать метод getMapper() в session, чтобы вернуть объект интерфейса
        CourseMapper cMapper = session.getMapper(CourseMapper.class);

        Course course = new Course(8,"Искусственный интеллект","Tom");

        int i = cMapper.insertCourse(course);

        session.commit();

        System.out.println((i!=0? "Данные успешно добавлены":"Не удалось добавить данные"));

        session.close();
    }

    @Test
    public void testUpd() throws IOException{
        // Вызвать метод getMapper() в session, чтобы вернуть объект интерфейса
        CourseMapper cMapper = session.getMapper(CourseMapper.class);

        Course course = new Course(1,"Тестирование ПО","Jack");

        int i = cMapper.updateCourse(course);

        session.commit();

        System.out.println((i!=0? "Данные успешно обновлены":"Не удалось обновить данные"));

        session.close();
    }

    @Test
    public void testDEl() throws IOException{
        // Вызвать метод getMapper() в session, чтобы вернуть объект интерфейса
        CourseMapper cMapper = session.getMapper(CourseMapper.class);

        int i = cMapper.deleteCourse(7);

        session.commit();

        System.out.println((i!=0? "Данные успешно удалены":"Не удалось удалить данные"));

        session.close();
    }
}

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

Запуск

Далее скомпилируйте и запустите в терминале, и используйте Maven, чтобы проверить тестовые файлы:

cd MyBatisCourseDemo02
mvn test

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

Изображение не завершенного тестового случая

Результаты выполнения тестов

Резюме

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

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