본문 바로가기

개발자정보

테스트 관리도 SQL과 JSON 형태의 입력된 정보를 읽어와 SQL과 JSON 형태의 입력 정보를 결합하여 완성 SQL을 수행

반응형
Java, Spring, iBatis, MariaDB 환경에서 테스트 액티비티 테이블에 SQL과 JSON 형태의 입력된 정보를 읽어와 SQL과 JSON 형태의 입력 정보를 결합하여 완성 SQL을 수행하고 결과를 저장하는 프로그램을 만들어보겠습니다.

1. 프로젝트 설정

1.1. build.gradle 설정

Java, Spring, iBatis, MariaDB 환경에서 테스트 액티비티 테이블에 SQL과 JSON 형태의 입력된 정보를 읽어와 SQL과 JSON 형태의 입력 정보를 결합하여 완성 SQL을 수행하고 결과를 저장하는 프로그램을 만들어보겠습니다.
1. 프로젝트 설정
1.1. build.gradle 설정
groovy


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'
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.3'
    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

Java, Spring, iBatis, MariaDB 환경에서 테스트 액티비티 테이블에 SQL과 JSON 형태의 입력된 정보를 읽어와 SQL과 JSON 형태의 입력 정보를 결합하여 완성 SQL을 수행하고 결과를 저장하는 프로그램을 만들어보겠습니다.
1. 프로젝트 설정
1.1. build.gradle 설정
groovy


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'
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.13.3'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
2. 데이터베이스 설정
2.1. application.properties 설정
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. 데이터베이스 테이블 생성
sql


CREATE TABLE TestActivity (
    id INT AUTO_INCREMENT PRIMARY KEY,
    testCaseId INT,
    sqlQuery TEXT,
    executionResult TEXT,
    companyId INT,
    parameters JSON
);
4. 도메인 클래스
4.1. TestActivity.java
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
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


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


package com.example.demo.service;

import com.example.demo.domain.TestActivity;
import com.example.demo.mapper.TestActivityMapper;
import com.fasterxml.jackson.databind.ObjectMapper;
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;

    @Autowired
    private ObjectMapper objectMapper;

    public List<TestActivity> getAllTestActivities() {
        return testActivityMapper.findAll();
    }

    public void executeTestActivity(int id) {
        TestActivity testActivity = testActivityMapper.findById(id);
        if (testActivity != null) {
            try {
                // JSON 문자열을 Map으로 변환
                Map<String, Object> parameters = objectMapper.readValue(testActivity.getParameters(), Map.class);
                
                // 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;

@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) {
        testActivityService.executeTestActivity(id);
    }
}

 

8. 실행 및 테스트

프로젝트를 실행하고, Postman 또는 다른 REST 클라이언트를 사용하여 다음과 같은 요청을 보낼 수 있습니다:
  • 모든 테스트 액티비티 조회: GET http://localhost:8080/test-activities
  • 특정 테스트 액티비티 실행: POST http://localhost:8080/test-activities/execute/{id}
이 프로그램은 테스트 액티비티 테이블에 저장된 SQL 문장과 JSON 형태의 파라미터를 결합하여 SQL을 실행하고, 결과를 해당 테스트 액티비티의 executionResult 필드에 저장합니다.
 

 

java, spring, ibatis, mariadb 환경에서 테스트 액티비티 테이블에 SQL과 JSON 형태의 입력된 정보를 읽어와 SQL과 JSON 형태의 입력 정보를 결합하여 완성 SQL를 수행하고 결과를 저장하는 프로그램 만들어 주세요.

반응형