Url -> Controller (Mapping) -> .html (jsp) - js (loading) - requireData Controller - SVC (์๋ต๊ฐ๋ฅ) -> DAO -> (Mybatis).xml -> DAO -> SVC -> Controller -> ๊ฐ ๋ฆฌํด JSP - JS
Controller
@RequestMapping(value = "boards_list.json")
public @ResponseBody GridResultEntity getList(HttpSession session, @RequestParam Map<String,Object> map) {
BoardsDAO dao = sqlSession.getMapper(BoardsDAO.class);
int listCount = dao.selectBoardsListCount(map);
List<Map<String, Object>> list = Collections.emptyList();
if (listCount > 0) {
list = dao.selectBoardsList(PagingUtil.convertParam(map));
}
System.out.println("list : " + list);
return new GridResultEntity(listCount, list);
}
SELECT
<select id="selectBoardsList" resultType="map">
SELECT
boards_id,
boards_subject,
boards_content,
boards_writer,
boards_email,
boards_rdate
FROM
BOARDS
<where>
<if test="s_boards_subject != null and s_boards_subject != ''">
AND boards_subject LIKE CONCAT('%',#{s_boards_subject},'%')
</if>
<if test="s_boards_writer != null and s_boards_writer != ''">
AND boards_writer LIKE CONCAT('%',#{s_boards_writer},'%')
</if>
</where>
ORDER BY boards_id
<choose>
<when test="recordstartindex==null">
LIMIT 0, 10
</when>
<otherwise>
LIMIT #{recordstartindex}, #{pagesize}
</otherwise>
</choose>
</select>
JSONํ์์ผ๋ก ํ์ฑํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋๋ฐ, mybatis mapper.xml ์์ boards_id๋ฅผ select ์ํ๋ค๊ฐ ํ๋ฃจ๋ฅผ ๋ ๋ ค๋ฒ๋ ธ๋ค. ๊ฒจ์ฐ ํฌ๋กฌ ๊ฐ๋ฐ์๋๊ตฌ Network ์์ Null์ ์ฐพ์ ์์ ํ๋ค. undefined๊ฐ ๊ณ์๋์์ ๊ทธ๊ฒ๋ง ๋ฐ๋ณด๊ฐ์ด ๊ฒ์ํ๋ค. ์ข์ ์ฝ์ง ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ์ ํ๋ฆ์ ์ ๋ณด์๋ ๊ตํ์ ์ป์๋ค.
boards_list.js
'use strict';
_SL.nmspc("user").list = function() {
var mCfg = {
urlList : gCONTEXT_PATH + 'boards/boards_list.json',
urlForm : gCONTEXT_PATH + 'boards/boards_form.html',
formId : '#searchUserList',
gridId : '#gridUserList'
},
m$ = {
form : $(mCfg.formId),
grid : $(mCfg.gridId)
},
ctrlCookie = new slui.cookies(),
init = function() {
ctrlCookie.init(mCfg.gridId);
var $btnAdd = m$.grid.parent().siblings('.grid-bottom')
.find('.btn-add');
// ์ด๊ธฐ ํ๋ฉด ๊ตฌ์ฑ
drawGrid(m$.grid);
...
boards_form.js
_SL.nmspc("user").form = function(){
var
// Config ์ ์
mCfg = {
formId : '#formComuser',
urlSelect : gCONTEXT_PATH + "boards/boards.json",
urlExist : gCONTEXT_PATH + "boards/boards_exist.json",
urlDelete : gCONTEXT_PATH + "boards/boards_delete.do",
/* urlFileUpload : gCONTEXT_PATH + "system/comuser_file_upload.do",
urlPasswdExist : gCONTEXT_PATH + 'main/comuser_passwd_inform.json',*/
add : {
action : gCONTEXT_PATH + "boards/boards_insert.do",
message : _SL.getMessage("CNF.COM.0006"),
passwdValid : _SL.getMessage("FLD.COM.0152")+",required,password"
},
update : {
action : gCONTEXT_PATH + "boards/boards_update.do",
message : _SL.getMessage("CNF.COM.0002"),
passwdValid : _SL.getMessage("FLD.COM.0152")+",password"
}
},
// JQuery ๊ฐ์ฒด ๋ณ์
m$ = {
form : $(mCfg.formId),
userId : $(mCfg.formId + ' [name=boards_id]'),
...
Validation
<input type=text name.. data-valid="<spring:message code="FLD.COM.0148"/>,required,alphanum"></td>
<spring:message code="FLD.COM.0148"/>
์ spring:message๋ ๋ค๊ตญ์ด๋๋ฌธ์ ์ด๋ ๊ฒ ์ค์ ํด์ค๋ค.
์ด๋ ๊ฒ data-valid(key) = (value)
๋ฅผ ์ค์ ํด์ฃผ๋ฉด, JS์ชฝ์์ if (!_SL.validate()) return;
๋ฆฌํดํด์ค๋ค.
Map VS Vo/Dto?
DB ๋ฐ์ดํฐ๋ฅผ Map์ ๋ด์์ง, ์์ํ ๋ฐ์ดํฐ ๊ฐ์ฒด๋ฅผ ์์ฑ๊ณผ ์์ฑ์ ์ ๊ทผํ๊ธฐ์ํ getter, setter๋ฅผ ๋ง๋ค์ง์ด๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ๋ Map์ด ๋ํธํ๋ค๋ ์๊ฒฌ์ด๋ง๋ค. ํ
์ด๋ธ ์ค๊ณ๊ฐ ๋ณ๋๋์ด๋ VO ์์ ์์ด ๋ฐ๋ก ๋ฐ์๋์ด ๋ฐ์ดํฐ๊ฐ ๋ด๋ ค์จ๋ค. ๋ค๋ง ์ปฌ๋ผ๋ช
๊ณผ Map์ ๋ด๊ธฐ๋ key์ ์ด๋ฆ์ ๋์ผํด์ผํ๋ค.
ํ์ง๋ง ๋จ์ ์ ๋ค๋ฅธ์ฌ๋์ด ๋ณผ ๋ ๋ ์ด๋ ค์ธ ์๋ฐ์์๊ณ , ์ค๋ฅ๋ฅผ ์ฐพ๊ธฐ๋ ํ๋ค๋ค.
DTO๋ ๋ก์ง์์์ ๋ก์ง ๋ณ๋ก ๊ฐ์ง๊ณ ์๋ data set์ ์ฝ๊ฒ ํ์
ํ ์ ์๊ณ ์์ญ์ด๋ ์๋๊ฐ ๋ช
ํํ๊ฒ ํ์
ํ ์ ์๋ค. ๋ค๋ง ๋จ์ ์ ์ผ์ผ์ด ์ปฌ๋ผ ํ๋ํ๋ get,setํด์ฃผ๋ ์์
์ด ํ์ํ๋ค.
๋๋ฆฌ๋, ์ ํฌ ํ์ฌ๋ ์ DTO ๋ง๊ณ , MAP์ ์ฌ์ฉํ ๊น์ ?
TABLE๋ง ์๋ฐฑ๊ฐ, ์ปฌ๋ผ๊น์ง ์์ฒ๊ฐ๋ค. ์ ์ง๋ณด์ ํ ๋, ์ถ๊ฐ/์ญ์ /์์ ๋ฑ ๋ณ๊ฒฝํด์ฃผ๊ธฐ๊ฐ ๋์ฒํ๋ค. ๋ํ ๋ณ์๋ฅผ ํ๊ฐํ๊ฐ get,set์์
ํด์ฃผ๋ ์ผ์ด ํ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ค์ ๋ฏธ์
์ ์นด์นด์คํก ์ฐ๋ ์๋ฆผํก API / ๋ผ์ธ ์๋ฆผํก API ๊ธฐ๋ฅ๊ตฌํ์ด๋ค.
๋ด ์ค์ค๋ก์๊ฒ ํ์ดํ
๐ฆ
Json format converter https://jsonformatter.org/
์ถ๊ฐ Mybatis
namespace : ์ด๋ฆ ์ถฉ๋์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ์ฉ
...๋๋จํด