반응형
Java, Spring, iBatis, MariaDB 환경에서 테스트 액티비티 테이블에 SQL 문장을 입력하고 해당 테스트 액티비티를 실행하여 결과를 저장하는 프로그램을 만들어보겠습니다. 이 프로그램은 테스트 액티비티에 있는 업체 정보 및 다른 파라미터를 입력받아 실행합니다. iBatis 설정은 XML 파일로 분리하여 구현합니다.
1. 프로젝트 설정
1.1. build.gradle 설정
plugins {
id 'org.springframework.boot' version '2.7.5'
id 'io.spring.dependency-management' version '1.0.13.RELEASE'
id 'java'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0'
runtimeOnly 'org.mariadb.jdbc:mariadb-java-client'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
2. 데이터베이스 설정
2.1. application.properties 설정
spring.datasource.url=jdbc:mariadb://localhost:3306/testdb
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
mybatis.mapper-locations=classpath:mappers/*.xml
3. 데이터베이스 테이블 생성
CREATE TABLE TestActivity (
id INT AUTO_INCREMENT PRIMARY KEY,
testCaseId INT,
sqlQuery TEXT,
executionResult TEXT,
companyId INT,
parameters JSON
);
4. 도메인 클래스
4.1. TestActivity.java
package com.example.demo.domain;
public class TestActivity {
private Integer id;
private Integer testCaseId;
private String sqlQuery;
private String executionResult;
private Integer companyId;
private String parameters; // JSON 형식의 문자열로 저장
// Getters and Setters
}
5. 매퍼 인터페이스 및 XML
5.1. TestActivityMapper.java
package com.example.demo.mapper;
import com.example.demo.domain.TestActivity;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface TestActivityMapper {
@Select("SELECT * FROM TestActivity WHERE id = #{id}")
TestActivity findById(int id);
@Select("SELECT * FROM TestActivity")
List<TestActivity> findAll();
@Insert("INSERT INTO TestActivity(testCaseId, sqlQuery, executionResult, companyId, parameters) VALUES(#{testCaseId}, #{sqlQuery}, #{executionResult}, #{companyId}, #{parameters})")
@Options(useGeneratedKeys = true, keyProperty = "id")
void insert(TestActivity testActivity);
@Update("UPDATE TestActivity SET executionResult = #{executionResult} WHERE id = #{id}")
void update(TestActivity testActivity);
}
5.2. TestActivityMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.mapper.TestActivityMapper">
<select id="findById" parameterType="int" resultType="com.example.demo.domain.TestActivity">
SELECT * FROM TestActivity WHERE id = #{id}
</select>
<select id="findAll" resultType="com.example.demo.domain.TestActivity">
SELECT * FROM TestActivity
</select>
<insert id="insert" parameterType="com.example.demo.domain.TestActivity" useGeneratedKeys="true" keyProperty="id">
INSERT INTO TestActivity(testCaseId, sqlQuery, executionResult, companyId, parameters)
VALUES(#{testCaseId}, #{sqlQuery}, #{executionResult}, #{companyId}, #{parameters})
</insert>
<update id="update" parameterType="com.example.demo.domain.TestActivity">
UPDATE TestActivity SET executionResult = #{executionResult} WHERE id = #{id}
</update>
</mapper>
6. 서비스 클래스
6.1. TestActivityService.java
package com.example.demo.service;
import com.example.demo.domain.TestActivity;
import com.example.demo.mapper.TestActivityMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
@Service
public class TestActivityService {
@Autowired
private TestActivityMapper testActivityMapper;
@Autowired
private JdbcTemplate jdbcTemplate;
public List<TestActivity> getAllTestActivities() {
return testActivityMapper.findAll();
}
public void executeTestActivity(int id, Map<String, Object> parameters) {
TestActivity testActivity = testActivityMapper.findById(id);
if (testActivity != null) {
try {
// SQL 문에 파라미터를 적용하여 실행
String sql = testActivity.getSqlQuery();
String result = jdbcTemplate.queryForObject(sql, parameters, String.class);
testActivity.setExecutionResult(result);
} catch (Exception e) {
testActivity.setExecutionResult(e.getMessage());
}
testActivityMapper.update(testActivity);
}
}
}
7. 컨트롤러 클래스
7.1. TestActivityController.java
package com.example.demo.controller;
import com.example.demo.domain.TestActivity;
import com.example.demo.service.TestActivityService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/test-activities")
public class TestActivityController {
@Autowired
private TestActivityService testActivityService;
@GetMapping
public List<TestActivity> getAllTestActivities() {
return testActivityService.getAllTestActivities();
}
@PostMapping("/execute/{id}")
public void executeTestActivity(@PathVariable int id, @RequestBody Map<String, Object> parameters) {
testActivityService.executeTestActivity(id, parameters);
}
}
8. 실행 및 테스트
프로젝트를 실행하고, Postman 또는 다른 REST 클라이언트를 사용하여 다음과 같은 요청을 보낼 수 있습니다:
- 모든 테스트 액티비티 조회: GET http://localhost:8080/test-activities
- 특정 테스트 액티비티 실행: POST http://localhost:8080/test-activities/execute/{id}
이 프로그램은 테스트 액티비티 테이블에 저장된 SQL 문장을 실행하고, 결과를 해당 테스트 액티비티의 executionResult 필드에 저장합니다. SQL 문장 실행 시 필요한 파라미터는 JSON 형식으로 입력받아 실행합니다
반응형
'기술자료' 카테고리의 다른 글
React Ag-Grid의 e.api.sizeColumnsToFit() 함수 (0) | 2025.03.26 |
---|---|
MariaDB에서 숫자를 천 단위로 포맷하여 반환하려면 FORMAT() 함수 (0) | 2025.03.26 |
테스트 관리 도구 만들기 (0) | 2025.03.26 |
테스트 관리 도구 만들기 2025-03-26 (0) | 2025.03.26 |
HeidiSQL 다운로드 및 설치 가이드 (0) | 2025.03.19 |