본문 바로가기

Project/2. My First Website <Mybatis>

project 2. 1 My first website/ Mybatis란? 그리고 login 페이지만들기

 

메인페이지 index.jsp

 

header와 footer파일을 나눠 모든 각각의 페이지에 삽입시켜줬다

헤더는 상단 버튼들 <login> <signup> <board>

퓨터는 기본 저작권 내용 ~~뭐 약관 등등~~ + <hr> 태그

index에는 정말 welcome to my first website 내용만 있다고 보면됨.. 

 

DB는 Mybatis로 오라클에 연결했고,

회원과 관련된 member mapper/ 게시판 글과 관련된 board mapper를 만들었다.

SqlSession으로 Dao가 Db 접근을 할 수 있게했다.

 

MyBatis란?

1. MyBatis 는 모든 쿼리문(SQL)을 Mapper 에 저장한다.

2. Mapper 에 접근해서 쿼리문을 실행하는 역할을 SqlSession 클래스가 담당한다.

3. SqlSession 클래스를 사용하려면 다음 과정을 거친다.

  1) SqlSessionFactoryBuilder 를 통해서 SqlSessionFactory 를 만든다.

  2) SqlSessionFactory 를 통해서 SqlSession 을 만든다.

4. DBService 클래스는 SqlSessionFactory 를 만들어서 리턴하는 역할이다.

 

 

 

 

 

mybatis.config package

1. sqlmapper-config.xml

 

<configuration>

 

<environments default="development">

<environment id="development">

    

<transactionManager type="JDBC" />

    

    <!-- Connection Pool 관리 -->

    <dataSource type="POOLED">

    <property name="driver" value="oracle.jdbc.driver.OracleDriver" />

    <property name="url" value="jdbc:oracle:thin:@오라글계정주소" />

    <property name="username" value="계정" />

    <property name="password" value="비밀번호" />

    </dataSource>

 

</environment>

</environments>

 

 

<!-- 어떤 mapper 들을 사용할 것인가? -->

<mappers>

    <mapper resource="mybatis/mapper/member.xml"/>

    <mapper resource="mybatis/mapper/board.xml"/>

</mappers>

 

</configuration>

 

 

2. DB연결하는 클라스 생성 DBService.java

:외부에서는 다음 과정으로 factory 를 가져다 사용한다.

1. DBService 객체를 생성한다.

   DBService.getInstance()

2. DBService 객체를 이용해 getFactory() 를 호출한다.

   DBService.getInstance().getFactory()

 

 

 

public class DBService {

 

// SqlSessionFactory 는 singleton pattern 으로 생성해야 한다.

 

// 필드

private SqlSessionFactory factory;

 

// 생성자 (factory 만드는 역할)

private DBService() {

try {

String resource = "mybatis/config/sqlmap-config.xml";  // 패키지 경로와 파일명에 따라서 작성해야 한다.

InputStream inputStream = Resources.getResourceAsStream(resource);

factory = new SqlSessionFactoryBuilder().build(inputStream);

} catch (Exception e) {

// TODO: handle exception

}

}

 

// 생성자가 private 이므로 여기서 DBService() 를 new 해야 한다.

private static DBService service = new DBService();

 

// new DBService() 가 호출되면 SqlSessionFactory factory 가 생성된다.

// 생성된 factory 를 호출할 수 있는 DBService service 객체를 리턴할 수 있는 getter 를 만든다.

public static DBService getInstance() {

return service;

}

 

// private SqlSessionFactory factory 를 외부에 리턴하는 getter 를 만든다.

public SqlSessionFactory getFactory() {

return factory;

}

}

 

 

mybatis.mapper package

 

위에 언급했듯이 sql 쿼리문들을 처리할 mapper.xml 는 아래와같이  member/ board 나눠서 작성하였다.

이렇게 아이디를 나눠 한 기능당 하나씩 아이디를 달아서 쿼리문 작성

예) selectBymIdmPw 는 로그인 기능/ memberInsert는 회원가입기능

 

그에 따라 Dao와 Command를 구성했다.

예)

1. Dao 페이지 중 selectBymIdmPw 부분

public MemberDto selectBymIdmPw(MemberDto mDto) {

SqlSession ss = factory.openSession();

MemberDto resultDto = ss.selectOne("mybatis.mapper.member.selectBymIdmPw",mDto);

ss.close();

return resultDto;

}

 

2. LoginCommand

public class LoginCommand implements MemberCommand {

 

@Override

public ViewForward execute(HttpServletRequest request, HttpServletResponse response) throws Exception {

request.setCharacterEncoding("utf-8");

String mId = request.getParameter("mId");

String mPw = request.getParameter("mPw");

 

MemberDto mDto = new MemberDto();

mDto.setmId(mId);

mDto.setmPw(mPw);

 

//login user

MemberDto loginUser = MemberDao.getInstance().selectBymIdmPw(mDto);

HttpSession session = request.getSession();

if (loginUser != null) {

session.setAttribute("loginUser", loginUser);

}

 

ViewForward vf = new ViewForward();

vf.setPath("index.jsp");

vf.setRedirect(true);

 

return vf;

 

}

}

 

 

 

 

 

보드도 위 방법과 다를 것 없이 진행

보드다오, 보드커맨드 패키지 만들어 각각 연결, 컨트롤러를 이용해 뷰로 결과를 전송해줬다.

 

 

 

 

이렇게 로그인 페이지 완성!