새소식

JAVA 교육/Spring

2019/10/14 Framework (myBatis )

  • -

1. Java Framework 란?
개발에 있어 구조화된 기술 방식

- Spring Framework
- Struts Framework : 잘 사용되지 않고 있음(기존에 사용하던 기업은 아직까지 사용하는 경우가 있음)
- my Batis Framework :데이터베이스 관련

※ Framework의 기술방식은  프로젝트를 진행 중에 그 구조화된 방식을 바꿀 수가 없다.

2. 자바 기반 프로젝트 개발방식 
- Model1 방식
- MVC 패턴(Model2) 방식
  ->MyController
  ->Spring Framework
  ->MyController+mybatis Framework
  ->Spring Framework+myBatis Framework (전자정부 표준 프레임 워크)

 

3. myBatis 
개발환경 구축이 복잡!!(단, 에러 없이 한 번만 구축해 놓으면 계속 사용할 수 있다)

전자정부 표준 프레임 워크 tool

http://spring.io 

 

spring.io

Let's build a better Enterprise. Spring helps development teams everywhere build simple, portable, fast and flexible JVM-based systems and applications.

spring.io

위의 페이지에 들어가서 TOOLS 에 들어가 전에 있던 버전을 다운받자

 

1

 

2

 

3

 

4

 

 

4. 전자정부 표준프레임워크 3.8 기반 개발 시작하기(Getting Started)

https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:dev3.8:gettingstarted

 

egovframework:dev3.8:gettingstarted [eGovFrame]

본 가이드는 전자정부 표준프레임워크 기반의 단순한 응용프로그램(HelloWorld)를 직접 실습해 봄으로써 빠른 시간 내에 전자정부 프레임워크의 기본 기능을 파악하기 위하여 제공한다. 본 가이드의 사용자는 java 및 spring framework에 대한 기본적인 지식이 있다는 것을 가정하였다. 아래의 3가지 단계에 따라 순서대로 따라하기 방식으로 진행된다. 개발환경 설치 : 실습을 위한 개발환경을 구축한다. 프로젝트 생성 : 제공한 샘플 프로젝트를 이용

www.egovframe.go.kr

1

 

2

 

3

 

이렇게 web.xml에 insert 태그나 update 태그를 이용해서 SQL문을 작성하는 것이 myBatis 이다

 

※ Spring 버전 4, 5 버전을 설치해서 사용을 할 때는 프러그인 설치를 해서 사용해야 한다.

 


1. myBatisTest

 eclipse 사용하던 JSP 와 거의 동일한 기능을 할 수 있지만, Spring 을  더 이용할 수 있다는 장점이 있다.

 

JSP 사용할 때와 마찬가지로, Dynamic Web Project를 생성하여 이용할 수 있다.

 

[MyBatis 라이브러리]

https://blog.mybatis.org 

 

The MyBatis Blog

A blog about the the MyBatis data mapper framework.

blog.mybatis.org

mybatis 이용하기 위한 lib를 다운로드하자.
경로 : Products->MyBatis 3-> mybatis-3.5.2.zip

다운로드한 라이브러리를  WEB-INF/lib 에 넣어두자

myBatis는 DB에 관련된 구조화된 기술이기 때문에 JSP에서 사용하던 DBOpen을 사용하지 않을 것이다.

이제는 DBOpen 기능을 web.xml 에 코딩하여 사용하자

 

1) jdbc.xml

 

▶ 일반적인 폴더를 생성하여 생성한 폴더 안에 jdbc.xml을 만들자
jdbc.xml 파일은  DB를 연동시켜 주면서 SQL 문을 적은. xml 파일을 불러오는 역할을 할 것이다.

라이브러리를 다운받았을 때  같이 다운된 mybatis에 대한 설명이 있는 pdf에 있는 소스를 복사해 오자  3p

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">

<!-- jdbc.xml 데이터베이스 연결 (DBOpen.java 와동일)  -->
<configuration>
	
	<!--  오라클 DB -->
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver"
					value="oracle.jdbc.driver.OracleDriver" />
				<property name="url"
					value="jdbc:oracle:thin:@localhost:1521:xe" />
				<property name="username" value="java0514" />
				<property name="password" value="1234" />
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<mapper resource="config/mem.xml" />
	</mappers>
</configuration>

 

▶ DBOpen에 코딩했던 방식으로 dataSource에 코딩

▶ mapper 에는 DB 연동 시에 가져올  SQL 문을 가지고 있는. xml 파일 경로를 적어 주자

 

2) mem.xml

라이브러리를 다운받았을 때  같이 다운된 mybatis에 대한 설명이 있는 pdf에 있는 소스를 복사해 오자  21p
<?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">

<!-- mem.xml 실행한 SQL 문을 정의해 놓은 파일 -->
<mapper namespace="mem">

</mapper>

 

▲ 위에서 mapper에 연결해준 경로는 mem.xml이다
<mapper></mapper>태크에는 mem이라는 테이블의 SQL 문을 작성할 것이다.

 

3) MemMainTest.java

package net.mem;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MemMainTest {

	public static void main(String[] args) {
		// MyBatis-3기반 JDBC 연습
		try {
			// 1) DB 환경 설정 관련 파일 가져오기
			String resource="config/jdbc.xml";
			InputStream is=Resources.getResourceAsStream(resource);
			
			// 2) DB 연결하기 위한 펙토리빈 생성
			//-> 기존의 DBOpen + MemberDAO 의 합성한 버전이라 생각하면 된다
			SqlSessionFactory ssf=new SqlSessionFactoryBuilder().build(is);
			System.out.println("DB연결 성공");
			
			// 3) 쿼리문 생성
			//PreparedStatement 와 비슷한 기능
			SqlSession sql=ssf.openSession(true);
			
			
			// 4) 쿼리문 실행
			
		}catch(Exception e) {System.out.println("실패"+e);}
	}//main() end

}//class end
16~17 line  DB 환경 설정에 관한 파일 resource를 inputStream 참조변수 is 에 할당 
21~22 line  (JSP : Connection con=DBOpen.connection()) 역할을 하는 부분
26      line  preparedStatement 와 같은 기능

▶ mem이라는 테이블을 만든 후, mem에 맞는 DTO(MemDTO)를 작업을 해주자.
(단, DTO의 생성자 함수를 overloading 해주어 모든 매개변수가 들어가는 경우로 코딩)

	public MemDTO() {}//기본 생성자 
	// 매개변수가 다른 각각의 생성자 함수 추가
	//1) num
	public MemDTO(int num) {
		this.num=num;
	}
	//2) num,age
	public MemDTO(int num,int age ) {
		this.num=num;
		this.age=age;
	}
	//3) name,age
	public MemDTO(String name,int age ) {
		this.name=name;
		this.age=age;
	}
	//4) num, name, age
	public MemDTO(int num, String name, int age ) {
		this.num=num;
		this.name=name;
		this.age=age;
	}

 

    -행추가

4) MemmainTest.java

// 4) 쿼리문 실행
//	가) 행추가
		//mem.xml 에가서 mem mapper의 insertRow 를 찾아라
int cnt=sql.insert("mem.insertRow",new MemDTO("사계절",80));
System.out.println("행추가결과: "+cnt);

생성한 sql에에 mem.insetRow 라는 함수에 MemDTO() 에 매개변수를 담아서 보내준다

5) mem.xml

<mapper namespace="mem">
	<insert id="insertRow" parameterType="memDTO">
		INSERT INTO mem(num,name,age)
		values(mem_seq.nextval,#{name},#{age} )
								<!-- DTO 의 name,age 에 접근  -->
	</insert>
</mapper>

id를 insertRow,  parameterType 를 memDTO 로 설정을 해준 후  <insert> 태그 안에 SQL 문을 적어 준다.

   

-행목록

 

1) MemmainTest.java

//	나) 전체목록
	List list=sql.selectList("mem.selectAll");
	for(int idx=0;idx<list.size();idx++) {
	MemDTO dto=list.get(idx);
	System.out.println(dto.getNum()+"");
	System.out.println(dto.getName()+"");
	System.out.println(dto.getAge()+"");
	System.out.println();
    

 

2)mem.xml

<mapper namespace="mem">
<resultMap type="" id="rs">
		<!--<id/> PK칼럼 지정  -->	
		<!-- resultSet 에 있는 값을 불러 왔다.  -->
		<result column="num" property=""/>
		<result column="name" property=""/>
		<result column="age" property=""/>
</resultMap>
    
    <select id="selectAll" resultMap="rs">
		SELECT num,name,age
		FROM MEM
		RODER BY num DESC
	</select>
 </mapper>

 

결과

 

※ mapper 에서 일반적으로 <![CDATA[  ]]> 안에 mapper 영역을 설정을 해 주어야한다
(delete TEST 에서는 <>= 수식기호들을 사용해야 하기 때문에 영역을 지정해 주자)

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.