강좌 테이블 운영

JavaScriptBeginner
지금 연습하기

소개

이 프로젝트에서는 MyBatis 를 사용하여 코스 테이블에 대한 다양한 작업을 수행하는 방법을 배우게 됩니다. 여기에는 코스 정보 쿼리, 코스 강사 업데이트, 그리고 코스 데이터 일괄 쿼리가 포함됩니다.

👀 미리보기

Course table query example
MyBatis dynamic SQL example
Batch query example

🎯 과제

이 프로젝트에서 다음을 배우게 됩니다:

  • 동적 SQL 을 사용하여 코스 이름이 대문자 "C"로 시작하는 코스 정보를 쿼리하는 방법
  • 동적 SQL 을 사용하여 특정 코스의 강사를 업데이트하고 다른 코스는 변경하지 않는 방법
  • 동적 SQL 을 사용하여 코스 번호 목록으로 코스 정보를 일괄 쿼리하는 방법

🏆 성과

이 프로젝트를 완료하면 다음을 수행할 수 있습니다:

  • MyBatis 입력 및 출력 매개변수 사용
  • MyBatis 에서 동적 SQL 구현
  • 결과 매핑을 사용하여 결과 집합 매핑 지정
  • <foreach> 태그를 사용하여 일괄 쿼리 수행

강좌 정보 쿼리

이 단계에서는 동적 SQL 을 사용하여 코스 이름이 대문자 "C"로 시작하는 코스 정보를 쿼리하는 방법을 배우게 됩니다.

  1. /org/lanqiao/mapper/ 디렉토리에 있는 CourseMapper.java 파일을 엽니다.

  2. CourseMapper 인터페이스에서 selectCourses 메서드를 구현합니다. 이 메서드는 입력 매개변수를 저장하기 위해 Map<String, Object> 매개변수를 받아야 합니다.

List<Course> selectCourses(Map<String, Object> params);
  1. /org/lanqiao/mapper/ 디렉토리에 있는 CourseMapper.xml 파일을 엽니다.

  2. CourseMapper 네임스페이스에서 selectCourses SQL 문을 구현합니다. 동적 SQL 을 사용하여 courseName 매개변수가 비어 있는지 확인합니다. 비어 있지 않은 경우, 대문자 "C"로 시작하는 코스 이름을 필터링하는 조건을 추가합니다.

<select id="selectCourses" resultMap="courseResultMap" parameterType="java.util.Map">
    SELECT * FROM course
    <where>
        <if test="courseName != null and courseName != ''">
            AND cName LIKE #{courseName}
        </if>
    </where>
</select>
  1. 결과 집합 매핑을 지정하기 위해 CourseMapper.xml 파일에서 courseResultMap을 정의합니다.
<resultMap id="courseResultMap" type="org.lanqiao.pojo.Course">
    <id property="cNo" column="cNo"/>
    <result property="cName" column="cName"/>
    <result property="teacher" column="teacher"/>
</resultMap>
  1. /org/lanqiao/test/ 디렉토리에 있는 MyBatisTest.java 파일을 엽니다.

  2. selectCourses 기능을 테스트하기 위해 testSelectCourses 테스트 메서드를 구현합니다.

@Test
public void testSelectCourses() {
    CourseMapper mapper = session.getMapper(CourseMapper.class);
    Map<String, Object> params = new HashMap<>();
    params.put("courseName", "C%");
    List<Course> courses = mapper.selectCourses(params);
    System.out.println(courses);
}
✨ 솔루션 확인 및 연습

강좌 강사 업데이트

이 단계에서는 동적 SQL 을 사용하여 코스 번호 "7"인 코스의 강사를 "Blue"로 업데이트하는 방법을 배우게 됩니다.

  1. /org/lanqiao/mapper/ 디렉토리에 있는 CourseMapper.java 파일을 엽니다.

  2. CourseMapper 인터페이스에서 updateTeacher 메서드를 구현합니다. 이 메서드는 입력 매개변수를 저장하기 위해 Map<String, Object> 매개변수를 받아야 합니다.

void updateTeacher(Map<String, Object> params);
  1. /org/lanqiao/mapper/ 디렉토리에 있는 CourseMapper.xml 파일을 엽니다.

  2. CourseMapper 네임스페이스에서 updateTeacher SQL 문을 구현합니다. 동적 SQL 을 사용하여 teacherName 매개변수가 비어 있는지 확인합니다. 비어 있지 않은 경우, 지정된 courseId를 가진 코스의 teacher 열을 업데이트합니다.

<update id="updateTeacher" parameterType="java.util.Map">
    UPDATE course
    <set>
        <if test="teacherName != null and teacherName != ''">
            teacher = #{teacherName},
        </if>
    </set>
    WHERE cNo = #{courseId}
</update>
  1. /org/lanqiao/test/ 디렉토리에 있는 MyBatisTest.java 파일을 엽니다.

  2. updateTeacher 기능을 테스트하기 위해 testUpdateTeacher 테스트 메서드를 구현합니다.

@Test
public void testUpdateTeacher() {
    CourseMapper mapper = session.getMapper(CourseMapper.class);
    Map<String, Object> params = new HashMap<>();
    params.put("courseId", 7);
    params.put("teacherName", " Blue");
    mapper.updateTeacher(params);
    session.commit();
}
✨ 솔루션 확인 및 연습

강좌 정보 일괄 쿼리

이 단계에서는 동적 SQL 을 사용하여 코스 번호 "1,2,3"으로 코스 정보를 일괄 쿼리하는 방법을 배우게 됩니다.

  1. /org/lanqiao/mapper/ 디렉토리에 있는 CourseMapper.java 파일을 엽니다.

  2. CourseMapper 인터페이스에서 selectCoursesByIds 메서드를 구현합니다. 이 메서드는 입력 매개변수를 저장하기 위해 Map<String, Object> 매개변수를 받아야 합니다.

List<Map<String, Object>> selectCoursesByIds(Map<String, Object> params);
  1. /org/lanqiao/mapper/ 디렉토리에 있는 CourseMapper.xml 파일을 엽니다.

  2. CourseMapper 네임스페이스에서 selectCoursesByIds SQL 문을 구현합니다. <foreach> 태그를 사용하여 ids 목록을 반복하고 IN 절을 구성합니다.

<select id="selectCoursesByIds" resultMap="courseResultMap" parameterType="java.util.Map">
    SELECT * FROM course WHERE cNo IN
    <foreach collection="ids" item="id" open="(" separator="," close=")">
        #{id}
    </foreach>
</select>
  1. /org/lanqiao/test/ 디렉토리에 있는 MyBatisTest.java 파일을 엽니다.

  2. selectCoursesByIds 기능을 테스트하기 위해 testSelectCoursesByIds 테스트 메서드를 구현합니다.

@Test
public void testSelectCoursesByIds() {
    CourseMapper mapper = session.getMapper(CourseMapper.class);
    List<Integer> ids = Arrays.asList(1, 2, 3);
    Map<String, Object> params = new HashMap<>();
    params.put("ids", ids);
    List<Map<String, Object>> coursesByIds = mapper.selectCoursesByIds(params);
    System.out.println(coursesByIds);
}

실행

코드가 제대로 작동하는지 확인하려면 관련 클래스를 코드에 추가해야 합니다.

CourseMapper.java:

import org.lanqiao.pojo.Course;
import java.util.List;
import java.util.Map;

MyBatisTest.java:

import java.util.Arrays;
import java.util.HashMap;

마지막으로, 터미널에서 코드를 컴파일하고 실행하고 Maven 을 사용하여 다음 명령으로 테스트 파일을 확인할 수 있습니다.

cd MyBatisCourseDemo03
mvn test

실행 결과는 👀 Preview를 참조하십시오.

✨ 솔루션 확인 및 연습

요약

축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.