* 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 결과가 줄바꿈이 되지 않은 상태일 때 줄바꿈하기 위한 방법 ↓
'STUDY > Spring' 카테고리의 다른 글
[토비의 스프링부트 - 이해와 원리] 스프링 부트 시작하기 (0) | 2024.02.17 |
---|---|
[토비의 스프링부트 - 이해와 원리] 스프링 부트 살펴보기 (0) | 2023.12.11 |
[Spring] Spring, MariaDB, MyBatis 연동 (0) | 2023.12.09 |
[Spring] MariaDB, MySQL Workbench 설치하기 (0) | 2023.12.09 |
[Spring] Hello World 출력하기 (0) | 2023.12.09 |