Skip to content

Latest commit

ย 

History

History
544 lines (373 loc) ยท 18.7 KB

File metadata and controls

544 lines (373 loc) ยท 18.7 KB

โœ… CRUD - I

  • ํ•™์Šต๋ชฉํ‘œ : ์ „์ž์ •๋ถ€ํ‘œ์ค€ ํ”„๋ ˆ์ž„์›Œํฌ(eGovFramework)๋กœ ์ œ์ž‘๋œ ํ”„๋กœ์ ํŠธ์—์„œ CRUD ๊ตฌํ˜„ํ•˜๋Š” ๋กœ์ง์„ ๋ฐฐ์›€
  1. ๊ฐœ๋ฐœ์ˆœ์„œ ๊ฐœ์š”
  2. ๊ฒŒ์‹œ๊ธ€ CRUD
  3. ํŒŒ์ผ CRUD

๐Ÿ’ก(๋ณธ ๋ฌธ์„œ๋Š” ๊ฐœ๋ฐœ์ˆœ์„œ ๊ฐœ์š”, ํ™”๋ฉด URL ์—ฐ๊ฒฐ, ๊ทธ๋ฆฌ๊ณ  ๊ฒŒ์‹œ๊ธ€ CRUD - READ ๊นŒ์ง€๋งŒ ์ž‘์„ฑ, ๋‚˜๋จธ์ง€ ๊ฒŒ์‹œ๊ธ€ CUD ์™€ ํŒŒ์ผ CRUD ๋Š” ๋‹ค์Œ ๋ฌธ์„œ์ธ CRUD - II, CRUD - III ์—์„œ ๋‹ค๋ฃธ)

1. ๊ฐœ๋ฐœ์ˆœ์„œ ๊ฐœ์š”

์•„๋ž˜ ๋กœ์ง์— ๋”ฐ๋ผ JSP(jQuery, JSTL), SQL, Spring Framework ๋ฅผ ๋‹ค๋ฃธ

1-1. ํ™”๋ฉด URL ์—ฐ๊ฒฐ

1-2. CRUD

1-2-1. ๊ธ€/ํŒŒ์ผ ๋ชฉ๋ก์กฐํšŒ (READ)

1-2-2. ๊ธ€/ํŒŒ์ผ ๋“ฑ๋ก (CREATE)

1-2-3. ๊ธ€/ํŒŒ์ผ ์ˆ˜์ • (UPDATE)

1-2-4. ๊ธ€/ํŒŒ์ผ ์‚ญ์ œ (DELETE)


2. ๊ฒŒ์‹œ๊ธ€ CRUD

[๊ณต์ง€์‚ฌํ•ญ] ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์˜ˆ์‹œ๋กœ, ๊ฒŒ์‹œ๊ธ€ CRUD ๋กœ์ง ์ •๋ฆฌ

2-1. ํ™”๋ฉด URL ์—ฐ๊ฒฐ

  • ๊ธฐ๋ณธ์›๋ฆฌ : [๊ณต์ง€์‚ฌํ•ญ] ํ™”๋ฉด์—์„œ ๋ณด์—ฌ์ค„ HTML ์„ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ์ž‘์—…

  • ์„ธ๋ถ€์›๋ฆฌ : [๊ณต์ง€์‚ฌํ•ญ] ํ™”๋ฉด URL http://localhost/mngNot/notice.do ์—์„œ /mngNot/notice.do ๋ถ€๋ถ„์„ Java๋‹จ(Controller)๊ณผ JSP๋‹จ์œผ๋กœ ๋ฐ›์•„์˜ค๋Š” ์ž‘์—…

  • ์ž‘์—…์ˆœ์„œ

    • Java๋‹จ

      • ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ

        0609_URL_Java_Folders

      • Navigator ํƒญ /src/main/java/kr/happyjob/study ์—์„œ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ New ๋ˆ„๋ฅด๊ณ  /mngNot ํด๋” ์ƒ์„ฑ

      • /mngNot ๊ณผ ๊ฐ™์€ ๋‹จ์— ์žˆ๋Š” /sample ํด๋”์—์„œ 4๊ฐœ ํ•˜์œ„ ํด๋”๋“ค(/controller, /dao, /model, /service) ๋ณต์‚ฌํ•˜๊ณ  /mngNot ๋‚ด๋ถ€์— ๋ถ™์—ฌ๋„ฃ๊ธฐ

      • /mngNot/controller ๋‚ด๋ถ€์— ์ƒ์„ฑ๋˜์–ด ์žˆ๋Š” .java ํŒŒ์ผ๋ช…๊ณผ ํ•ด๋‹น ํŒŒ์ผ ๋‚ด๋ถ€ public class ์ด๋ฆ„, @RequestMapping ์˜์—ญ์„ ๊ตฌํ˜„ํ•˜๋ ค๋Š” ํ™”๋ฉด์— ๋งž์ถฐ์„œ ์ˆ˜์ •

        0609_URL_Java_Controller

    • JSP๋‹จ

      • ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ

        0609_URL_JSP_Folders

      • Navigator ํƒญ /src/main/webapp/WEB-INF/view ์—์„œ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ New ๋ˆ„๋ฅด๊ณ  /mngNot ํด๋” ์ƒ์„ฑ

      • /view/mngNot ๋‚ด๋ถ€์— noticelist.jsp ํŒŒ์ผ ์ƒ์„ฑ (์ƒ˜ํ”Œ๋กœ ์ƒ์„ฑ๋œ /view/sample/sample_comncod.jsp ๋‚ด๋ถ€ ์ฝ”๋“œ ์˜ฎ๊ฒจ์˜ค๊ณ  ํŒŒ์ผ๋ช…๋งŒ ์ผ๋‹จ ๊ณ ์ณ๋†“๊ธฐ)

    • Java๋‹จ

      • /mngNot/controller ๋‚ด๋ถ€ MngNotController.java ํŒŒ์ผ๋กœ ๋Œ์•„๊ฐ€์„œ, @RequestMapping ํ•˜๋‹จ return ๊ฐ’์„ ์ƒˆ๋กœ ์ƒ์„ฑํ•œ JSP ํŒŒ์ผ๋ช…(/mngNot/noticelist)์œผ๋กœ ๋ณ€๊ฒฝ

2-2. CRUD

๐Ÿ’กFlow : ์ปจํŠธ๋กค๋Ÿฌ(Controller.java) โžก๏ธ ์„œ๋น„์Šค(Service.java) โžก๏ธ ๋‹ค์˜ค(Dao.java) โžก๏ธ SQL(Mapper.xml)

2-2-1. READ

  • JSP๋‹จ (/view/mngNot/noticelist.jsp)

    <script> ๋‚ด๋ถ€ JS ์ฝ”๋“œ ์ •๋ฆฌํ•˜๋Š” ์ž‘์—…

    • Pagination ๊ตฌํ˜„์„ ์œ„ํ•œ ์ค€๋น„

      • JS ์ฝ”๋“œ ์ตœ์ƒ๋‹จ์— ํ•œ ํŽ˜์ด์ง€๋‹น ๋ ˆ์ฝ”๋“œ ๋ช‡ ๊ฐœ ๋ณด์—ฌ์ค„ ๊ฒƒ์ธ์ง€ ๊ธฐ๋Šฅํ•˜๋Š” ๋ณ€์ˆ˜(pageSize), ํŽ˜์ด์ง€๋„ค์ด์…˜ ํ•ญ๋ชฉ ๋ช‡ ๊ฐœ ์ƒ์„ฑํ•  ๊ฒƒ์ธ์ง€ ๊ธฐ๋Šฅํ•˜๋Š” ๋ณ€์ˆ˜(pageBlockSize) ์„ ์–ธ

        // ํŽ˜์ด์ง• ์„ค์ •
        var pageSize = 10;     
        var pageBlockSize = 5;    
    • function fRegisterButtonClickEvent()

      • sample_comncod.jsp ์— ์ž‘์„ฑ๋˜์–ด ์žˆ๋˜ ๋ฒ„ํŠผ ์ด๋ฒคํŠธ ํ•จ์ˆ˜

      • ํ•จ์ˆ˜ ๋‚ด๋ถ€ e.preventDefault() ์ฝ”๋“œ๋Š” ์ง€๊ธˆ๊นŒ์ง€ ์ด๋ฒคํŠธ์— ๋ˆ„์ ๋œ ์‹คํ–‰์กฐ๊ฑด์„ ์ „๋ถ€ ์ทจ์†Œํ•˜๋ผ๋Š” ์˜๋ฏธ

    • Onload event

      • Onload event ๋Š” ๋ธŒ๋ผ์šฐ์ €์— HTML ๋ฟŒ๋ฆฐ ์งํ›„์˜ ์ƒํƒœ๋ฅผ ์˜๋ฏธ. ์•„๋ž˜์™€ ๊ฐ™์ด ํ™”๋ฉด Onload ์‹œ, ๋ฒ„ํŠผ ์ด๋ฒคํŠธ ๋“ฑ๋ก ํ•จ์ˆ˜(fRegisterButtonClickEvent()) ์™€ ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก์กฐํšŒ ํ•จ์ˆ˜(fn_noticelist()) ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก ๋กœ์ง ๊ตฌํ˜„

        /** OnLoad event */ 
        $(function() {
            // ๋ฒ„ํŠผ ์ด๋ฒคํŠธ ๋“ฑ๋ก
            fRegisterButtonClickEvent();
            // ์ฝ”๋“œ ํ•˜๋‹จ์—์„œ ์„ ์–ธํ•  function fn_noticelist() ๋„ Onload ์— ๋ฏธ๋ฆฌ ์ ์–ด์ฃผ๊ธฐ
            fn_noticelist();
        });
    • function fn_noticelist() ์„ ์–ธ

      • JSP ์™€ Controller ๊ฐ€ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ํ•  ์ˆ˜ ์žˆ๋„๋ก Ajax ๋ฅผ ํ™œ์šฉํ•˜๋Š”๋ฐ, ์ง€๊ธˆ ์šฐ๋ฆฌ๊ฐ€ ์“ฐ๋Š” ํ”„๋กœ์ ํŠธ์— /src/main/webapp/WEB-INF/resource/js/commonAjax.js ํŒŒ์ผ ์•ˆ์— ์ด๋Ÿฐ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ์ž‘์—…์„ ์œ„ํ•ด ๊ณตํ†ต๋ชจ๋“ˆ ๋งŒ๋“ค์–ด ๋†“์€๊ฒŒ ์žˆ์Œ

      • /js/commonAjax.js ์—์„œ function callAjax ์ฝ”๋“œ ์ฒซ ์ค„(callAjax(url, method, dataType, async, param, callback)) ๋ณต์‚ฌํ•ด์„œ function fn_noticelist() ์ตœํ•˜๋‹จ์— ๋ถ™์—ฌ๋„ฃ๊ณ , ํ™”๋ฉด ๊ตฌํ˜„์— ํ•„์š”ํ•œ ์–‘์‹์œผ๋กœ ์ปค์Šคํ…€ํ•˜๊ธฐ

        function fn_noticelist(pagenum) {
        
            pagenum = pagenum || 1;
        
            var param = {
                delyn : $("#delyn").val()
                ,	searchKey : $("#searchKey").val()
                , 	sname : $("#sname").val()
                , pageSize : pageSize
                , pageBlockSize : pageBlockSize
                , pagenum : pagenum
            }
        
            var listcollabck = function(returnvalue) {
                console.log(returnvalue);
        
                $("#listnotice").empty().append(returnvalue);
        
                var  totalcnt = $("#totalcnt").val();
        
                console.log("totalcnt : " + totalcnt);
        
                var paginationHtml = getPaginationHtml(pagenum, totalcnt, pageSize, pageBlockSize, 'fn_noticelist');
                console.log("paginationHtml : " + paginationHtml);
        
                $("#noticePagination").empty().append( paginationHtml );
        
            }
        
            /*   /js/commonAjax.js ์—์„œ ๊ฐ€์ ธ์˜จ callAjax()   */  
            callAjax("/mngNot/noticelist.do", "post", "text", false, param, listcollabck);
        
        }
  • Java ๋‹จ - Controller (/mngNot/controller/MngNotController.java)

    • @RequestMapping("noticelist.do") ๋ถ€๋ถ„ ์‹ ๊ทœ ์ž‘์„ฑ

      • Pagination ๊ธฐ๋Šฅ์€ SQL๋ฌธ์—์„œ LIMIT ๋ฉ”์„œ๋“œ(MySQL ์—๋งŒ ์žˆ์Œ) ํ™œ์šฉ

      • ์˜ˆ๋ฅผ ๋“ค์–ด LIMIT 0, 10 ์€ 0๋ถ€ํ„ฐ 10๊นŒ์ง€ ๋ ˆ์ฝ”๋“œ ๋ฝ‘์•„์˜ด

      • ์•„๋ž˜์™€ ๊ฐ™์€ ๊ทœ์น™์„ int pageindex = (pagenum - 1) * pageSize; ์ด๋ ‡๊ฒŒ ์ปจํŠธ๋กค๋Ÿฌ ํŒŒ์ผ์— ์ฝ”๋“œ๋กœ ๋ฐ˜์˜

        Query (MySQL) Logic (pageindex )
        1 page LIMIT 0, 10 [(1-1)*10 ๋ถ€ํ„ฐ 10๊นŒ์ง€]
        2 page LIMIT 10, 20 [(2-1)*10 ๋ถ€ํ„ฐ 20๊นŒ์ง€]
        3 page LIMIT 20, 30 [(3-1)*10 ๋ถ€ํ„ฐ 30๊นŒ์ง€]
        N (pagenum ) page ... [(N-1)*10 ๋ถ€ํ„ฐ pageSize๊นŒ์ง€]
      @RequestMapping("noticelist.do")
         public String noticelist(Model model, @RequestParam Map<String, Object> paramMap, HttpServletRequest request,
               HttpServletResponse response, HttpSession session) throws Exception {
            
            logger.info("+ Start " + className + ".noticelist");
            logger.info("   - paramMap : " + paramMap);
            
            // ํŽ˜์ด์ง€๋„ค์ด์…˜ ๋กœ์ง ๊ตฌํ˜„
            int pagenum = Integer.parseInt((String) paramMap.get("pagenum"));
            int pageSize = Integer.parseInt((String) paramMap.get("pageSize"));
            int pageindex = (pagenum - 1) * pageSize;
            
            paramMap.put("pageSize", pageSize);
            paramMap.put("pageindex", pageindex);
            
            // Controller  Service  Dao  SQL
            List<NoticeModel> noticesearchlist = mngNotService.noticelist(paramMap);
            int totalcnt = mngNotService.countnoticelist(paramMap);
            
            model.addAttribute("noticesearchlist", noticesearchlist);
            model.addAttribute("totalcnt", totalcnt);
            
            logger.info("+ End " + className + ".noticelist");
      
            return "mngNot/noticelistgrd";
         }
         
      }
  • Java ๋‹จ - Model (/mngNot/model/NoticeModel.java)

    • SELECT๋ฌธ์œผ๋กœ ๋ฝ‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์„ ๊ทธ๋ฆ‡(VO๋ชจ๋ธ) ๋งŒ๋“œ๋Š” ์ž‘์—…

    • Controller ์—์„œ ์ค„์ค„์ด ์กฐํšŒํ•œ ๊ฒƒ์„ ๋ชจ๋ธ์— ๋‹ด์•„์„œ JSP ์— ๋˜์ง€๋Š” ์›๋ฆฌ

    • ์ด ํŒŒ์ผ์—์„œ private ์œผ๋กœ ์„ ์–ธ๋œ ํ•จ์ˆ˜๋“ค์€ ํŠน์ • ํด๋ž˜์Šค ๋‚ด๋ถ€์—์„œ๋งŒ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅ. ๋”ฐ๋ผ์„œ ์™ธ๋ถ€์—์„œ ์ƒ์†๊ฐ’์œผ๋กœ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋ ค๋ฉด public ์œผ๋กœ ์„ ์–ธํ•ด์•ผ ํ•จ

    • ์šฐ์„  /study/system/model/NoticeModel.java ํŒŒ์ผ ๊ฐ€์ ธ์™€์„œ ์ฝ”๋“œ ๊ตฌ์กฐ ์‚ดํŽด๋ณด๊ธฐ

    • ํ™”๋ฉด์—์„œ ํ™œ์šฉํ•˜๋ ค๋Š” ๋ฐ์ดํ„ฐ ์ปฌ๋Ÿผ๋ช…๊ณผ ์ž๋ฃŒํ˜•์„ ๋ณต๋ถ™ํ•ด์˜จ NoticeModel.java ํŒŒ์ผ ๋‚ด๋ถ€ > public class NoticeModel{} ์ค‘๊ด„ํ˜ธ ๋‚ด๋ถ€์— private String notice_del_yn; ์˜ ํ˜•์‹์œผ๋กœ ๋‚˜์—ด > ๋ชจ๋ธ๋กœ ์ƒ์„ฑํ•˜๋ ค๋Š” ๋ถ€๋ถ„๋งŒ ๋“œ๋ž˜๊ทธ > Eclipse IDE ์ƒ๋‹จ Source ํด๋ฆญ > Generate Getters and Setters... ํด๋ฆญํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋ชจ๋ธ ์ƒ์„ฑ

      ํ…Œ์ด๋ธ”์— VARCHAR ๋ฐ์ดํ„ฐํƒ€์ž…์œผ๋กœ ์ž‘์€ ์ปฌ๋Ÿผ์€ Model.java ์— String ์œผ๋กœ, ํ…Œ์ด๋ธ”์— INT ๋ฐ์ดํ„ฐํƒ€์ž…์œผ๋กœ ์žก์€ ์ปฌ๋Ÿผ์€ Model.java ์— int ๋กœ ์ž…๋ ฅ

      package kr.happyjob.study.mngNot.model;
      
      public class NoticeModel {
          
          // ๋ณดํ†ต์€ ์ด๋ ‡๊ฒŒ private ์„ ์œ„์ชฝ์— ์ž…๋ ฅํ•˜๊ณ ,
          private String notice_del_yn;
      	private String loginID;
      	private int notice_no;
      	private String notice_title;
      	private String notice_date;
      	private String notice_cont;
      	private int file_no;
      	private String file_name;
      	private String logic_path;
      	private String physic_path;
      	private int file_size;
      	private String exten;
      	private String name;
      
          // Generate Getters and Setters... ์ž‘์—… ๊ฒฐ๊ณผ๋ฅผ ์•„๋ž˜์ชฝ์— ์ž…๋ ฅ
      	public String getNotice_del_yn() {
      		return notice_del_yn;
      	}
      	public void setNotice_del_yn(String notice_del_yn) {
      		this.notice_del_yn = notice_del_yn;
      	}
      	public String getLoginID() {
      		return loginID;
      	}
      	public void setLoginID(String loginID) {
      		this.loginID = loginID;
      	}
      	public int getNotice_no() {
      		return notice_no;
      	}
      	public void setNotice_no(int notice_no) {
      		this.notice_no = notice_no;
      	}
      	public String getNotice_title() {
      		return notice_title;
      	}
      	public void setNotice_title(String notice_title) {
      		this.notice_title = notice_title;
      	}
      	public String getNotice_date() {
      		return notice_date;
      	}
      	public void setNotice_date(String notice_date) {
      		this.notice_date = notice_date;
      	}
      	public String getNotice_cont() {
      		return notice_cont;
      	}
      	public void setNotice_cont(String notice_cont) {
      		this.notice_cont = notice_cont;
      	}
      	public int getFile_no() {
      		return file_no;
      	}
      	public void setFile_no(int file_no) {
      		this.file_no = file_no;
      	}
      	public String getFile_name() {
      		return file_name;
      	}
      	public void setFile_name(String file_name) {
      		this.file_name = file_name;
      	}
      	public String getLogic_path() {
      		return logic_path;
      	}
      	public void setLogic_path(String logic_path) {
      		this.logic_path = logic_path;
      	}
      	public String getPhysic_path() {
      		return physic_path;
      	}
      	public void setPhysic_path(String physic_path) {
      		this.physic_path = physic_path;
      	}
      	public int getFile_size() {
      		return file_size;
      	}
      	public void setFile_size(int file_size) {
      		this.file_size = file_size;
      	}
      	public String getExten() {
      		return exten;
      	}
      	public void setExten(String exten) {
      		this.exten = exten;
      	}
      	public String getName() {
      		return name;
      	}
      	public void setName(String name) {
      		this.name = name;
      	}
      
      }
  • Java ๋‹จ - Service (/mngNot/service/MngNotService.java )

    • Service ํŒŒ์ผ๋ช…, ๋‚ด๋ถ€ ์†Œ์Šค์ฝ”๋“œ ์ˆ˜์ •

      package kr.happyjob.study.mngNot.service;
      
      import java.util.List;
      import java.util.Map;
      
      import kr.happyjob.study.mngNot.model.NoticeModel;
      
      public interface MngNotService {
      
      	/**  ๋ชฉ๋ก ์กฐํšŒ */
      	public List<NoticeModel> noticelist(Map<String, Object> paramMap) throws Exception;
      	
      	/** ๋ชฉ๋ก ์นด์šดํŠธ ์กฐํšŒ */
      	public int countnoticelist(Map<String, Object> paramMap) throws Exception;
      	
      }
    • Java ๋‹จ - Controller (/mngNot/controller/MngNotController.java)

      • ๋‹ค์‹œ Controller ํŒŒ์ผ๋กœ ๋Œ์•„๊ฐ€์„œ @Controller ๋ฐ”๋กœ ์œ— ๋ถ€๋ถ„์— ์•„๋ž˜์™€ ๊ฐ™์ด ๋ชจ๋ธ, ์„œ๋น„์Šค import

      • public class MngNotController ๋‚ด๋ถ€์— @Autowired (ํด๋ž˜์Šค๋ฅผ ์ „์—ญ๋ณ€์ˆ˜๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ํšจ๊ณผ) ์ž‘์„ฑ

        import kr.happyjob.study.mngNot.model.NoticeModel;
        import kr.happyjob.study.mngNot.service.MngNotService;
        
        @Controller
        @RequestMapping("/mngNot/")
        public class MngNotController {
           
           @Autowired
           MngNotService mngNotService;
        
            // Set logger
           private final Logger logger = LogManager.getLogger(this.getClass());
        
           // Get class name for logger
           private final String className = this.getClass().toString();
           
           ...
  • Java ๋‹จ - Impl (/mngNot/service/MngNotServiceImpl.java)

    • ๋‚ด๊ฐ€ ์ž‘์„ฑํ•œ ํด๋ž˜์Šค์˜ ๋น„์ „์ด ์–ด๋””์ธ์ง€ ์„ ์–ธํ•ด์ฃผ๋Š” ์ž‘์—…

    • @Service : ์—ฌ๊ธฐ๊ฐ€ ์„œ๋น„์Šค๋ผ๊ณ  ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ

    • ๋‹ค์Œ๋‹จ๊ณ„์—์„œ ์ž‘์„ฑํ•  Dao ํŒŒ์ผ๊ณผ ์—ฐ๊ฒฐ๋˜๋„๋ก

      @Autowired MngNotDao mngNotDao; ์ž‘์„ฑ

      package kr.happyjob.study.mngNot.service;
      
      import java.util.List;
      import java.util.Map;
      
      import org.apache.log4j.LogManager;
      import org.apache.log4j.Logger;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.stereotype.Service;
      
      import kr.happyjob.study.mngNot.dao.MngNotDao;
      import kr.happyjob.study.mngNot.model.NoticeModel;
      
      
      @Service
      public class MngNotServiceImpl implements MngNotService {
      
      	// Set logger
      	private final Logger logger = LogManager.getLogger(this.getClass());
      	
      	// Get class name for logger
      	private final String className = this.getClass().toString();
      	
      	@Autowired
      	MngNotDao mngNotDao;
      	
      	/** ๋ชฉ๋ก ์กฐํšŒ */
      	public List<NoticeModel> noticelist(Map<String, Object> paramMap) throws Exception {
      		
      		return mngNotDao.noticelist(paramMap);
      	}
      	
      	/** ๋ชฉ๋ก ์นด์šดํŠธ ์กฐํšŒ */
      	public int countnoticelist(Map<String, Object> paramMap) throws Exception {
      				
      		return mngNotDao.countnoticelist(paramMap);
      	}
      	
      }
  • Java ๋‹จ - Dao (/mngNot/dao/MngNotDao.java)

    • public interface MngNotDao ๋‚ด๋ถ€์— ์ ์–ด์ฃผ๋Š” ์ดˆ๊ธฐ ์„ธํŒ…์ฝ”๋“œ๋Š” ์„œ๋น„์Šค์˜ ๊ฒฝ์šฐ์™€ ๋™์ผ

      package kr.happyjob.study.mngNot.dao;
      
      import java.util.List;
      import java.util.Map;
      
      import kr.happyjob.study.mngNot.model.NoticeModel;
      
      public interface MngNotDao {
      
      	/**  ๋ชฉ๋ก ์กฐํšŒ */
      	public List<NoticeModel> noticelist(Map<String, Object> paramMap) throws Exception;
      	
      	/** ๋ชฉ๋ก ์นด์šดํŠธ ์กฐํšŒ */
      	public int countnoticelist(Map<String, Object> paramMap) throws Exception;
      	
      }
  • SQL ๋‹จ (/src/main/resources/sql/MngNot/MngNotMapper.xml)

    • ์†Œ์Šค์ฝ”๋“œ ํŒŒ์ผ ์ตœ์ƒ๋‹จ <mapper> namespace ์— ์•„๋ž˜์™€ ๊ฐ™์ด MngNotDao ์ฐพ์•„๊ฐ€๋„๋ก ๊ฒฝ๋กœ ๋งž์ถค

      <?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="kr.happyjob.study.mngNot.dao.MngNotDao">
    • ๊ฒŒ์‹œ๊ธ€ ๋ชฉ๋ก์กฐํšŒํ•˜๋Š” <SELECT>์— id (noticelist) ๋„ฃ๊ณ , resultType ๋„ NoticeModel ์ฐพ์•„๊ฐˆ ์ˆ˜ ์žˆ๊ป˜๋” ๋ณ€๊ฒฝ

    • Toad ํ™œ์šฉํ•˜์—ฌ SQL ์ฟผ๋ฆฌ๋ฌธ ์ž‘์„ฑ. ์ฟผ๋ฆฌ๋ฌธ์ด ์™„์„ฑ๋˜๋ฉด ๋ณต์‚ฌํ•ด์„œ <SELECT> ๋‚ด๋ถ€์— ๋ณต๋ถ™

    • JSP๋‹จ์—์„œ <input> ์œผ๋กœ ๊ตฌํ˜„ํ•œ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์€ ๋ณธ ํŒŒ์ผ <SELECT> ์—์„œ Mybatis ๋ฌธ๋ฒ• <where> , <if> , <choose> , <otherwise> ํ™œ์šฉํ•˜์—ฌ ์ž‘์„ฑ

      <!--  ๋ชฉ๋ก ์กฐํšŒ -->
      <select id="noticelist" resultType="kr.happyjob.study.mngNot.model.NoticeModel">
          /*kr.happyjob.study.mngNot.dao.MngNotDao.noticelist*/
          select nt.notice_del_yn
          ,nt.loginID
          ,nt.notice_no
          ,nt.notice_title
          ,nt.notice_date
          ,nt.notice_cont
          ,nt.file_no
          ,fi.file_name
          ,fi.logic_path
          ,fi.physic_path
          ,fi.file_size
          ,fi.exten
          ,ui.name
          from tb_notice nt
          inner join tb_userinfo ui on ui.loginID = nt.loginID
          left outer join tb_file fi on fi.file_no = nt.file_no       
          <where>
              <if test="(delyn != null) and (!delyn.equals(''))">
                  and nt.notice_del_yn = #{delyn}
              </if>
              <if test="(sname != null) and (!sname.equals(''))">
                  <choose>
                      <when
                            test="searchKey eq 'writer'.toString()">
                          and ui.name Like CONCAT('%', #{sname}, '%')
                      </when>
                      <when
                            test="searchKey eq 'title'.toString()">
                          and nt.notice_title LIKE CONCAT('%', #{sname}, '%')
                      </when>
                      <otherwise>
                          and (   ui.name Like CONCAT('%', #{sname}, '%')
                          or nt.notice_title LIKE CONCAT('%', #{sname}, '%')
                          )
                      </otherwise>
                  </choose>
              </if>		
          </where>		
          ORDER BY nt.notice_date DESC
          LIMIT #{pageindex}, #{pageSize}
      
      </select>
    • ์ฐธ๊ณ ๋กœ Mapper.xml ํŒŒ์ผ์„ ์™ธ๋ถ€์—์„œ ๋ณต์‚ฌํ•ด์„œ ํ”„๋กœ์ ํŠธ ํด๋”์— ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜, ๊ธฐ์กด์— ์กด์žฌํ•˜๋˜ Mapper.xml ํŒŒ์ผ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒฝ์šฐ, ํ†ฐ์บฃ์ด ์ž๋™์œผ๋กœ ์ปดํŒŒ์ผํ•˜์ง€ ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— Eclipse IDE ์—์„œ ์ˆ˜๋™(๊ฐ•์ œ) ์ปดํŒŒ์ผ ์ž‘์—…์„ ํ•ด์ค˜์•ผํ•จ

      Eclipse IDE ์ƒ๋‹จ Project ํด๋ฆญ > Clean ํด๋ฆญ

      Eclipse IDE ํ•˜๋‹จ Server ํƒญ ํ•ญ๋ชฉ ๋งˆ์šฐ์Šค ์˜ค๋ฅธ์ชฝ > Clean > Server Run (์—ฌ๊ธด ์ปดํŒŒ์ผ ์ƒํ™ฉ์„ ์„œ๋ฒ„์— ๋ฐ˜์˜ํ•˜๋Š” ๋‹จ๊ณ„)

  • Java ๋‹จ - Controller (/mngNot/controller/MngNotController.java)

    • ๋งˆ์ง€๋ง‰ ๋‹จ๊ณ„, ๋ฐ์ดํ„ฐ ๋ฟŒ๋ ค์ฃผ๊ธฐ ์ž‘์—…
    • Controller ํŒŒ์ผ ๋‚ด public String noticelist ์—์„œ return "mngNot/noticelist"; ์„ return "mngNot/noticelistgrd"; ๋กœ ๋ณ€๊ฒฝ
  • JSP๋‹จ (/view/mngNot/noticelistgrd.jsp)

    • noticelist.jsp ์™€ ๊ฐ™์€ ํด๋”์— noticelistgrd.jsp ํŒŒ์ผ ์ƒ์„ฑ (/system/comGrdCodeList.jsp ๊ฐ€์ ธ์˜ค๊ณ , ์กฐ๊ฑด์— ๋งž๊ฒŒ ํŒŒ์ผ๋‚ด์šฉ ์ˆ˜์ •)