[JavaScript] mybatis-mapper 이용하여 코드 개선하기

2022. 6. 3.공부/JavaScript

728x90
const uid = request.session.uid;
db.query('SELECT JSON_ARRAYAGG(JSON_OBJECT("upassword",upassword,"uname",uname, 
"address", address, "phoneNum", phoneNum)) FROM userTable 
WHERE email = "' + uid + '";',   
  	function(err, data) {
     if (!err) {
         const res = data[0];
         console.log(res); // 받아온 데이터를 콘솔에서 테스트
         } else {
          console.log('연결 오류');
          }
     }

 

지금 마무리 중인 MVC 모델 적용 프로젝트에서 Service가 날려주는 쿼리의 결과를 JSON으로 받아서 뷰에 전송해주고 싶었다. 들어오는 데이터를 JSON으로 바꿔주려면 조금 복잡한 쿼리문을 작성해야했는데, 받아온 것을 가공하지 않고 콘솔에 찍어보니 "[{ 쿼리문 : { 데이터 } }]"의 형태로 들어와 정말 난감했다.......ㅋㅋㅋㅋㅋㅋㅋㅋ (파란색이 얻고자 하는 부분)

 

고로 배열 안의 0번째 JSON 데이터의 value값을 받아와야 내가 원하는 데이터였는데, 쿼리문 자체도 길고 튜닝 과정도 번거로워 '이게 최선일까?'하는 생각이 드는 와중에 Mybatis를 배웠다.

 

// mybatis 적용하여 개선한 user-info-service.js
const mybatisMapper = require("mybatis-mapper");
mybatisMapper.createMapper(['./xml/testMapper.xml']); 

exports.Select = async function(request, response) {
    const _url = request.url;
    const pathname = url.parse(_url, true).pathname;
    url_parsed = pathname.split('/');

    if(url_parsed[1] === 'my' || url_parsed[1] === 'update') {
        const uid = request.session.uid;
        var param = {
            'param' : uid
        }
        var format = {language:'sql', indent:' '};
        var query = mybatisMapper.getStatement('testMapper', 'testBasic1', param, format); 
        console.log(query);
        Connection.connect();
        Connection.query(query,function(error,result, fields) {
        if(error) {
            console.log(error);
        }
        console.log(JSON.stringify(result)); // { key : value }로 예쁘게 들어오는 것 확인!
        console.log('회원 정보 조회 완료');
        });

        Connection.end();
    } else {
        console.log('err');
    }
}

 

JSON.stringfy()를 쓰긴 했지만 [] 벗기고 value만 받아와서 for ( 요소 in 오브젝트 )로 key에 접근하던 시절에 비하면  굉장히 간단하다. 또, MyBatis를 이용하려면 xml 파일을 만들어 아래와 같이 쿼리문 코드를 service.js와 분리해야 한다. 모듈화를 지원하고 유지 보수가 간편한 점이 마음에 든다.

 

<?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="testMapper">  
  <select id="testBasic1">
    SELECT
      *
    FROM
      userTable
    WHERE
      email =#{param}
  </select>
</mapper>