C#에서 Mybatis사용하기 - (2)

2019. 12. 4. 16:55C# .NET/Mybatis .NET

저번 포스팅에서는 MybatisNET를 사용하기 위한 전반적인 설정을 했습니다.

이제 다음 단계로 소스코드와 SQL문을 작성해보겠습니다.

 

먼저 애플리케이션과 데이터베이스 사이의 값들을 매핑해서 주고받는 역할을 하는 VO(Value Object)객체 클래스를 만들어보겠습니다.

프로젝트 -> VO폴더 -> StudentVO.cs 의 구조로 cs 파일 생성을 먼저 해주었습니다.

다른 위치에 cs파일을 생성해주셔도 상관없지만 VO클래스의 경로를 잘 기억해놓으시기 바랍니다.

(이어지는 내용에 필요합니다.)

 

[StudentVO.cs]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace DBConnector_blog.VO
{
    public class StudentVO
    {
        public string ID { get; set; }
        public int AGE { get; set; }
        public string BIRTH { get; set; }
        public string NAME { get; set; }
        public string REGDATE { get; set; }
    }
}
 

주의 : 클래스 앞에 접근제한자 public을 붙여주세요. 생략해놓은 상태라면 internal로 설정됩니다.

접근제한자란 여기를 참고해주세요. -> https://hjhit.tistory.com/40

그리고 저는 JAVA에서 ibatis를 주로 써왔었습니다. 그래서 VO객체의 멤버변수명을 설정하는데서 살짝 해맸었습니다.

두 가지를 잠깐 비교해보고 가겠습니다.

좌 : C# VO 클래스 코드                                    우 : JAVA VO클래스 코드

JAVA에서의 ibatis는 DB 데이터와 VO객체를 매핑할 때 사용하는 getter, setter메서드 이름을 위 사진에서 보이는 코드처럼 정해진 규칙, 모양대로 써줘야 합니다.

반면에 C#의 VO 객체는 매핑을 하기 위해서 DB필드명과 VO멤버변수 명을 똑같이(영문 대소 구분) 정의해주면 매핑이 되었습니다.

 

앞의 설명이 이해가 안되신다면 이것만 기억하세요. C#에서 Mybatis를 쓰시려면 DB필드명과 VO객체 변수명은 대소문자까지 똑같아야 합니다.

틀리면 Mybatis가 이름 매핑을 못해서 데이터가 안 넘어온것처럼 아무것도 출력되지 않습니다.

 

자 이제 VO객체까지 작성하셨다면 이제 SQL문을 작성해 보겠습니다.

프로젝트 -> sqlmap -> custom-mssql.xml 의 구조로 xml 파일을 만들어줬습니다.

이전 포스팅을 보시면 이곳을 찾아서 custom-mssql.xml 파일을 resource로 등록하는 부분을 찾으실 수 있습니다.

SqlMap.config 에서의 xml파일 경로 설정

[custom-mssql.xml]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8"?>
<sqlMap namespace="DBConnector_blog" 
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns="http://ibatis.apache.org/mapping">
  <alias>
  <typeAlias alias ="studentVO_nickname" type="DBConnector_blog.VO.StudentVO"/>
  </alias>
 
  <statements>
    <select id ="testSelect" resultClass="studentVO_nickname">
      SELECT * FROM STUDENT
    </select>
  </statements>
</sqlMap>

alias는 StudentVO를 별칭으로 등록해두고 xml 파일 내에서 가져다 쓰기 위해 등록해서 쓰기 위한 것입니다.

위에서 VO객체의 경로를 기억해두라고 했던 것은 여기에 사용하기 위함입니다.

 

resultClass에 직접 경로를 포함한 이름을아래와 같이 사용해도 결과는 똑같지만

        resultClass="DBConnector_blog.VO.StudentVO"

StudentVO 객체를 사용해야하는 sql문이 여러개 존재한다면 별칭을 하나 정해놓고 그 이름만 가져다 쓰는게 훨씬 깔끔하고 가독성도 좋을겁니다.

 

resultClass가 뭐냐? 하시는 분들은 여기를 참고해주세요

                  ->http://blog.naver.com/PostView.nhn?blogId=amicas06&logNo=100093145531

 

한가지 의문점은 JAVA ibatis는 구글로 넘어가서 Mybatis로 이름이 바뀌면서
parameterClass -> parameterType

resultClass -> resultType

등으로 태그 명들이 다 바뀌었는데 MybatisNet은 이름만 바뀌었네요???

다른 태그들도 ibatis를 쓰듯이 쓰면 될듯 싶습니다.

 

자 이제 다 끝나갑니다. 마지막까지 잘 따라와주세요.

이제 Form에 아래의 코드를 추가해주세요.

 

[Form1.cs]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
using System.Collections.Generic;
using IBatisNet.DataMapper;
using IBatisNet.DataMapper.Configuration;
 
namespace DBConnector_blog
{
    public partial class Form1 : Form
    {
        private DataTable date_table = null;
        public Form1()
        {
            InitializeComponent();
 
            try
            {
                DomSqlMapBuilder dom = new DomSqlMapBuilder();
                //SqlMap.config 경로 잘 설정 해주세요.
                ISqlMapper sqlMapper = dom.Configure("../../SqlMap.config");
                IList<VO.StudentVO> test = sqlMapper.QueryForList<VO.StudentVO>("testSelect"null);
 
                dataGridView1.DataSource = test;
                
                //Grid에 여백없게 
                dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
 
                //헤더(열) 이름 변경
                dataGridView1.Columns[0].HeaderText = "고유번호";                
                dataGridView1.Columns[1].HeaderText = "나이";
                dataGridView1.Columns[2].HeaderText = "생일";
                dataGridView1.Columns[3].HeaderText = "이름";
                dataGridView1.Columns[4].HeaderText = "등록일자";            
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
        }
    }
}
 

여기까지 모두 끝나셨나요?

 

그럼 이제 실행을 해보겠습니다.

 

잘 출력이 되었죠? 

저기 조회 버튼은 아무 기능 없는 놈입니다.

일련의 과정을 잘 따라오셨다면 실행화면이 나오자마자 데이터가 불려져 있을습니다.

 

다음번에는 MybatisNet으로 동적쿼리를 사용하는 방법을 포스팅 해보겠습니다.

'C# .NET > Mybatis .NET' 카테고리의 다른 글

C#에서 Mybatis사용하기 - (1)  (0) 2019.12.03