본문 바로가기

STUDY/Spring

[Spring boot] 간단한 API 개발

* 2021.03.11 작성 기준

 

Spring boot - 통계 API를 위한 DB, Table 작성

1. DB 및 Table 생성하기

CREATE DATABASE api_stat;

CREATE Table api_stat.requestInfo(
	requestID numeric NOT NULL primary key,
    requestCode varchar(5) NOT NULL,
    userID varchar(5),
    createDate varchar(10)
);

CREATE table api_stat.requestCode(
	requestCode varchar(5) NOT NULL primary key,
    code_explain varchar(50) NOT NULL
);

CREATE table api_stat.user(
	userID varchar(5) NOT NULL primary key,
    Dept_Code varchar(5) NOT NULL,
    USERNAME varchar(5) NOT NULL
);

CREATE table api_stat.dept_code(
	Dept_Code varchar(5) NOT NULL primary key,
    Dept_explain varchar(50) NOT NULL
);
 

 

2. 간단한 데이터 삽입

INSERT INTO api_stat.requestInfo(requestID, requestCode, userID, createDate)
VALUES
(1, 'L', 'AAA', '20201008'),
(2, 'O', 'BBB', '20210119'),
(3, 'L', 'CCC', '20190831'),
(4, 'L', 'DDD', '20201121'),
(5, 'WB', 'EEE', '20191231');
 

 

 

 

 

Spring boot - Mybatis, MariaDB 연동하여 2020년 로그인 수 API 출력

 

1. Package와 Class 생성

아래 사진과 같이 패키지와 클래스 생성하기

 

2. MybatisConfig.java 작성 <Mybatis 설정>

* DB와 Mybaits를 활용하기 위한 설정 코드 작성

* MapperScan 어노테이션을 활용하여 스캔할 패키지를 입력 (@MapperScan)

import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@MapperScan(basePackages = "com.hongsi.settingweb_boot.dao")
public class MybatisConfig {
	
	@Bean
	public SqlSessionFactory sqlSessionFactory (DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
        
        sqlSessionFactory.setDataSource(dataSource);
        sqlSessionFactory.setTypeAliasesPackage("com.hongsi.settingweb_boot.dto");
        
        return sqlSessionFactory.getObject();
    }
    
    @Bean
    public SqlSessionTemplate sqlSession (SqlSessionFactory sqlSessionFactory) {
        
        return new SqlSessionTemplate(sqlSessionFactory);
    }

}
 

 

 

3. Mapper 작성

■ StatisticMapper.java

package com.hongsi.settingweb_boot.dao;

import java.util.HashMap;

public interface StatisticMapper {
	 public HashMap<String, Object> selectYearLogin(String year);
}
 

 

■ StatisticMapper.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.hongsi.settingweb_boot.dao.StatisticMapper">
<select id="selectYearLogin" parameterType="string" resultType="hashMap">
        select count(*) as totCnt
        from api_stat.requestinfo ri
        where left(ri.createDate, 4) = #{year};
    </select>   
</mapper>
 

 

4. Service 작성 (비지니스 로직 작성)

■ StatisticService.java

* interface로 yearloginNum을 정의

package com.hongsi.settingweb_boot.service;

import java.util.HashMap;

public interface StatisticService {
	public HashMap<String,Object> yearloginNum (String year);
}
 

 

■ StatisticServiceImpl.java

* JSON을 만들기 위해 HashMap 형태로 Return

* HashMap에 값을 year, is_success, 쿼리로 가져온 count 값으로 json을 생성

package com.hongsi.settingweb_boot.service;

import java.util.HashMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
import com.hongsi.settingweb_boot.dao.StatisticMapper;

@Service
public class StatisticServiceImpl implements StatisticService {

	@Autowired
    private StatisticMapper uMapper;
    
    @Override
    public HashMap<String, Object> yearloginNum (String year) {
        HashMap<String, Object> retVal = new HashMap<String,Object>();
        
        try {
            retVal = uMapper.selectYearLogin(year);
            retVal.put("year", year);
            retVal.put("is_success", true);
            
        }catch(Exception e) {
            retVal.put("totCnt", -999);
            retVal.put("year", year);
            retVal.put("is_success", false);
        }
        
        return retVal;
    }
}
 

 

 

5. SettingTest.java

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import com.hongsi.settingweb_boot.dao.StatisticMapper;
import com.hongsi.settingweb_boot.service.StatisticService;

@Controller
public class settingTest {

	 @Autowired
	 private StatisticService service;
	    
	 @ResponseBody 
	 @RequestMapping("/sqlyearStatistic")
	 public Map<String, Object> sqltest(String year) throws Exception{ 
	        
	     return service.yearloginNum(year);
	 }
}
 

 

 

6. 웹에서 localhost:8080/sqlyearStatistic?year=2020 으로 접속 후 결과 확인

* 조회하는 URL이므로 GET으로 조회하여 URL에 parameter를 입력

* 아래와 같은 json 구조로 출력됨

 

table에 추가했던 데이터들 중 2020년 로그인 수는 2명

 

 

 

* 출력하면 위 그림처럼 json 결과가 줄바꿈이 되지 않은 상태일 때 줄바꿈하기 위한 방법 ↓