MyBatis

Size: px
Start display at page:

Download "MyBatis"

Transcription

1 MyBatis

2 목차 mybatis 시작하기 데이터베이스프로그래밍 데이터매퍼 MYBATIS 이책은구성은 정리 mybatis 가장간단히실행하기 필수구성요소 MYBATIS 설정파일 설정파일로드하기 데이터조회하기 데이터입력하기 데이터수정하기 데이터삭제하기 mybatis 웹애플리케이션개발하기 설치하기 MYBATIS 설정파일 매퍼 XML과매퍼애노테이션 트랜잭션관리 좀더복잡한매핑규칙정의 mybatis spring 연동모듈을사용한웹애플리케이션개발하기 설치하기 SPRING 설정 레이어별예제 mybatis 설정파일상세 (mybatis-config.xml) 매퍼 XML 과매퍼애노테이션상세 동적 SQL mybatis generator 참고자료 IBATOR 에서 MYBATIS 로바꾸기 MYBATIS EDITOR 39

3 1.MyBatis 시작하기

4 1.1 mybatis 시작하기 데이터베이스프로그래밍 자바를사용한개발에는많은분야가있다. awt 와 swing 을사용한 GUI 프로그래밍, 자바 ME 를통한모바일개발과웹애플리케이션개발이있다. 국내에서는아무래도웹애플리케이션개발이가장많지않을까생각된다. 웹애플리케이션개발할때는데이터베이스연동을위해 JDBC 를사용하여데이터를조회하고입력하거나수정, 삭제하는코드를작성하게된다. 웹애플리케이션개발자에게있어서 JDBC 코드를작성하는일에가장많은시간을소요하게된다. 그럼먼저일반적인 JDBC 코드를한번보도록하자. Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis", "mybatis", "mybatis"); String sql = "SELECT comment_no, user_id, comment_content, reg_date FROM comment"; stmt = conn.preparestatement(sql); rs = stmt.executequery(); List<Comment> comments = new ArrayList<Comment>(); while (rs.next()) { Comment comment = new Comment(); comment.setcommentno(rs.getlong("comment_no")); comment.setuserid(rs.getstring("user_id")); comment.setcommentcontent(rs.getstring("comment_content")); comment.setregdate(rs.getdate("reg_date")); comments.add(comment); catch (Exception e) { e.printstacktrace(); finally { try { rs.close(); catch (SQLException e) { try { stmt.close(); catch (SQLException e) { 4 MyBatis

5 try { conn.close(); catch (SQLException e) { 전통적으로사용하던 JDBC 코드는일단장황하다. 1. 먼저데이터베이스연결과데이터를가져오기위한각종자원을셋팅해야한다.(1 ~ 10 라인 ) 2. 데이터를조회후모델에셋팅하는과정을일일이거친다.(14 ~ 18 라인 ) 3. 앞서 1 번과정에서셋팅한각종자원을해제하는작업을진행한다.(25 ~ 35 라인 ) 여기서 2 번의과정인모델에셋팅하는과정은손에쥐가날만큼귀찮은작업이면서도오류의여지가너무많다. 특히테이블구조나모델클래스가변경되는날이면일을손에서놔버리고싶은심정이들수도있다. 즉필자가생각하는 JDBC 코드의어려움이몇가지있다. 1. 일단너무복잡하다. 특정테이블의칼럼이많다고생각해보라 2. 매번자원을관리하는게개발자로하여금귀찮고실수로하나라도빼는날이면서비스의장애로이어질수있다. 3. 조회조건이많거나칼럼이엄청많은테이블에데이터를입력한다고생각해보자. 수십번값을셋팅하는코드는그냥한숨만나오게할뿐이다. 4. 칼럼이많은테이블의값을모델에셋팅하는상황이라면또한번우리를힘들게한다. 그럼이와같은역할을하는 MyBatis 코드를보자 <select id="selectforlist" resultclass="comment" parameterclass="java.util.map"> SELECT comment_no, user_id, comment_content, reg_date FROM comment </select> public List<Comment> queryforlist() { InputStream inputstream = Resources.getResourceAsStream("mybatis-config.xml"); SqlSessionFactory sqlsessionfactory = new SqlSessionFactoryBuilder().build(inputStream); return sqlsessionfactory.selectlist("selectcommentbycondition", condition); 자원을셋팅하고해제하는코드나모델에값을일일히셋팅하는과정을찾아볼수없다 데이터매퍼 MyBatis mybatis 는 SQL 문과저장프로시저를다양한방식으로매핑해주는퍼시스턴스프레임워크이다. 앞서간단한샘플에서봐서알겠지만전통적인방식의 JDBC 코드에비해파라미터를셋팅하거나결과에서값을가져오는많은코드를줄여준다. mybatis 가추구하는가치는 Simple( 단순함 ) 이기때문에, JDBC 코드에비해코드를줄여주는역할이대부분을차지한다. 5 MyBatis

6 이그림은 mybatis 의구조를설명한다. 간단히설명해보면구성요소들을몇가지그룹으로나눌수있다. 1. 설정파일 : SqlMapConfig.xml( 대개는 1 개의파일 ), SqlMap.xml( 대개는 1 개이상의파일들 ) 2. 매퍼정보 : 매핑규칙에대해기술하는것으로애노테이션과 XML 방식을제공한다. 3. 지원하는파라미터타입 : Map 객체, Java 와.NET 객체, 원시타입 (int, String 등 ) 4. 지원하는결과타입 : Map 객체, Java 와.NET 객체, 원시타입 (int, String 등 ) 최근많이사용되는 ORM 제품들이있다. 하이버네이트가대표적인제품인데, MyBatis 는 ORM 이라고부르지는않는다. ORM 의경우데이터베이스테이블과그관계를모델에매핑하는데반해 MyBatis 는 SQL 문과모델을매핑한다. 국내에는 MyBatis 2.x 대버전인 ibatis 사용자가굉장히많다. 대형포털회사에서는기본프레임워크를선정해서사용하고있으며, 전자정부프레임워크에도포함되어있다. 6 MyBatis

7 앞으로설명할때 ibatis 는 2.x 버전을통칭하는의미로사용할것이고, mybatis 는 3.x 버전을통칭하는의미로사용할것이다. ibatis 와 mybatis 의차이점을간단히살펴보면아래와같다. ibatis mybatis 이책은구성은 2 장에서는가장쉬운형태의간단한애플리케이션을작성해서 MyBatis 는어떻게설정하고어떻게코드를작성하는지보도록할것이다. 각각의코드는 Junit 테스트코드를통해실행해볼것이다. 3 장에서는 MyBatis 를사용하는웹애플리케이션을만들어서 MyBatis 가제공하는세부적인설정과각각의기능에대해대해자세히살펴볼것이다. xml 설정방식만을제공했던 ibatis 와는달리 mybatis 는 xml 와애노테이션을각각또는혼용해서사용가능하다. 트랜잭션을어떻게처리하는지도살펴볼것이며, 1:1, 1:N, 등의테이블관계를어떻게기술하는지도설명한다. 4 장에서는 MyBatis 의 Spring 연동모듈을사용해서 Spring 프레임워크와의연동법을살펴본다. 5 장에서는 MyBatis 설정파일의세부설정에대해알아보도록한다. 6 장에서는매퍼 XML 의세부설정에대해알아본다. 7 장에서는동적 SQL 에대해알아본다. 그리고나서별도의장을할당하지않고 MyBatis Generator 와 MyBatis 관련프로젝트에대해간단히언급하는형태로책을마무리하게될것이다 정리 간단한 JDBC 코드와그에대응되는 mybatis 코드를살펴보았다. 그리고데이터매퍼로써 mybatis 가어떻게구성되어있는지예전버전인 ibatis 와는간단히어떤차이점이있는지도볼수있었다. 상대적으로 mybatis 의경우, 몇가지필수설정을살펴보지못한터라그차이점을느끼기는쉽지않을것으로보인다. 7 MyBatis

8 1.2 mybatis 가장간단히실행하기 앞서우리는 mybatis 를살펴보기전에전통적인방식의 JDBC 샘플코드를살펴봤다. 그 JDBC 코드와동일한작동을하는 mybatis 코드도봤다. 단순히소스코드라인수만볼때 mybatis 코드가좀더짧았음은이미알수있다. 데이터매퍼인 mybatis 의구조를간단히살펴봤다. 간단한설정파일한개와 SQL 구문에대응되는매퍼, 그리고파라미터와결과데이터가구성요소의전부였다. SQL 와모델이매핑되는데이터매퍼의성격을가지고있어서 JDBC 코드를작성해본사람들에게는쉽게이해될수있음을짐작해볼수있었다. 이제부터는간단한형태의애플리케이션코드를작성해보면서 mybatis 에대해하나씩좀더알아보도록한다 필수구성요소 mybatis 를가장간단한형태로실행해보기위해서는몇가지필수구성요소가있어야한다. 1. mybatis 설정파일 (mybatis-config.xml) 2. 설정파일로드하기 3. 매퍼 XML(CommentMapper.xml) 4. mybatis java api 를사용하여실제데이터베이스와연동하기 mybatis 설정파일 먼저 mybatis 설정파일을살펴보도록한다. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//dtd Config 3.0//EN" " <configuration> <environments default="development"> <environment id="development"> <transactionmanager type="jdbc" /> <datasource type="pooled"> <property name="driver" value="com.mysql.jdbc.driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis_example" /> <property name="username" value="mybatis" /> <property name="password" value="mybatis" /> </datasource> </environment> </environments> <mappers> <mapper resource="kr/pe/ldg/mybatis/example1/repository/mapper/commentmapper.xml" /> </mappers> </configuration> 1. 트랜잭션관리자 (8 번라인 ) 2. 데이터베이스설정 (9 번 ~ 14 번라인 ) 8 MyBatis

9 3. 매퍼정보설정 (18 번라인 ) 설정파일로드하기 private SqlSessionFactory getsqlsessionfactory() { String resource = "mybatis-config.xml"; InputStream inputstream; try { inputstream = Resources.getResourceAsStream(resource); catch (IOException e) { throw new IllegalArgumentException(e); return new SqlSessionFactoryBuilder().build(inputStream); 설정파일을읽어서데이터베이스및트랜잭션관리자그리고매퍼의정보를가진객체를생성하는것이설정이후가장먼저진행해야하는작업이다. 설정정보를로드하는과정에서세개의클래스가필요하다. 1. org.apache.ibatis.io.resources 2. org.apache.ibatis.session.sqlsessionfactorybuilder 3. org.apache.ibatis.session.sqlsessionfactory SqlSessionFactory 객체가 mybatis 의전반적인정보를가지고제어를하게된다. 이러한특성으로인해이객체는애플리케이션내에서한개만생성되어야한다. 만약에한개이상생성될경우캐시와같은지속가능한정보가유지되지못하고매번생성되게된다 데이터조회하기 A. 매퍼 XML 설정 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//dtd Mapper 3.0//EN" " <mapper namespace="kr.pe.ldg.mybatis.example1.repository.mapper.commentmapper"> <select id="selectcommentbyprimarykey" parametertype="long" resulttype="kr.pe.ldg.mybatis.example1.model.comment"> SELECT comment_no AS commentno, user_id AS userid, comment_content AS commentcontent, reg_date AS regdate FROM COMMENT WHERE comment_no = #{commentno </select> </mapper> 매퍼 XML 은매퍼의명명공간과 SQL 구문으로구성된다. 조회를위한매핑구문을구성하는필수요소는 id 와 SQL 구문이다. 9 MyBatis

10 id 는 selectcommentbyprimarykey 이고 SQL 구문은 SELECT 로시작하는쿼리문이다. 파라미터와결과타입이모두원시타입이면 parametertype, resulttype 이모두생략가능하다. B. mybatis 자바 API 사용 public Comment selectcommentbyprimarykey(long commentno) { SqlSession sqlsession = getsqlsessionfactory().opensession(); try { return (Comment)sqlSession.selectOne( "kr.pe.ldg.mybatis.example1.repository.mapper.commentmapper.selectcommentbyprimarykey", commentno); finally { sqlsession.close(); 조회를위한코드는전반적으로아래와같은형식을사용하게된다. 1. SqlSession 객체생성 2. mybatis java api 사용 3. finally 로앞서생성한 SqlSession 객체에대해 close() 메서드호출 여기서기능이추가될경우, 개발자가처리해야할작업은매퍼 XML 을추가하고 mybatis 자바 API 를사용하는것이다. 이쯤에서독자는눈을감고전통적인방식의 JDBC 코드와 mybatis 를사용한코드를비교해보길바란다. 이때는머리속에서생각할수있는가장복잡한형태의테이블구조에빗대어생각해보면좋을것이다. mybatis 사용의잇점이머리에서그려지는가? C. Junit 코드로실행해보기 public class CommentSessionRepositoryTest { private CommentSessionRepository commentsessionrepository = new public void testselectcommentbyprimarykey() { Long commentno = 1L; commentsessionrepository.selectcommentbyprimarykey(commentno); mybatis 자바 API 를사용하는코드는내부적으로설정파일을로드하도록했기때문에, Junit 테스트코드작성시 new 를사용해서객체를생성후실행하면된다. 애플리케이션실행후로그를보면실제내부에서어떻게작동을했는지대략적으로나마파악이용이하다. D. 실행로그 Openning JDBC Connection Created connection ooo Using Connection [com.mysql.jdbc.connection@1542a75] ==> Preparing: SELECT comment_no AS commentno, user_id AS userid, comment_content AS commentcontent, 10 MyBatis

11 reg_date AS regdate FROM COMMENT WHERE comment_no =? ==> Parameters: 1(Long) <== Columns: commentno, userid, commentcontent, regdate <== Row: 1, fromm0, test, :40:24.0 Resetting autocommit to true on JDBC Connection Closing JDBC Connection Returned connection to pool. 1. 먼저 JDBC 연결한다. (1 번 ~ 3 번라인 ) 2. PreparedStatement 객체를생성하고실행한다. 이때실행되는쿼리문과파라미터, 그리고결과데이터를로그에친절하게출력해준다. (4 번 ~ 7 번라인 ) 3. JDBC 연결에대한자원을해제한다. (9 번 ~ 10 번라인 ) 데이터입력하기 A. 매퍼 XML 설정 <mapper namespace="kr.pe.ldg.mybatis.example1.repository.mapper.commentmapper"> <insert id="insertcomment" parametertype="kr.pe.ldg.mybatis.example1.model.comment"> INSERT INTO COMMENT(comment_no, user_id, comment_content, reg_date) VALUES (#{commentno, #{userid, #{commentcontent, #{regdate) </insert> </mapper> 입력를위한매핑구문을구성하는필수요소는 id 와 SQL 구문이다. id 는 insertcomment 이고 SQL 구문은 INSERT 로시작하는쿼리문이다. 입력작업의리턴값은반영된레코드의수이기때문에입력을위한매핑구문에서는 resulttype 속성이없다. B. mybatis 자바 API 사용 public Integer insertcomment(comment comment) { SqlSession sqlsession = getsqlsessionfactory().opensession(); try { String statement = "kr.pe.ldg.mybatis.example1.repository.mapper.commentmapper.insertcomment"; int result = sqlsession.insert(statement, comment); if (result > 0) { sqlsession.commit(); return result; finally { sqlsession.close(); 11 MyBatis

12 입력, 수정, 삭제처럼데이터를변경하는작업의경우트랜잭션이필요하다. 그래서코드는전반적으로아래와같은형식을사용하게된다. 1. SqlSession 객체생성 2. mybatis java api 사용 3. SqlSession 객체에대해 commit() 메서드호출 4. finally 로앞서생성한 SqlSession 객체에대해 close() 메서드호출즉앞서먼저본조회를위한코드와비교해볼때 3 번의 commit 과정이추가된다 데이터수정하기 A. 매퍼 XML 설정 <mapper namespace="kr.pe.ldg.mybatis.example1.repository.mapper.commentmapper"> <update id="updatecomment" parametertype="comment"> UPDATE comment SET comment_content = #{commentcontent WHERE comment_no = #{commentno; </update> </mapper> 수정을위한매핑구문을구성하는필수요소는 id 와 SQL 구문이다. id 는 updatecomment 이고 SQL 구문은 UPDATE 로시작하는쿼리문이다. 수정작업의리턴값은반영된레코드의수이기때문에입력과마찬가지로매핑구문에서는 resulttype 속성이없다. B. mybatis 자바 API 사용 public Integer updatecomment(comment comment) { SqlSession sqlsession = getsqlsessionfactory().opensession(); try { String statement = "kr.pe.ldg.mybatis.example1.repository.mapper.commentmapper.updatecomment"; int result = sqlsession.update(statement, comment); if (result > 0) { sqlsession.commit(); return result; finally { sqlsession.close(); 데이터삭제하기 A. 매퍼 XML 설정 <mapper namespace="kr.pe.ldg.mybatis.example1.repository.mapper.commentmapper"> <delete id="deletecomment" parametertype="long"> 12 MyBatis

13 DELETE FROM comment WHERE comment_no = #{commentno; </delete> </mapper> 삭제를위한매핑구문을구성하는필수요소는 id 와 SQL 구문이다. id 는 deletecomment 이고 SQL 구문은 DELETE 로시작하는쿼리문이다. 삭제작업의리턴값은반영된레코드의수이기때문에입력과마찬가지로매핑구문에서는 resulttype 속성이없다. B. mybatis 자바 API 사용 public Integer deletecomment(long commentno) { SqlSession sqlsession = getsqlsessionfactory().opensession(); try { String statement = "kr.pe.ldg.mybatis.example1.repository.mapper.commentmapper.deletecomment"; int result = sqlsession.delete(statement, commentno); if (result > 0) { sqlsession.commit(); return result; finally { sqlsession.close(); 13 MyBatis

14 1.3 mybatis 웹애플리케이션개발하기 이전장에서는간단한 mybatis 애플리케이션을만들었고, Junit 테스트코드를통해실행해봤다. 실행하는과정에출력되는로그를통해 mybatis 가내부에서 JDBC API 를어떻게활용하고있는지도대략짐작가능했다. 간단한애플리케이션코드에서는 XML 에서매핑구문을기술하는것과 mybatis 자바 API 를사용해서실제호출하는코드를본것이다. 이간단해보인코드가사실은실제 mybatis 를활용하는대부분의코드에서사용될수있으며그비율은프로젝트마다다르겠지만 50% 가넘을수도있다는점에서독자는 mybatis 의 50% 이상을이미습득했다고할수있다. 이제부터는본격적으로웹애플리케이션을작성하는방법을볼것이다. mybatis 코드의경우, 앞서본예제와크게다르지않다. 먼저본샘플에서는 Spring MVC + mybatis 단독 형태의예제임을먼저알려드린다 설치하기 A. 수동설치 mybatis 홈페이지의자바페이지인 에서압축파일을다운로드한다. 압축파일을풀어보면 mybatis-x.x.x.jar 형태의 jar 파일이있는데. 이파일을 WEB-INF/lib 밑에두면사실상설치는끝난다. 이글을작성하는시점에최신버전은 이라 jar 파일명은 mybatis jar 이다. B. maven 이용 dependency 에서 groupid 는 org.mybatis 이고, artifactid 는 mybatis 로설정하면된다. <dependency> <groupid>org.mybatis</groupid> <artifactid>mybatis</artifactid> <version>3.1.0</version> </dependency> C. ivy 이용 maven 과유사하다. org 는 org.mybatis 이고, name 은 mybatis 이다. 14 MyBatis

15 <dependency org="org.mybatis" name="mybatis" rev="3.1.0"/> mybatis 설정파일 public Integer deletecomment(long commentno) { SqlSession sqlsession = getsqlsessionfactory().opensession(); try { String statement = "kr.pe.ldg.mybatis.example1.repository.mapper.commentmapper.deletecomment"; int result = sqlsession.delete(statement, commentno); if (result > 0) { sqlsession.commit(); return result; finally { sqlsession.close(); mybatis 설정파일에서설정가능한항목을파악하기위해서가장간단한방법은 DTD 를보는것이다. DTD 의위치는 이다. 설정가능한항목은 10 개다. A. properties 많은프로젝트에서는개발장비와실제리얼장비로구분해서개발하는경우가많다. 이러한경우에설정에대해서는외부프로퍼티파일로분리하고서버별로프로퍼티파일을선택해서배포하는형태를주로택한다. mybatis 의 properties 는외부프로퍼티파일을읽어서설정파일내변수처럼사용할수있도록한다. 외부프로퍼티파일의설정을아래와같이하고파일명은 mybatis.properties 로정했다. jdbc.url=jdbc:mysql://localhost:3306/mybatis_example jdbc.driver= com.mysql.jdbc.driver jdbc.username=mybatis jdbc.password=mybatis 대개의경우, properties 의 resource 속성에파일을지정하면된다. resource 속성은클래스패스기준으로프로퍼티를찾는다. <properties resource="mybatis.properties"></properties> 모든설정을외부프로퍼티파일에둔다면상관없지만프로퍼티중에일부는서버별로변경없이사용할수있다. 그러한경우아래처럼설정하면된다. <properties resource="mybatis.properties"> <property name="jdbc.driver" value="com.mysql.jdbc.driver"/> <property name="jdbc.username" value="mybatis"/> <property name="jdbc.password" value="mybatis"/> </properties> 15 MyBatis

16 만약에프로퍼티파일을클래스패스기준이아닌절대경로로잡아야할경우, url 속성을사용하면된다. <properties url="file:d:\mybatis.properties"></properties> 이렇게설정한후사용할때는 ${key 형태로사용하면된다. 위프로퍼티파일의내용을사용한다면아래와같다. <property name="url" value="${jdbc.url" /> B. settings settings 에서설정되는각종프로퍼티는 mybatis 자바 API 가작동할때의규칙을정의한다. mybatis 가마이너업그레이드를진행하면서추가되는항목도종종있고몇가지항목은 JDBC 드라이버에따라지원되지항목도있다. 1. cacheenabled : 매퍼 XML 또는매퍼애노테이션에서설정하는캐시설정을전체기본설정으로가져갈지에대한옵션이다. mybatis 이기본캐시는분산캐시가아니라로컬캐시라서버가여러대인경우데이터변경에대해캐시에반영하는게문제가될수있다. 물론 Cacheonix 와같은분산캐시가개발중에있긴하지만 mybatis 의기본캐시가아니라서캐시에대해서는신중히결정해야한다. 디폴트는 true 이다. 2. lazyloadingenabled : 늦은로딩사용여부에대한옵션이다. 디폴트는 true 이다. 3. aggressivelazyloading : 점진적인늦은로딩사용여부에대한옵션이다. 디폴트는 true 이다. 4. multipleresultsetsenabled : 한개의구문에서여러개의결과셋허용여부에대한옵션이다. 드라이버에따라지원여부가확인해서사용해야한다. 디폴트는 true 이다. 5. usecolumnlabel : 칼럼명대신칼럼라벨사용여부에대한옵션이다. 디폴트는 true 이다. 6. usegeneratedkeys : 생성키사용여부에대한옵션이다. 디폴트는 false 이다. 7. automappingbehavior : 자동매핑에대한옵션이다. 선택가능한값은 NONE, PARTIAL, FULL 인데디폴트는 PARTIAL 이다. 자동매핑에대해서는뒤에서좀더다뤄보도록한다. 8. defaultexecutortype : 디폴트실행타입옵션이다. 선택가능한값은 Statement 객체를재사용하지않는 SIMPLE, PreparedStatement 객체를재사용하는 REUSE, Statement 를재사용하고작업을배치로일괄처리하는 BATCH 가있다. 디폴트는 SIMPLE 이다. 9. defaultstatementtimeout : 데이터베이스요청에대한타임아웃설정이다. 대부분의 JDBC 드라이버가자체타입아웃설정이있는데, 이값보다짧게가져가야할경우사용하면된다. 양수로셋팅해야하며디폴트는설정하지않는다. 10. saferowboundsenabled 11. mapunderscoretocamelcase : 테이블칼럼명은대개언더바를통해구분하는데, 자바의코딩컨벤션은 CamelCase 형태를취한다. 이경우언더바형태를 CamelCase 형태로자동매핑할지에대한옵션이다. 이옵션을사용하지않으면서테이블명의칼럼명은언더바로구분하고모델은 CamelCase 를사용할경우쿼리문에별칭을사용하거나별도의결과맵을사용해야한다. 디폴트는 false 이다. 12. localcachescope : 캐시의저장범위를정한다. SqlSession 객체를기준으로캐시할때는 SESSION, 구문별로캐시할때는 STATEMENT 를선택하면된다. 디폴트는 SESSION 이다. 13. jdbctypefornull : 14. lazyloadtriggermethods : defaultstatementtimeout 를제외하면대부분디폴트값을가지고있다. defaultstatementtimeout 도사실은 JDBC 별로디폴트값을가지고있는터라사실상대부분의옵션은디폴트값을가지고있어서그대로사용하면되는셈이다. 즉변경이필요한옵션에대해서만설정을하면되는데필자의경우에는 3 개정도수정해서쓰면대부분의애플리케이션의요구사항을만족할것으로생각한다. 16 MyBatis

17 <settings> <setting name="cacheenabled" value="false"/> <setting name="usegeneratedkeys" value="true"/> <setting name="mapunderscoretocamelcase" value="true"/> </settings> C. typealiases 대부분의모델클래스는패키지경로를함께사용하면굉장히긴문자열이된다. 샘플에서사용한 Comment 모델은패키지경로까지모두표기하면 kr.pe.ldg.mybatis.example1.model.comment 정도이다. 매핑구문의파라미터나결과타입에서작성하려고보면굉장히긴문자열이라종종오타가날수도있고문자열자체가길다보니귀찮은작업임에는충분히짐작하고남을만하다. 이를위해타입별별칭을설정할수있도록한다. <typealiases> <typealias type="kr.pe.ldg.mybatis.example1.model.comment" alias="comment" /> </typealiases> 이렇게설정하고매핑구문에서파라미터나결과타입에 Comment 를사용하면 kr.pe.ldg.mybatis.example1.model.comment 로인식하게된다. ibatis 에서는이렇게 XML 에서만타입별칭을설정할수있었다. 하지만 mybatis public class Comment { 원시타입이나흔하게사용되는자바타입에대해서는 mybatis 내부적으로처리된별칭또한존재한다. 별칭 매핑된타입 _byte _long _short _int _integer _double _float _boolean string byte long short int integer byte long short int int double float boolean String Byte Long Short Integer Integer 17 MyBatis

18 double float boolean date decimal bigdecimal object map hashmap list arraylist collection iterator Double Float Boolean Date BigDecimal BigDecimal Object Map HashMap List ArrayList Collection Iterator D. typehandlers PreparedStatement 에서파라미터를셋팅하거나결과셋을가져올때테이블칼럼각각의값을자바의적절한타입으로셋팅해서 가져오기위해사용한다. mybatis 에서이미정의된타입핸들러들이다. 타입핸들러 자바타입 JDBC 타입 BooleanTypeHandler java.lang.boolean, boolean 어떤호환가능한 BOOLEAN ByteTypeHandler java.lang.byte, byte 어떤호환가능한 NUMERIC 또는 BYTE ShortTypeHandler java.lang.short, short 어떤호환가능한 NUMERIC 또는 SHORT INTEGER IntegerTypeHandler java.lang.integer, int 어떤호환가능한 NUMERIC 또는 INTEGER LongTypeHandler java.lang.long, long 어떤호환가능한 NUMERIC 또는 LONG INTEGER FloatTypeHandler java.lang.float, float 어떤호환가능한 NUMERIC 또는 FLOAT DoubleTypeHandler java.lang.double, double 어떤호환가능한 NUMERIC 또는 DOUBLE BigDecimalTypeHandler java.math.bigdecimal 어떤호환가능한 NUMERIC 또는 DECIMAL StringTypeHandler java.lang.string CHAR, VARCHAR ClobTypeHandler java.lang.string CLOB, LONGVARCHAR NStringTypeHandler java.lang.string NVARCHAR, NCHAR NClobTypeHandler java.lang.string NCLOB ByteArrayTypeHandler byte[] 어떤호환가능한 byte 스트림타입 BlobTypeHandler byte[] BLOB, LONGVARBINARY DateTypeHandler java.util.date TIMESTAMP DateOnlyTypeHandler java.util.date DATE 18 MyBatis

19 TimeOnlyTypeHandler java.util.date TIME SqlTimestampTypeHandler java.sql.timestamp TIMESTAMP SqlDateTypeHandler java.sql.date DATE SqlTimeTypeHandler java.sql.time TIME ObjectTypeHandler Any OTHER, 또는명시하지않는경우 EnumTypeHandler Enumeration Type VARCHAR 문자열호환타입. EnumOrdinalTypeHandler Enumeration Type 위치가저장된것과같은어떤호환가능한 NUMERIC 또는 DOUBLE 대부분의경우이미정의된타입핸들러를사용하면된다. 별도의타입핸들러를만들기위해서는 org.apache.ibatis.type.basetypehandler<t> public class ExampleTypeHandler extends BaseTypeHandler<String> public void setnonnullparameter(preparedstatement ps, int i, String parameter, JdbcType jdbctype) throws SQLException { ps.setstring(i, public String getnullableresult(resultset rs, String columnname) throws SQLException { return public String getnullableresult(resultset rs, int columnindex) throws SQLException { return public String getnullableresult(callablestatement cs, int columnindex) throws SQLException { return cs.getstring(columnindex); 구현체를만들어서타입핸들러를명시하는방법은두가지가있다. typehandler 를사용하는방법과 package 를통해해당패키지내타입핸들러를자동검색하게하는방법이다. 단 package 를사용해서자동검색하는방식은애노테이션으로명시한타입핸들러만검색이된다. <typehandlers> <typehandler handler="kr.pe.ldg.mybatis.example.exampletypehandler"/> <package name=" kr.pe.ldg.mybatis.example "/> </typehandlers> 19 MyBatis

20 앞서언급하긴했지만 mybatis 는 SQL 구문과모델을매핑하는역할을담당한다. 그리고그내부에서는 JDBC api 를사용한다. 이두가지설명에서이해해야하는것이 mybatis 는이두가지외더이상의것을하지않는다. 즉 JDBC 의결과셋의메타데이터 (java.sql.resultsetmetadata 와같은 ) 를추출해서분석해서자동으로처리하는기능은하지않는다. 즉테이블의칼럼타입과자바모델의변수타입이명확한경우에는상관없으나혼란의여지가있다면반드시그에대한정보를셋팅해줘야의도된데로작동하게된다. MyBatis 는제네릭타입을체크해서 TypeHandler 로다루고자하는자바타입을알것이다. 하지만두가지방법으로이행위를재정의할수있다 : typehandler 요소의 javatype 속성추가 ( 예제 : javatype="string") TypeHandler 애노테이션추가. javatype 는무시된다. 관련된 JDBC 타입은두가지방법으로명시할수있다 : typehandler 요소에 jdbctype 속성추가 ( 예제 : jdbctype=varchar). TypeHandler 클래스에관련된 JDBC 애노테이션추가. jdbctype 는무시된다. E. objectfactory 대개의경우에는결과셋에대응되는모델을만들때는칼럼명 ( 또는칼럼별칭 ) 에대응되는 setter 메서드를호출해서모델을만들어리턴한다. 그리고추가로값을셋팅하고자할때는이모델에서다시셋팅하는과정을거치는게일반적이라고생각한다. 하지만이과정을 mybatis 매핑과정에서한꺼번에처리하고자할때는 ObjectFactory 를사용할수있다. 구현방식은 org.apache.ibatis.reflection.factory.objectfactory 인터페이스를구현하거나간단히 org.apache.ibatis.reflection.factory.defaultobjectfactory 를확장하는방법이있다. public class ExampleObjectFactory extends DefaultObjectFactory { public Object create(class type) { return super.create(type); public Object create(class type, List<Class> constructorargtypes, List<Object> constructorargs) { return super.create(type, constructorargtypes, constructorargs); public void setproperties(properties properties) { super.setproperties(properties); <objectfactory type="kr.pe.ldg.mybatis.example.exampleobjectfactory"> <property name="someproperty" value="100"/> </objectfactory> 20 MyBatis

21 F. objectwrapperfactory G. plugins mybatis 가매핑구문을실행하는과정에서특정시점의처리를가로채서부가적인작업이가능하도록해준다. 로그를찍어줄수도있고, 파라미터에대해공통적으로타입체크또는결과셋에대한처리를추가할수도있을것이다. 1. Executor (update, query, flushstatements, commit, rollback, gettransaction, close, isclosed) 2. ParameterHandler (getparameterobject, setparameters) 3. ResultSetHandler (handleresultsets, handleoutputparameters) 4. StatementHandler (prepare, parameterize, batch, update, query) type= Executor.class, method = "update", args = {MappedStatement.class,Object.class)) public class ExamplePlugin implements Interceptor { public Object intercept(invocation invocation) throws Throwable { return invocation.proceed(); public Object plugin(object target) { return Plugin.wrap(target, this); public void setproperties(properties properties) { <plugins> <plugin interceptor="org.mybatis.example.exampleplugin"> <property name="someproperty" value="100"/> </plugin> </plugins> H. environments mybatis 의환경설정은트랜잭션관리자와데이터소스설정이다. 이환경설정은 mybatis 단독으로사용할때만필요하며 Spring 연동모듈을사용할경우에는필요없다. Spring 연동모듈에서는트랜잭션과데이터소스설정을 Spring 에서제어하기때문이다. 첫번째로설정가능한항목은 transactionmanager ( 트랜잭션관리자 ) 이다. 트랜잭션관리자에서셋팅해야할값은 type 과각종프로퍼티이다. type 속성으로선택가능한값은 JDBC 와 MANAGED 이다. 1. JDBC : mybatis 자바 API 에서제공하는 commit(), rollback() 메서드등을사용해서트랜잭션을관리하는방식이다. 2. MANAGED : mybatis 자바 API 보다는컨테이너가직접트랜잭션을관리하는방식이다. 21 MyBatis

22 두번째로선택가능한항목은 datasource( 데이터소스 ) 이다. 데이터소스에서셋팅해야할값은 type 과각종프로퍼티이다. type 속성은선택가능한값은 UNPOOLED, POOLED, JNDI 이다. 1. UNPOOLED : 요청마다데이터베이스연결을새롭게생성하고처리후완전히해제한다. 데이터베이스연결을매번생성하는것이성능적으로영향이있기때문에간단한테스트용애플리케이션을제외하고대부분의서비스용애플리케이션에서는사용하지않는다. 이타입에서선택가능한프로퍼티는 5 가지정도된다. driver - JDBC 드라이버의클래스명 url - 데이터베이스연결을위한 URL 정보 username - 데이터베이스연결을위한계정명 password - 데이터베이스연결을위한계정의패스워드 defaulttransactionisolationlevel - 디폴트트랜잭션격리레벨 2. POOLED : 일정수의데이터베이스연결을풀에넣어두고필요할때마가가져다가사용하고사용하고나면다시풀에넣는다. 매번데이터베이스연결을생성하지않기때문에대부분의웹애플리케이션에서기본적으로사용한다. 앞서본 UNPOOLED 에서설정가능한프로퍼티와그외추가로프로퍼티를지정할수있다. poolmaximumactiveconnections 주어진시간에존재할수있는활성화된 ( 사용중인 ) 커넥션의수. 디폴트는 10 이다. poolmaximumidleconnections 주어진시간에존재할수있는유휴커넥션의수 강제로리턴되기전에풀에서 체크아웃 될수있는커넥션의시간. 디폴트는 20000ms(20 초 ) pooltimetowait 풀이로그상태를출력하고비정상적으로긴경우커넥션을다시얻을려고시도하는로우레벨셋팅. 디폴트는 20000ms(20 초 ) poolpingquery 커넥션이작업하기좋은상태이고요청을받아서처리할준비가되었는지체크하기위해데이터베이스에던지는핑쿼리 (Ping Query). 디폴트는 핑쿼리가없음 이다. 이설정은대부분의데이터베이스로하여금에러메시지를보게할수도있다. poolpingenabled 핑쿼리를사용할지말지를결정. 사용한다면, 오류가없는 ( 그리고빠른 ) SQL 을사용하여 poolpingquery 프로퍼티를셋팅해야한다. 디폴트는 false 이다. poolpingconnectionsnotusedfor poolpingquery 가얼마나자주사용될지설정한다. 필요이상의핑을피하기위해데이터베이스의타임아웃값과같을수있다. 디폴트는 0 이다. 디폴트값은 poolpingenabled 가 true 일경우에만, 모든커넥션이매번핑을던지는값이다. 3. JNDI : 컨테이너의 JNDI 컨텍스트를참조한다. 앞서본두가지타입과는다르며, 설정가능한프로퍼티는 2 개뿐이다. initial_context 이프로퍼티는 InitialContext 에서컨텍스트를찾기 ( 예를들어, initialcontext.lookup(initial_context)) 위해사용된다. 이프로퍼티는선택적인값이다. 이설정을생략하면, data_source 프로퍼티가 InitialContext 에서직접찾을것이다. data_source DataSource 인스턴스의참조를찾을수있는컨텍스트경로이다. initial_context 룩업을통해리턴된컨텍스트에서찾을것이다. initial_context 가지원되지않는다면, InitialContext 에서직접찾을것이다. 이환경설정을 ibatis 에서는한개만설정가능했으나 mybatis 에서는여러개설정하고 SqlSessionFactory 객체를생성하는시점에선택할수있도록했다. 필자의경우서버환경마다대부분동일하고 JDBC url 과계정정보정도만달라서여러개의환경설정을두는방식보다는프로퍼티파일을서버별로두는방식을사용하기때문에그효용성에대해서는크게와닿지않으나사용자는사람들의목적에따라분명 ibatis 때보다는좋은점이있을것이다. 22 MyBatis

23 I. databaseidprovider J. mappers 매핑구문을지정하는방법이다. ibatis 에서는매핑구문을정의하는방법이 2 가지뿐이었지만 mybatis 에서는 4 가지를제공한다. 1. 클래스패스내 XML 매핑파일지정 (resource 속성 ) 2. url 을사용한 XML 매핑파일지정 (url 속성 ) 3. 매핑애노테이션을사용하는인터페이스위치지정 (class 속성 ) 4. 패키지지정으로패키지내자동으로매핑구문검색 ( name 속성 ) <mappers> <mapper resource="org/mybatis/builder/authormapper.xml"/> <mapper url="file:///var/mappers/authormapper.xml"/> <mapper class="org.mybatis.builder.authormapper"/> <package name="org.mybatis.builder"/> </mappers> K. 정리여기에서대부분의프로젝트를작성할때가장공통적으로사용되는요소는 properties, settings, typealiases, environments, mappers 의 5 가지이다. 이요소들은명칭이나그역할이조금달라지긴했으나이전버전인 ibatis 에도거의동일하게있었다.. 그외추가된요소는 mybatis 의스펙을결정하면서도움이되리라생각되고실제몇몇사용자들이요청해서생긴것들이다. 단공통적으로사용할만한기능이아닌게많아서사용시원하는요구사항에충분히맞는지확인후사용해야한다 매퍼 XML 과매퍼애노테이션 ibatis 에서는매핑구문정의가 XML 에서만가능했다. 하지만 mybatis 에서는 XML 과애노테이션두가지방식을지원한다. 실제사용하는경우로따져보면 3 가지형태로사용된다. 1. XML 만사용 2. 애노테이션만사용 3. XML 과애노테이션을혼용해서사용 B. XML 만사용하는경우 XML 을사용하는경우는 ibatis 를사용해본사람이라면 XML 요소의명칭과동적 SQL 부분의변경사항정도를제외하면기존과거의동일하기때문에익히는데시간이얼마들지않을것이다. 앞서우리는앞장에서 XML 을사용하는경우에대한간단한에제를봤다. 이미본예제와함께동적 SQL 을사용하는경우의예제를추가해서다시보자 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//dtd Mapper 3.0//EN" " <mapper namespace="kr.pe.ldg.mybatis.example1.repository.mapper.commentmapper"> <select id="selectcommentbyprimarykey" parametertype="long" resulttype=" Comment"> SELECT comment_no AS commentno, 23 MyBatis

24 user_id AS userid, comment_content AS commentcontent, reg_date AS regdate FROM COMMENT WHERE comment_no = #{commentno </select> <select id="selectcommentbycondition" parametertype="hashmap" resulttype="comment"> SELECT comment_no, user_id, comment_content, reg_date FROM COMMENT <where> <if test="commentno!= null"> comment_no = #{commentno </if> </where> </select> </mapper> 두개의매핑구문이있다. 각각을 mybatis 자바 API 를통해사용할때는명명공간을반드시붙여서매핑구문아이디를사용해야한다. 1. selectcommentbyprimarykey sqlsession.selectone("kr.pe.ldg.mybatis.example1.repository.mapper.commentmapper.selectcommentbyprimarykey", 1L); 2. selectcommentbycondition sqlsession.selectlist("kr.pe.ldg.mybatis.example1.repository.mapper.commentmapper.selectcommentbycondition", new HashMap<String, Object>()); C. 애노테이션만사용하는경우 XML 을사용하는경우에서본 selectcommentbyprimarykey, selectcommentbycondition 모두애노테이션방식으로변경해보자. 애노테이션을사용할경우의단점은, 동적 SQL 을작성하기가어렵다는것이다. 애노테이션을제공하고있다. public interface CommentMapper "SELECT ", "comment_no, user_id, comment_content, reg_date ", "FROM COMMENT ", "WHERE comment_no = #{commentno" ) Comment selectcommentbyprimarykey(long commentno); 24 MyBatis

25 @SelectProvider(type=CommentSqlProvider.class, method="selectcommentbycondition") List<Comment> selectcommentbycondition(map<string, Object> condition); ibatis 와달리 mybatis 에서는동적 SQL 을자바코드로작성할수있도록 API 가추가되었다. 대표적인경우가샘플에서보이는 BEGIN, SELECT, FROM 등이다. 와 XML 동적 SQL 은그내용이많아뒤에서다시다루도록하겠다. public class CommentSqlProvider { public String selectcommentbycondition(commentexample example) { BEGIN(); SELECT("comment_no"); SELECT("user_id"); SELECT("comment_content"); SELECT("reg_date"); FROM("comment"); applywhere(example, false); return SQL(); D. XML 과애노테이션을혼용해서사용하는경우 XML 을사용하는경우에서 selectcommentbyprimarykey, selectcommentbycondition 두가지를봤다. 애노테이션형태를보여주기위해임의로 selectcommentbyprimarykey 를애노테이션방식을변경을했다. 그렇기때문에 selectcommentbycondition 은여전히 XML 에그대로남는다. <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//dtd Mapper 3.0//EN" " <mapper namespace="kr.pe.ldg.mybatis.example1.repository.mapper.commentmapper"> <select id="selectcommentbycondition" parametertype="hashmap" resulttype="comment"> SELECT comment_no, user_id, comment_content, reg_date FROM COMMENT <where> <if test="commentno!= null"> comment_no = #{commentno 25 MyBatis

26 </if> </select> </mapper> </where> 하지만 selectcommentbyprimarykey 는아래처럼애노테이션으로수정하였다. 필자의경우, 애노테이션에배열형태로넣었지만한개의문자열로넣어도된다. 배열형태로넣을경우, 모든문자열을순서대로붙여서한문자열로만들어서처리한다. 애노테이션을사용할경우의단점은, 동적 SQL 을작성하기가어렵다는것이다. 와 XML 동적 SQL 은그내용이많아뒤에서다시다루도록하겠다. public interface CommentMapper "SELECT ", "comment_no, user_id, comment_content, reg_date ", "FROM COMMENT ", "WHERE comment_no = #{commentno" ) Comment selectcommentbyprimarykey(long commentno); comment_no, user_id, comment_content, reg_date FROM COMMENT WHERE comment_no = #{commentno") List<Comment> selectcommentbycondition(map<string, Object> condition); 트랜잭션관리 A. SqlSessionFactory mybatis 의전반적인처리는 SqlSession 객체가담당한다. 그렇기때문에 SqlSession 객체가생성되는시점에트랜잭션에관련한속성이셋팅이된다. 그래서트랜잭션을처리하는방법을보기전에 SqlSession 객체가생성될때의형태를봐두는게좋다. 먼저 SqlSession 객체를생성하는 SqlSessionFactory 의메서드를살펴보자. 1. SqlSession opensession() 2. SqlSession opensession(boolean autocommit) 3. SqlSession opensession(connection connection) 4. SqlSession opensession(transactionisolationlevel level) 5. SqlSession opensession(executortype exectype,transactionisolationlevel level) 6. SqlSession opensession(executortype exectype) 7. SqlSession opensession(executortype exectype, boolean autocommit) 8. SqlSession opensession(executortype exectype, Connection connection) 26 MyBatis

27 B. SqlSession 객체의디폴트속성 SqlSessionFactory 가제공하는메서드가이렇게많긴하지만실제로는대부분 opensession() 으로처리가가능하다. opensession() 메서드를사용할경우, 앞서본 mybatis 설정파일의내용을그대로가져간다. 그외메서드는특별한경우 mybatis 의설정을그대로사용하지않고처리하기위함인데, 실제개발과정에서그러한경우가많지않으리라생각한다. opensession() 메서드를사용하여 SqlSession 객체를생성하게되면생성된객체의성격은디폴트상태가된다. 1. 트랜잭션은시작된다. 2. mybatis 설정파일의설정된형태의데이터소스를가진다. 3. 트랜잭션에관련한격리레벨이나전파설정은설정내용에의해셋팅된다. 4. PreparedStatement 는재사용되지않고처리는배치형태가아니다. C. SqlSession 이제공하는메서드 SqlSession 객체가제공하는메서드는많지만대략적으로보면아래와같다. 1. <T> T selectone(string statement) 2. <E> List<E> selectlist(string statement) 3. <K,V> Map<K,V> selectmap(string statement, String mapkey) 4. int insert(string statement) 5. int update(string statement) 6. int delete(string statement) D. 트랜잭션제어메서드 1. void commit() 2. void commit(boolean force) 3. void rollback() 4. void rollback(boolean force) 여기서독특한것은 boolean 타입의파라미터이다. mybatis api 에서입력 / 수정 / 삭제에대한호출이한번도없었다고하면명시적으로커밋이나롤백을하지않는다. 단 boolean 타입의파라미터를 true 로지정하면입력 / 수정 / 삭제의호출이있었는지에대해체크하지않고무조건커밋이나롤백을하도록처리한다. mybatis 를단독으로사용할때는 mybatis 의 SqlSession 객체의 commit() 이나 rollback() 메서드를사용하면된다. 하지만 Spring 이나 Google Guice 와연동하는경우, 트랜잭션에대한제어는 mybatis 가담당하지않고그역할이 Spring 이나 Google Guice 로위임된다. Spring 연동시트랜잭션처리를뒤에서다시다루도록한다 좀더복잡한매핑규칙정의 A. constructor B. association C. collection D. discriminator 27 MyBatis

28 28 MyBatis

29 1.4 mybatis spring 연동모듈을사용한웹애플리케이션개발하기 설치하기 A. 수동설치 mybatis 홈페이지의자바페이지인 에서압축파일을다운로드한다. 앞서 mybatis 단독으로사용할때의 mybatis 패키지와 mybatis-spring 모듈패키지둘다받아야한다. 패키지별로파일을 WEB-INF/lib 밑에두면설치는끝난다. 1. mybatis 패키지 : mybatis-x.x.x.jar ( 최신버전은 mybatis jar) 2. mybatis-spring 패키지 : mybatis-spring-x.x.x.jar ( 최신버전은 mybatis-spring jar) B. maven 이용 <dependency> <groupid>org.mybatis</groupid> <artifactid>mybatis</artifactid> <version>3.1.0</version> </dependency> <dependency> <groupid>org.mybatis</groupid> 29 MyBatis

30 </dependency> <artifactid>mybatis-spring</artifactid> <version>1.1.0</version> C. ivy 이용 <dependency org="org.mybatis" name="mybatis" rev="3.1.0"/> <dependency org="org.mybatis" name="mybatis-spring" rev="1.1.0"/> Spring 설정 Spring 프레임워크에대한세부적인설명은사실이책의범위를벗어난다. Spring 프레임워크에대해좀더많은것으로알고싶다면에이콘출판사의 토비의스프링 3 을보도록권한다. A. Spring 의기본설정여기서는 mybatis 와직접적으로관련이있는 Spring 설정만을살펴보도록한다. <?xml version="1.0" encoding="utf-8"?> <beans xmlns=" xmlns:xsi=" xmlns:context=" xmlns:tx=" xsi:schemalocation=" xsd <! 1. datasource --> <bean id="datasource" class="org.apache.commons.dbcp.basicdatasource"> <property name="driverclassname" value="com.mysql.jdbc.driver" /> <property name="url" value="jdbc:mysql://localhost:3306/mybatis_example" /> <property name="username" value="mybatis" /> <property name="password" value="mybatis" /> </bean> <! 2. 트랜잭션관리자 --> <bean id="transactionmanager" class="org.springframework.jdbc.datasource.datasourcetransactionmanager"> <property name="datasource" ref="datasource" /> </bean> <! 3. Annotation 을사용한트랜잭션사용시활성화 --> 30 MyBatis

31 <tx:annotation-driven transaction-manager="transactionmanager" /> <context:component-scan base-package="kr.pe.ldg.mybatis"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.controller" /> </context:component-scan> <context:annotation-config /> </beans> 1. datasource : id 가 datasource 인빈의설정으로데이터베이스연결정보이다. mybatis 와 spring 을연동할경우데이터베이스와트랜잭션은 spring 에서관리하게된다. 즉이설정으로인해 mybatis 설정에는더이상데이터베이스연결정보에대한설정이필요하지않게된다. 각각의속성값은 mybatis 의설정과유사하기때문에별도설명은생략하도록한다. 2. transactionmanager : 트랜잭션관리자에대한설정이다. 3. tx:annotation-driven : Spring 이제공하는트랜잭션관리방법이몇가지있다. 직접코드로처리할수도있고, AOP 를통해처리할수도있으며또한애노테이션을처리가가능하다. 여기서는간단히애노테이션으로처리하는방식을선택했다. 만메서드단위로기술해주면된다. SpringSource 에서제공하는 SpringSource Tool Suite 를사용할경우아래처럼트랜잭션이적용되는부분에오렌지색화살표로표기를 (27 번라인옆 ) 해준다. B. mybatis-spring 설정 <?xml version="1.0" encoding="utf-8"?> <beans xmlns=" xmlns:xsi=" xmlns:context=" xmlns:tx=" xsi:schemalocation=" xsd <!-- ibatis 설정 // --> <bean id="sqlsessionfactorybean" class="org.mybatis.spring.sqlsessionfactorybean"> <property name="sqlsessionfactorybuilder" ref="sqlsessionfactorybuilder" /> <property name="typealiasespackage" value="kr.pe.ldg.mybatis.example1.model" /> 31 MyBatis

32 <property name="datasource" ref="datasource" /> <property name="configlocation" value="classpath:/mybatis-config.xml" /> </bean> <bean id="sqlsessiontemplate" class="org.mybatis.spring.sqlsessiontemplate"> <constructor-arg name="sqlsessionfactory" ref="sqlsessionfactorybean" /> </bean> <bean id="sqlsessionfactorybuilder" class="org.apache.ibatis.session.sqlsessionfactorybuilder" /> </beans> <bean id="mapperscannerconfigurer" class="org.mybatis.spring.mapper.mapperscannerconfigurer"> <property name="basepackage" value="kr.pe.ldg.mybatis.example1.repository" /> </bean> <!-- // ibatis 설정 --> 1. sqlsessionfactorybean : SqlSessionFactory 를생성하기위해 FactoryBean 설정이다. 가장기본이되는속성은 datasource 와 configlocation 두가지이다. 만약에 mybatis 설정파일에서 environments, mappers, typealiases 정도만사용했었다면 configlocation 조차도설정할필요가없다. SqlSessionFactoryBean 의 api 문서에따르면이객체에대한설정은앞서본 mybatis 설정파일의대부분을그대로설정할수있도록메서드를제공하고있다. 2. sqlsessiontemplate : Spring 은템플릿패턴을많이사용한다. orm 을구성하는하이버네이트, ibatis, jpa 들에대해각각 HibernateTemplate, SqlMapClientTemplate, JpaTemplate 를제공하고있다. 이에 mybatis 도패턴과명명규칙을맞춘것이다. 이 sqlsessiontemplate 는 mybatis 의 SqlSession 과거의동일한역할을담당한다. 3. mapperscannerconfigurer : 매퍼인터페이스를자동검색해서등록한다. 매퍼애노테이션이적용된인터페이스의패키지중가장상위패키지를지정해주면그하위에있는매퍼애노테이션이적용된인터페이스를모두등록한다. 단인터페이스만이대상이며클래스는대상에서제외된다. mapperscannerconfigurer 를사용해서자동으로매퍼를검색하는것도좋지만생각과달리작동한다는생각이들수있다. 그럴경우에는수동으로등록을해주면된다. public interface CommentMapper * FROM COMMENT WHERE comment_no = #{commentno") List<Comment> selectcommentbycondition (Map<String, Object> condition); <bean id="commentmapper" class="org.mybatis.spring.mapper.mapperfactorybean"> <property name="mapperinterface" value="kr.pe.ldg.mybatis.example1.repository.mapper.commentmapper" /> <property name="sqlsessionfactory" ref="sqlsessionfactory" /> </bean> public class CommentService { private CommentMapper commentmapper; public void setcommentmapper(commentmapper commentmapper) { this.commentmapper = commentmapper; 32 MyBatis

33 public List<Comment> selectcomment(long commentno) { return this.commentmapper.selectcomment (commentno); 레이어별예제 웹애플리케이션을작성할때 MVC 패턴은이미보편적으로퍼져있는패턴이다. mybatis 나 Spring 프레임워크등이관심을가진분들은대부분 MVC 패턴을사용하고있다고봐도무방하다. 각레이어별클래스에대해서명명하는방식은개발자마다또는회사마다다르겠지만필자가속한회사에서는대략두가지형태로사용한다. 1. xxxaction, xxxbo, xxxdao 2. xxxcontroller, xxxservice, xxxrepository 필자의경우는 2 번형태로사용하고있다. = "/comment") public class CommentController { private static final Logger LOGGER = private CommentService = "/select.*", method = {RequestMethod.GET, RequestMethod.POST) public ModelAndView select(long commentno) { ModelAndView mav = new ModelAndView(); try { List<Comment> comments = commentservice.selectcomment(commentno); mav.addobject("message", comments); catch (Exception e) { LOGGER.error("{", e.getmessage(), e); return mav; 본서적은 Spring 을다루는서적이아니라서 Spring 에관련한내용은설명을최대한자제하지만간단히살펴보자 : Spring 의 RequestMapping 애노테이션은요청 URL 을결정한다. 위설정데로하면 /comment/select 로시작하는형태의요청 ( 예를들면, /comment/select.do) 은 select() 메서드가처리를하게된다. 33 MyBatis

34 : Spring 을사용할때는대부분 POJO 로작성되는데 Spring 의설정을그대로사용하기위해서는 Spring 컨테이너에서빈을가져와서사용해야한다. Spring 컨테이너에서빈을가져오기위해사용한다. B. public class CommentService private CommentMapperRepository commentrepository; public List<Comment> selectcomment(long commentno) { Map<String, Object> condition = new HashMap<String, Object>(); condition.put("commentno", commentno); return commentrepository.selectcommentbycondition(condition); C. public class CommentSessionRepository private SqlSessionTemplate sqlsession; private final String namespace = "kr.pe.ldg.mybatis.example1.repository.mapper.commentmapper"; public List<Comment> selectcommentbycondition(map<string, Object> condition) { return sqlsession.selectlist(string.format("%s.selectcommentbycondition", namespace), condition); 34 MyBatis

35 1.5 mybatis 설정파일상세 (mybatis-config.xml) 35 MyBatis

36 1.6 매퍼 XML 과매퍼애노테이션상세 36 MyBatis

37 1.7 동적 SQL 37 MyBatis

38 1.8 mybatis generator 38 MyBatis

39 1.9 참고자료 ibator 에서 mybatis 로바꾸기 mybatis editor 39 MyBatis

MyBatis

MyBatis MyBatis 목차 3 1.1 mybatis 웹애플리케이션개발하기 4 1.1.1 설치하기 4 1.1.2 MYBATIS 설정파일 5 1.1.3 매퍼 XML과매퍼애노테이션 13 1.1.4 트랜잭션관리 16 1.1.5 좀더복잡한매핑규칙정의 17 1.MyBatis 시작하기 1.1 mybatis 웹애플리케이션개발하기 이전장에서는간단한 mybatis 애플리케이션을만들었고,

More information

Spring Boot/JDBC JdbcTemplate/CRUD 예제

Spring Boot/JDBC JdbcTemplate/CRUD 예제 Spring Boot/JDBC JdbcTemplate/CRUD 예제 오라클자바커뮤니티 (ojc.asia, ojcedu.com) Spring Boot, Gradle 과오픈소스인 MariaDB 를이용해서 EMP 테이블을만들고 JdbcTemplate, SimpleJdbcTemplate 을이용하여 CRUD 기능을구현해보자. 마리아 DB 설치는다음 URL 에서확인하자.

More information

- JPA를사용하는경우의스프링설정파일에다음을기술한다. <bean id="entitymanagerfactory" class="org.springframework.orm.jpa.localentitymanagerfactorybean" p:persistenceunitname=

- JPA를사용하는경우의스프링설정파일에다음을기술한다. <bean id=entitymanagerfactory class=org.springframework.orm.jpa.localentitymanagerfactorybean p:persistenceunitname= JPA 와 Hibernate - 스프링의 JDBC 대신에 JPA를이용한 DB 데이터검색작업 - JPA(Java Persistence API) 는자바의 O/R 매핑에대한표준지침이며, 이지침에따라설계된소프트웨어를 O/R 매핑프레임워크 라고한다. - O/R 매핑 : 객체지향개념인자바와관계개념인 DB 테이블간에상호대응을시켜준다. 즉, 객체지향언어의인스턴스와관계데이터베이스의레코드를상호대응시킨다.

More information

표준프레임워크로 구성된 컨텐츠를 솔루션에 적용하는 것에 문제가 없는지 확인

표준프레임워크로 구성된 컨텐츠를 솔루션에 적용하는 것에 문제가 없는지 확인 표준프레임워크로구성된컨텐츠를솔루션에적용하는것에문제가없는지확인 ( S next -> generate example -> finish). 2. 표준프레임워크개발환경에솔루션프로젝트추가. ( File -> Import -> Existring Projects into

More information

쉽게 풀어쓴 C 프로그래밊

쉽게 풀어쓴 C 프로그래밊 Power Java 제 27 장데이터베이스 프로그래밍 이번장에서학습할내용 자바와데이터베이스 데이터베이스의기초 SQL JDBC 를이용한프로그래밍 변경가능한결과집합 자바를통하여데이터베이스를사용하는방법을학습합니다. 자바와데이터베이스 JDBC(Java Database Connectivity) 는자바 API 의하나로서데이터베이스에연결하여서데이터베이스안의데이터에대하여검색하고데이터를변경할수있게한다.

More information

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET

Connection 8 22 UniSQLConnection / / 9 3 UniSQL OID SET 135-080 679-4 13 02-3430-1200 1 2 11 2 12 2 2 8 21 Connection 8 22 UniSQLConnection 8 23 8 24 / / 9 3 UniSQL 11 31 OID 11 311 11 312 14 313 16 314 17 32 SET 19 321 20 322 23 323 24 33 GLO 26 331 GLO 26

More information

@OneToOne(cascade = = "addr_id") private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a

@OneToOne(cascade = = addr_id) private Addr addr; public Emp(String ename, Addr addr) { this.ename = ename; this.a 1 대 1 단방향, 주테이블에외래키실습 http://ojcedu.com, http://ojc.asia STS -> Spring Stater Project name : onetoone-1 SQL : JPA, MySQL 선택 http://ojc.asia/bbs/board.php?bo_table=lecspring&wr_id=524 ( 마리아 DB 설치는위 URL

More information

ALTIBASE 사용자가이드 Templete

ALTIBASE 사용자가이드 Templete Real Alternative DBMS ALTIBASE, Since 1999 MyBatis 연동가이드 2014. 10 Copyright c 2000~2014 ALTBASE Corporation. All Rights Reserved. Document Control Change Record Date Author Change Reference 2013-12 sypark

More information

10.ppt

10.ppt : SQL. SQL Plus. JDBC. SQL >> SQL create table : CREATE TABLE ( ( ), ( ),.. ) SQL >> SQL create table : id username dept birth email id username dept birth email CREATE TABLE member ( id NUMBER NOT NULL

More information

* Factory class for query and DML clause creation * tiwe * */ public class JPAQueryFactory implements JPQLQueryFactory private f

* Factory class for query and DML clause creation * tiwe * */ public class JPAQueryFactory implements JPQLQueryFactory private f JPA 에서 QueryDSL 사용하기위해 JPAQuery 인스턴스생성방법 http://ojc.asia, http://ojcedu.com 1. JPAQuery 를직접생성하기 JPAQuery 인스턴스생성하기 QueryDSL의 JPAQuery API를사용하려면 JPAQuery 인스턴스를생성하면된다. // entitymanager는 JPA의 EntityManage

More information

Spring Boot

Spring Boot 스프링부트 (Spring Boot) 1. 스프링부트 (Spring Boot)... 2 1-1. Spring Boot 소개... 2 1-2. Spring Boot & Maven... 2 1-3. Spring Boot & Gradle... 3 1-4. Writing the code(spring Boot main)... 4 1-5. Writing the code(commandlinerunner)...

More information

<property name="configlocation" value="classpath:/egovframework/sqlmap/example/sql-map-config.xml"/> <property name="datasource" ref="datasource2"/> *

<property name=configlocation value=classpath:/egovframework/sqlmap/example/sql-map-config.xml/> <property name=datasource ref=datasource2/> * 표준프레임워크로구성된컨텐츠를솔루션에적용 1. sample( 게시판 ) 프로젝트생성 - egovframe Web Project next generate example finish 2. 프로젝트추가 - 프로젝트 Import 3. 프로젝트에 sample 프로젝트의컨텐츠를추가, 기능동작확인 ⓵ sample 프로젝트에서 프로젝트로복사 sample > egovframework

More information

Microsoft PowerPoint - GUI _DB연동.ppt [호환 모드]

Microsoft PowerPoint - GUI _DB연동.ppt [호환 모드] GUI 설계 6 주차 DB 연동김문정 tops@yd.ac.kr 강의순서강의전환경 JDK 설치및환경설정톰캣설치및환경설정이클립스 (JEE) 설치및환경설정 MySQL( 드라이버 ) 설치및커넥터드라이브연결 DB 생성 - 계정생성이클립스에서 DB에연결서버생성 - 프로젝트생성 DB연결테이블생성및등록 2 MySQL 설치확인 mysql - u root -p MySQL 에데이터베이스추가

More information

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher( 실행할페이지.jsp); 다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp"); dispatcher.forward(request, response); - 위의예에서와같이 RequestDispatcher

More information

MyBatis 3 사용자가이드

MyBatis 3 사용자가이드 MyBatis 3 사용자가이드 번역자 : 이동국 (fromm0@gmail.com, http://openframework.or.kr) 최신버전은 http://kldp.net/projects/fwko/ Contents MyBatis 는무엇인가?... 5 시작하기... 5 XML 에서 SqlSessionFactory 빌드하기... 5 XML 을사용하지않고 SqlSessionFactory

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 2... ( ). ( ). @ vs. logic data method variable behavior attribute method field Flow (Type), ( ) member @ () : C program Method A ( ) Method B ( ) Method C () program : Java, C++, C# data @ Program

More information

JUNIT 실습및발표

JUNIT 실습및발표 JUNIT 실습및발표 JUNIT 접속 www.junit.org DownLoad JUnit JavaDoc API Document 를참조 JUNIT 4.8.1 다운로드 설치파일 (jar 파일 ) 을다운로드 CLASSPATH 를설정 환경변수에서설정 실행할클래스에서 import JUnit 설치하기 테스트실행주석 @Test Test 를실행할 method 앞에붙임 expected

More information

Spring Data JPA Many To Many 양방향 관계 예제

Spring Data JPA Many To Many 양방향 관계 예제 Spring Data JPA Many To Many 양방향관계예제 오라클자바커뮤니티 (ojc.asia, ojcedu.com) 엔티티매핑 (Entity Mapping) M : N 연관관계 사원 (Sawon), 취미 (Hobby) 는다 : 다관계이다. 사원은여러취미를가질수있고, 하나의취미역시여러사원에할당될수있기때문이다. 보통관계형 DB 에서는다 : 다관계는 1

More information

PowerPoint Presentation

PowerPoint Presentation Class - Property Jo, Heeseung 목차 section 1 클래스의일반구조 section 2 클래스선언 section 3 객체의생성 section 4 멤버변수 4-1 객체변수 4-2 클래스변수 4-3 종단 (final) 변수 4-4 멤버변수접근방법 section 5 멤버변수접근한정자 5-1 public 5-2 private 5-3 한정자없음

More information

교육자료

교육자료 THE SYS4U DODUMENT Java Reflection & Introspection 2012.08.21 김진아사원 2012 SYS4U I&C All rights reserved. 목차 I. 개념 1. Reflection 이란? 2. Introspection 이란? 3. Reflection 과 Introspection 의차이점 II. 실제사용예 1. Instance의생성

More information

파워포인트 템플릿

파워포인트 템플릿 ibizsoftware 정호열차장 ( 표준프레임워크오픈커뮤니티커미터 ) Agenda 1. ibatis 와 Hibernate 의개념및특징 2. Hibernate 와 JPA 쿼리종류 3. ibatis 와 Hibernate 동시사용을위한 Transaction 처리방안 4. @EntityListeners 활용방법 Agenda 5. Hibernate 사용시 Dynamic

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 1 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4

목차 BUG DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4 ALTIBASE HDB 6.5.1.5.10 Patch Notes 목차 BUG-46183 DEQUEUE 의 WAIT TIME 이 1 초미만인경우, 설정한시간만큼대기하지않는문제가있습니다... 3 BUG-46249 [qp-select-pvo] group by 표현식에있는컬럼을참조하는집합연산이존재하지않으면결괏값오류가발생할수있습니다... 4 BUG-46266 [sm]

More information

(jpetstore \277\271\301\246\267\316 \273\354\306\354\272\270\264\302 Spring MVC\277\315 iBatis \277\254\265\277 - Confluence)

(jpetstore \277\271\301\246\267\316 \273\354\306\354\272\270\264\302 Spring MVC\277\315 iBatis \277\254\265\277 - Confluence) 8 중 1 2008-01-31 오전 12:08 오픈소스스터디 jpetstore 예제로살펴보는 Spring MVC와 ibatis 연동 Added by Sang Hyup Lee, last edited by Sang Hyup Lee on 1월 16, 2007 (view change) Labels: (None) 지금까지 Spring MVC 를셋팅하는과정에서부터하나의

More information

InsertColumnNonNullableError(#colName) 에해당하는메시지출력 존재하지않는컬럼에값을삽입하려고할경우, InsertColumnExistenceError(#colName) 에해당하는메시지출력 실행결과가 primary key 제약에위배된다면, Ins

InsertColumnNonNullableError(#colName) 에해당하는메시지출력 존재하지않는컬럼에값을삽입하려고할경우, InsertColumnExistenceError(#colName) 에해당하는메시지출력 실행결과가 primary key 제약에위배된다면, Ins Project 1-3: Implementing DML Due: 2015/11/11 (Wed), 11:59 PM 이번프로젝트의목표는프로젝트 1-1 및프로젝트 1-2에서구현한프로그램에기능을추가하여간단한 DML을처리할수있도록하는것이다. 구현한프로그램은 3개의 DML 구문 (insert, delete, select) 을처리할수있어야한다. 테이블데이터는파일에저장되어프로그램이종료되어도사라지지않아야한다.

More information

제8장 자바 GUI 프로그래밍 II

제8장 자바 GUI 프로그래밍 II 제8장 MVC Model 8.1 MVC 모델 (1/7) MVC (Model, View, Controller) 모델 스윙은 MVC 모델에기초를두고있다. MVC란 Xerox의연구소에서 Smalltalk 언어를바탕으로사용자인터페이스를개발하기위한방법 MVC는 3개의구성요소로구성 Model : 응용프로그램의자료를표현하기위한모델 View : 자료를시각적으로 (GUI 방식으로

More information

歯JavaExceptionHandling.PDF

歯JavaExceptionHandling.PDF (2001 3 ) from Yongwoo s Park Java Exception Handling Programming from Yongwoo s Park 1 Java Exception Handling Programming from Yongwoo s Park 2 1 4 11 4 4 try/catch 5 try/catch/finally 9 11 12 13 13

More information

Microsoft PowerPoint - CSharp-10-예외처리

Microsoft PowerPoint - CSharp-10-예외처리 10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.

More information

JVM 메모리구조

JVM 메모리구조 조명이정도면괜찮조! 주제 JVM 메모리구조 설미라자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조장. 최지성자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조원 이용열자료조사, 자료작성, PPT 작성, 보고서작성. 이윤경 자료조사, 자료작성, PPT작성, 보고서작성. 이수은 자료조사, 자료작성, PPT작성, 보고서작성. 발표일 2013. 05.

More information

개발문서 Oracle - Clob

개발문서 Oracle - Clob 개발문서 ORACLE CLOB 2008.6.9 ( 주 ) 아이캔매니지먼트 개발팀황순규 0. clob개요 1. lob과 long의비교와 clob와 blob 2. 테이블생성쿼리 ( 차이점-추가사항 ) 3. select 쿼리 4. insert 쿼리및 jdbc프로그래밍 5. update 쿼리및 jdbc프로그래밍 (4, 5). putclobdata() 클래스 6. select

More information

어댑터뷰

어댑터뷰 04 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adapter View) 커스텀어댑터뷰 (Custom Adatper View) 란? u 어댑터뷰의항목하나는단순한문자열이나이미지뿐만아니라, 임의의뷰가될수 있음 이미지뷰 u 커스텀어댑터뷰설정절차 1 2 항목을위한 XML 레이아웃정의 어댑터정의 3 어댑터를생성하고어댑터뷰객체에연결

More information

< 목차 > 1. Data Access Service 개요 (ibatis 활용 ) 3. DBIO 소개

< 목차 > 1. Data Access Service 개요 (ibatis 활용 ) 3. DBIO 소개 전자정부표준프레임워크 Data Access Service 소개 2011-02-23 오픈커뮤니티김영우커미터 < 목차 > 1. Data Access Service 개요 (ibatis 활용 ) 3. DBIO 소개 Contents 1. Data Access Service 개요 1-1. 데이터처리레이어란? 1-2. 데이터처리레이어구성요소 1-3. Data Access

More information

C# Programming Guide - Types

C# Programming Guide - Types C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든

More information

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V

Mobile Service > IAP > Android SDK [ ] IAP SDK TOAST SDK. IAP SDK. Android Studio IDE Android SDK Version (API Level 10). Name Reference V Mobile Service > IAP > Android SDK IAP SDK TOAST SDK. IAP SDK. Android Studio IDE 2.3.3 Android SDK Version 2.3.3 (API Level 10). Name Reference Version License okhttp http://square.github.io/okhttp/ 1.5.4

More information

슬라이드 1

슬라이드 1 1. 개요 - 실행환경데이터처리레이어 (1/3) 데이터베이스에대한연결및영속성처리, 선언적인트랜잭션관리를제공하는 Layer 임 서비스그룹 설명 Presentation Layer 전자정부개발프레임워크실행환경 Business Logic Layer Persistence Layer Batch Layer Integration Layer Mobile Presentation

More information

JDBC 소개및설치 Database Laboratory

JDBC 소개및설치 Database Laboratory JDBC 소개및설치 JDBC } What is the JDBC? } JAVA Database Connectivity 의약어 } 자바프로그램안에서 SQL 을실행하기위해데이터베이스를연결해주는응용프로그램인터페이스 } 연결된데이터베이스의종류와상관없이동일한방법으로자바가데이터베이스내에서발생하는트랜잭션을제어할수있도록하는환경을제공 2 JDBC Driver Manager }

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 실습문제 Chapter 05 데이터베이스시스템... 오라클로배우는데이터베이스개론과실습 1. 실습문제 1 (5 장심화문제 : 각 3 점 ) 6. [ 마당서점데이터베이스 ] 다음프로그램을 PL/SQL 저장프로시져로작성하고실행해 보시오. (1) ~ (2) 7. [ 마당서점데이터베이스 ] 다음프로그램을 PL/SQL 저장프로시져로작성하고실행해 보시오. (1) ~ (5)

More information

신림프로그래머_클린코드.key

신림프로그래머_클린코드.key CLEAN CODE 6 11st Front Dev. Team 6 1. 2. 3. checked exception 4. 5. 6. 11 : 2 4 : java (50%), javascript (35%), SQL/PL-SQL (15%) : Spring, ibatis, Oracle, jquery ? , (, ) ( ) 클린코드를 무시한다면 . 6 1. ,,,!

More information

4 주차 - SPRING 환경설정및구현 Spring 기반의웹프로젝트를구성하고싶어요 T^T Spring 기반의웹환경구축 1. web.xml 수정으로 Spring 을설정하는방법 2. eclipse Spring Plug-In 을활용한템플릿프로젝트자동구성필수는아니지만해놓으면편

4 주차 - SPRING 환경설정및구현 Spring 기반의웹프로젝트를구성하고싶어요 T^T Spring 기반의웹환경구축 1. web.xml 수정으로 Spring 을설정하는방법 2. eclipse Spring Plug-In 을활용한템플릿프로젝트자동구성필수는아니지만해놓으면편 4 주차 - SPRING 환경설정및구현 Spring 기반의웹프로젝트를구성하고싶어요 T^T Spring 기반의웹환경구축 1. web.xml 수정으로 Spring 을설정하는방법 2. eclipse Spring Plug-In 을활용한템플릿프로젝트자동구성필수는아니지만해놓으면편리한것들 1. slf4j 를활용한 Logger 생성을편리하게해보자 2. AOP 설정 JDBC

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 2012 년자바카페 OPEN 세미나 주제 : Spring 프레임워크중요구성원리 2012. 6. 16 Today Story 1. 티어와레이어 2. 웹프로그래밍과엔터프라이즈프로그래밍 3. MVC 모델과웹개발의흐름 4. Spring 3대구성원리와디자인패턴 5대원리 5. AJAX와데이터처리 Today Story 1. 티어와레이어 2. 웹프로그래밍과엔터프라이즈프로그래밍

More information

07 자바의 다양한 클래스.key

07 자바의 다양한 클래스.key [ 07 ] . java.lang Object, Math, String, StringBuffer Byte, Short, Integer, Long, Float, Double, Boolean, Character. java.util Random, StringTokenizer Calendar, GregorianCalendar, Date. Collection, List,

More information

Microsoft PowerPoint - 04-UDP Programming.ppt

Microsoft PowerPoint - 04-UDP Programming.ppt Chapter 4. UDP Dongwon Jeong djeong@kunsan.ac.kr http://ist.kunsan.ac.kr/ Dept. of Informatics & Statistics 목차 UDP 1 1 UDP 개념 자바 UDP 프로그램작성 클라이언트와서버모두 DatagramSocket 클래스로생성 상호간통신은 DatagramPacket 클래스를이용하여

More information

내장서버로사용. spring-boot-starter-data-jpa : Spring Data JPA 사용을위한설정 spring-boot-devtools : 개발자도구를제공, 이도구는응용프로그램개발모드에서유 용한데코드가변경된경우서버를자동으로다시시작하는일들을한다. spri

내장서버로사용. spring-boot-starter-data-jpa : Spring Data JPA 사용을위한설정 spring-boot-devtools : 개발자도구를제공, 이도구는응용프로그램개발모드에서유 용한데코드가변경된경우서버를자동으로다시시작하는일들을한다. spri 6-20-4. Spring Boot REST CRUD 실습 (JPA, MariaDB) GitHub : https://github.com/leejongcheol/springbootrest 스프링부트에서 REST(REpresentational State Transfer) API 를실습해보자. RESTful 웹서비스는 JSON, XML 및기타미디어유형을생성하고활용할수있다.

More information

PowerPoint Presentation

PowerPoint Presentation 객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean

More information

PowerPoint Presentation

PowerPoint Presentation public class SumTest { public static void main(string a1[]) { int a, b, sum; a = Integer.parseInt(a1[0]); b = Integer.parseInt(a1[1]); sum = a + b ; // 두수를더하는부분입니다 System.out.println(" 두수의합은 " + sum +

More information

Secure Programming Lecture1 : Introduction

Secure Programming Lecture1 : Introduction Malware and Vulnerability Analysis Lecture3-2 Malware Analysis #3-2 Agenda 안드로이드악성코드분석 악성코드분석 안드로이드악성코드정적분석 APK 추출 #1 adb 명령 안드로이드에설치된패키지리스트추출 adb shell pm list packages v0nui-macbook-pro-2:lecture3 v0n$

More information

강의 개요

강의 개요 DDL TABLE 을만들자 웹데이터베이스 TABLE 자료가저장되는공간 문자자료의경우 DB 생성시지정한 Character Set 대로저장 Table 생성시 Table 의구조를결정짓는열속성지정 열 (Clumn, Attribute) 은이름과자료형을갖는다. 자료형 : http://dev.mysql.cm/dc/refman/5.1/en/data-types.html TABLE

More information

안드로이드기본 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 -

안드로이드기본 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 - 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 - ArrayAdapter ArrayAdapter adapter = new ArrayAdapter(this, android.r.layout.simple_list_item_1,

More information

J2EE Concepts

J2EE Concepts ! Introduction to J2EE (1) - J2EE Servlet/JSP/JDBC iseminar.. 1544-3355 ( ) iseminar Chat. 1 Who Are We? Business Solutions Consultant Oracle Application Server 10g Business Solutions Consultant Oracle10g

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3

More information

JAVA PROGRAMMING 실습 09. 예외처리

JAVA PROGRAMMING 실습 09. 예외처리 2015 학년도 2 학기 예외? 프로그램실행중에발생하는예기치않은사건 예외가발생하는경우 정수를 0으로나누는경우 배열의크기보다큰인덱스로배열의원소를접근하는경우 파일의마지막부분에서데이터를읽으려고하는경우 예외처리 프로그램에문제를발생시키지않고프로그램을실행할수있게적절한조치를취하는것 자바는예외처리기를이용하여예외처리를할수있는기법제공 자바는예외를객체로취급!! 나뉨수를입력하시오

More information

gnu-lee-oop-kor-lec06-3-chap7

gnu-lee-oop-kor-lec06-3-chap7 어서와 Java 는처음이지! 제 7 장상속 Super 키워드 상속과생성자 상속과다형성 서브클래스의객체가생성될때, 서브클래스의생성자만호출될까? 아니면수퍼클래스의생성자도호출되는가? class Base{ public Base(String msg) { System.out.println("Base() 생성자 "); ; class Derived extends Base

More information

교육2 ? 그림

교육2 ? 그림 Interstage 5 Apworks EJB Application Internet Revision History Edition Date Author Reviewed by Remarks 1 2002/10/11 2 2003/05/19 3 2003/06/18 EJB 4 2003/09/25 Apworks5.1 [ Stateless Session Bean ] ApworksJava,

More information

C++ Programming

C++ Programming C++ Programming 예외처리 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 예외처리 2 예외처리 예외처리 C++ 의예외처리 예외클래스와객체 3 예외처리 예외를처리하지않는프로그램 int main() int a, b; cout > a >> b; cout

More information

歯Writing_Enterprise_Applications_2_JunoYoon.PDF

歯Writing_Enterprise_Applications_2_JunoYoon.PDF Writing Enterprise Applications with Java 2 Platform, Enterprise Edition - part2 JSTORM http//wwwjstormpekr Revision Document Information Document title Writing Enterprise Applications

More information

PowerPoint Presentation

PowerPoint Presentation Package Class 3 Heeseung Jo 목차 section 1 패키지개요와패키지의사용 section 2 java.lang 패키지의개요 section 3 Object 클래스 section 4 포장 (Wrapper) 클래스 section 5 문자열의개요 section 6 String 클래스 section 7 StringBuffer 클래스 section

More information

JAVA PROGRAMMING 실습 08.다형성

JAVA PROGRAMMING 실습 08.다형성 2015 학년도 2 학기 1. 추상메소드 선언은되어있으나코드구현되어있지않은메소드 abstract 키워드사용 메소드타입, 이름, 매개변수리스트만선언 public abstract String getname(); public abstract void setname(string s); 2. 추상클래스 abstract 키워드로선언한클래스 종류 추상메소드를포함하는클래스

More information

Bind Peeking 한계에따른 Adaptive Cursor Sharing 등장 엑셈컨설팅본부 /DB 컨설팅팀김철환 Bind Peeking 의한계 SQL 이최초실행되면 3 단계의과정을거치게되는데 Parsing 단계를거쳐 Execute 하고 Fetch 의과정을통해데이터

Bind Peeking 한계에따른 Adaptive Cursor Sharing 등장 엑셈컨설팅본부 /DB 컨설팅팀김철환 Bind Peeking 의한계 SQL 이최초실행되면 3 단계의과정을거치게되는데 Parsing 단계를거쳐 Execute 하고 Fetch 의과정을통해데이터 Bind Peeking 한계에따른 Adaptive Cursor Sharing 등장 엑셈컨설팅본부 /DB 컨설팅팀김철환 Bind Peeking 의한계 SQL 이최초실행되면 3 단계의과정을거치게되는데 Parsing 단계를거쳐 Execute 하고 Fetch 의과정을통해데이터를사용자에게전송하게되며 Parsing 단계에서실행계획이생성된다. Bind 변수를사용하는 SQL

More information

FileMaker 15 ODBC 및 JDBC 설명서

FileMaker 15 ODBC 및 JDBC 설명서 FileMaker 15 ODBC JDBC 2004-2016 FileMaker, Inc.. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, California 95054 FileMaker FileMaker Go FileMaker, Inc.. FileMaker WebDirect FileMaker, Inc... FileMaker.

More information

Data Sync Manager(DSM) Example Guide Data Sync Manager (DSM) Example Guide DSM Copyright 2003 Ari System, Inc. All Rights reserved. Data Sync Manager

Data Sync Manager(DSM) Example Guide Data Sync Manager (DSM) Example Guide DSM Copyright 2003 Ari System, Inc. All Rights reserved. Data Sync Manager Data Sync Manager (DSM) Example Guide DSM Copyright 2003 Ari System, Inc. All Rights reserved. Data Sync Manager are trademarks or registered trademarks of Ari System, Inc. 1 Table of Contents Chapter1

More information

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r

I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r I T C o t e n s P r o v i d e r h t t p : / / w w w. h a n b i t b o o k. c o. k r Jakarta is a Project of the Apache

More information

02 C h a p t e r Java

02 C h a p t e r Java 02 C h a p t e r Java Bioinformatics in J a va,, 2 1,,,, C++, Python, (Java),,, (http://wwwbiojavaorg),, 13, 3D GUI,,, (Java programming language) (Sun Microsystems) 1995 1990 (green project) TV 22 CHAPTER

More information

rmi_박준용_final.PDF

rmi_박준용_final.PDF (RMI) - JSTORM http://wwwjstormpekr (RMI)- Document title: Document file name: Revision number: Issued by: Document Information (RMI)- rmi finaldoc Issue Date: Status:

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 @ Lesson 3 if, if else, if else if, switch case for, while, do while break, continue : System.in, args, JOptionPane for (,, ) @ vs. logic data method variable Data Data Flow (Type), ( ) @ Member field

More information

13주-14주proc.PDF

13주-14주proc.PDF 12 : Pro*C/C++ 1 2 Embeded SQL 3 PRO *C 31 C/C++ PRO *C NOT! NOT AND && AND OR OR EQUAL == = SQL,,, Embeded SQL SQL 32 Pro*C C SQL Pro*C C, C Pro*C, C C 321, C char : char[n] : n int, short, long : float

More information

슬라이드 1

슬라이드 1 Pairwise Tool & Pairwise Test NuSRS 200511305 김성규 200511306 김성훈 200614164 김효석 200611124 유성배 200518036 곡진화 2 PICT Pairwise Tool - PICT Microsoft 의 Command-line 기반의 Free Software www.pairwise.org 에서다운로드후설치

More information

DocsPin_Korean.pages

DocsPin_Korean.pages Unity Localize Script Service, Page 1 Unity Localize Script Service Introduction Application Game. Unity. Google Drive Unity.. Application Game. -? ( ) -? -?.. 준비사항 Google Drive. Google Drive.,.. - Google

More information

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1"); void method() 2"); void method1() public class Test 3"); args) A

예제 2) Test.java class A intvar= 10; void method() class B extends A intvar= 20; 1); void method() 2); void method1() public class Test 3); args) A 제 10 장상속 예제 1) ConstructorTest.java class Parent public Parent() super - default"); public Parent(int i) this("hello"); super(int) constructor" + i); public Parent(char c) this(); super(char) constructor

More information

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 객체지향프로그래밍 IT CookBook, 자바로배우는쉬운자료구조 q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2 q 객체지향프로그래밍의이해 v 프로그래밍기법의발달 A 군의사업발전 1 단계 구조적프로그래밍방식 3 q 객체지향프로그래밍의이해 A 군의사업발전 2 단계 객체지향프로그래밍방식 4 q 객체지향프로그래밍의이해 v 객체란무엇인가

More information

ALTIBASE 사용자가이드 Templete

ALTIBASE 사용자가이드 Templete Real Alternative DBMS ALTIBASE, Since 1999 Spring 연동가이드 2014. 10 Copyright c 2000~2014 ALTBASE Corporation. All Rights Reserved. Document Control Change Record Date Author Change Reference 2010-08 snkim

More information

Microsoft PowerPoint - Java7.pptx

Microsoft PowerPoint - Java7.pptx HPC & OT Lab. 1 HPC & OT Lab. 2 실습 7 주차 Jin-Ho, Jang M.S. Hanyang Univ. HPC&OT Lab. jinhoyo@nate.com HPC & OT Lab. 3 Component Structure 객체 (object) 생성개념을이해한다. 외부클래스에대한접근방법을이해한다. 접근제어자 (public & private)

More information

FileMaker ODBC and JDBC Guide

FileMaker ODBC and JDBC Guide FileMaker 13 5 5 5 6 6 6 7 7 8 8 8 8 9 9 10 10 11 11 12 12 12 12 12 12 13 13 14 14 16 16 18 4 19 19 20 20 21 21 21 23 23 23 23 25 26 26 26 26 27 28 28 28 28 29 31 31 32 33 33 33 33 34 34 35 35 35 36 1

More information

목차 INDEX JSON? - JSON 개요 - JSONObject - JSONArray 서울시공공데이터 API 살펴보기 - 요청인자살펴보기 - Result Code - 출력값 HttpClient - HttpHelper 클래스작성 - JSONParser 클래스작성 공공

목차 INDEX JSON? - JSON 개요 - JSONObject - JSONArray 서울시공공데이터 API 살펴보기 - 요청인자살펴보기 - Result Code - 출력값 HttpClient - HttpHelper 클래스작성 - JSONParser 클래스작성 공공 메신저의새로운혁신 채팅로봇 챗봇 (Chatbot) 입문하기 소 이 메 속 : 시엠아이코리아 름 : 임채문 일 : soulgx@naver.com 1 목차 INDEX JSON? - JSON 개요 - JSONObject - JSONArray 서울시공공데이터 API 살펴보기 - 요청인자살펴보기 - Result Code - 출력값 HttpClient - HttpHelper

More information

FileMaker ODBC 및 JDBC 가이드

FileMaker ODBC 및 JDBC 가이드 FileMaker ODBC JDBC 2004-2019 FileMaker, Inc.. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, California 95054 FileMaker, FileMaker Cloud, FileMaker Go FileMaker, Inc.. FileMaker WebDirect FileMaker,

More information

FileMaker ODBC and JDBC Guide

FileMaker ODBC and JDBC Guide FileMaker 14 5 5 5 5 6 6 6 7 7 7 8 8 8 9 9 10 10 11 11 12 12 12 12 12 13 13 14 15 16 17 18 18 19 19 20 20 20 21 21 21 22 22 22 22 23 24 24 24 24 25 27 27 28 29 29 29 29 30 30 31 31 31 32 1 1 1 1 1 1 1

More information

ALTIBASE 사용자가이드 Templete

ALTIBASE 사용자가이드 Templete Real Alternative DBMS ALTIBASE, Since 1999 WINDOWS ADO.NET 환경의 ALTIBASE 개발가이드 2010. 09 Copyright c 2000~2013 ALTBASE Corporation. All Rights Reserved. Document Control Change Record Date Author Change

More information

혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가

혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 <html> 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 <html> 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가 혼자서일을다하는 JSP. 이젠일을 Servlet 과나눠서한다. JSP와서블릿의표현적인차이 - JSP는 내에서자바를사용할수있는수단을제공한다. - 서블릿은자바내에서 을작성할수있는수단을제공한다. - JSP나서블릿으로만웹페이지를작성하면자바와다양한코드가웹페이지내에뒤섞여있어서웹페이지의화면설계가점점어려워진다. - 서블릿이먼저등장하였으나, 자바내에

More information

슬라이드 1

슬라이드 1 UNIT 16 예외처리 로봇 SW 교육원 3 기 최상훈 학습목표 2 예외처리구문 try-catch-finally 문을사용핛수있다. 프로그램오류 3 프로그램오류의종류 컴파일에러 (compile-time error) : 컴파일실행시발생 럮타임에러 (runtime error) : 프로그램실행시발생 에러 (error) 프로그램코드에의해서해결될수없는심각핚오류 ex)

More information

웹연동 } 웹 (Web) 환경에서데이터베이스시스템을연동하는방법은다음과같다 } Server Client 구조의통신 (2-Tier) } Server Middleware Client 구조의통신 (3-Tier) 2

웹연동 } 웹 (Web) 환경에서데이터베이스시스템을연동하는방법은다음과같다 } Server Client 구조의통신 (2-Tier) } Server Middleware Client 구조의통신 (3-Tier) 2 DB 와 WEB 연동 (1) [2-Tier] Java Applet 이용 웹연동 } 웹 (Web) 환경에서데이터베이스시스템을연동하는방법은다음과같다 } Server Client 구조의통신 (2-Tier) } Server Middleware Client 구조의통신 (3-Tier) 2 JAVA Applet 을이용한 Client Server 연동기법 } Applet

More information

PowerPoint Template

PowerPoint Template JavaScript 회원정보 입력양식만들기 HTML & JavaScript Contents 1. Form 객체 2. 일반적인입력양식 3. 선택입력양식 4. 회원정보입력양식만들기 2 Form 객체 Form 객체 입력양식의틀이되는 태그에접근할수있도록지원 Document 객체의하위에위치 속성들은모두 태그의속성들의정보에관련된것

More information

I. Introduction... 1 II. Jdbc Support 구현배경 사용자요구사항 p6spy Architecture Architecture InjectionPa

I. Introduction... 1 II. Jdbc Support 구현배경 사용자요구사항 p6spy Architecture Architecture InjectionPa Anyframe Jdbc Support Plugin Version 1.1.0 저작권 2007-2014 삼성 SDS 본문서의저작권은삼성 SDS 에있으며 Anyframe 오픈소스커뮤니티활동의목적하에서자유로운이용이가능합니다. 본문서를복제, 배포할경우에는저작권자를명시하여주시기바라며본문서를변경하실경우에는원문과변경된내용을표시하여주시기바랍니다. 원문과변경된문서에대한상업적용도의활용은허용되지않습니다.

More information

목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE

목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE ALTIBASE HDB 6.3.1.10.1 Patch Notes 목차 BUG-45710 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG-45730 ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG-45760 ROLLUP/CUBE 절을포함하는질의는 SUBQUERY REMOVAL 변환을수행하지않도록수정합니다....

More information

Network Programming

Network Programming Part 5 확장된 Network Programming 기술 1. Remote Procedure Call 2. Remote Method Invocation 3. Object Request Broker 2. Java RMI

More information

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 (   ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각 JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.

More information

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc NTAS and FRAME BUILDER Install Guide NTAS and FRAME BUILDER Version 2.5 Copyright 2003 Ari System, Inc. All Rights reserved. NTAS and FRAME BUILDER are trademarks or registered trademarks of Ari System,

More information

Windows 8에서 BioStar 1 설치하기

Windows 8에서 BioStar 1 설치하기 / 콘텐츠 테이블... PC에 BioStar 1 설치 방법... Microsoft SQL Server 2012 Express 설치하기... Running SQL 2012 Express Studio... DBSetup.exe 설정하기... BioStar 서버와 클라이언트 시작하기... 1 1 2 2 6 7 1/11 BioStar 1, Windows 8 BioStar

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Software Verification Junit, Eclipse 및빌드환경 Team : T3 목차 Eclipse JUnit 빌드환경 1 Eclipse e 소개 JAVA 를개발하기위한통합개발환경 주요기능 Overall 빌드환경 Code edit / Compile / Build Unit Test, Debug 특징 JAVA Code를작성하고이에대한 debugging

More information

12-file.key

12-file.key 11 (String).. java.lang.stringbuffer. s String s = "abcd"; s = s + "e"; a b c d e a b c d e ,., "910359,, " "910359" " " " " (token) (token),, (delimiter). java.util.stringtokenizer String s = "910359,,

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Lecture 02 프로그램구조및문법 Kwang-Man Ko kkmam@sangji.ac.kr, compiler.sangji.ac.kr Department of Computer Engineering Sang Ji University 2018 자바프로그램기본구조 Hello 프로그램구조 sec01/hello.java 2/40 자바프로그램기본구조 Hello 프로그램구조

More information

Microsoft PowerPoint - lec12 [호환 모드]

Microsoft PowerPoint - lec12 [호환 모드] 제네릭 제네릭클래스 제네릭인터페이스 제네릭메소드 형매개변수의제한 어노테이션 어노테이션형태시스템정의어노테이션사용자정의어노테이션 kkman@sangji.ac.kr 2 제네릭 (generic) 클래스나메소드에자료형을매개변수형식으로사용할수있는기능 자료형과무관하게알고리즘을기술 예전에작성한알고리즘을쉽게재사용가능 어노테이션 (annotation) 프로그램요소에다양한종류의속성정보를추가하기위해서사용

More information

ALTIBASE 사용자가이드 Templete

ALTIBASE 사용자가이드 Templete Real Alternative DBMS ALTIBASE, Since 1999 Spring 연동가이드 2010. 08 Copyright c 2000~2013 ALTBASE Corporation. All Rights Reserved. Document Control Change Record Date Author Change Reference 2010-08 snkim

More information

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345])

(Microsoft PowerPoint - java1-lecture11.ppt [\310\243\310\257 \270\360\265\345]) 예외와예외클래스 예외처리 514760-1 2016 년가을학기 12/08/2016 박경신 오류의종류 에러 (Error) 하드웨어의잘못된동작또는고장으로인한오류 에러가발생되면 JVM실행에문제가있으므로프로그램종료 정상실행상태로돌아갈수없음 예외 (Exception) 사용자의잘못된조작또는개발자의잘못된코딩으로인한오류 예외가발생되면프로그램종료 예외처리 추가하면정상실행상태로돌아갈수있음

More information

Microsoft PowerPoint - 10Àå.ppt

Microsoft PowerPoint - 10Àå.ppt 10 장. DB 서버구축및운영 DBMS 의개념과용어를익힌다. 간단한 SQL 문법을학습한다. MySQL 서버를설치 / 운영한다. 관련용어 데이터 : 자료 테이블 : 데이터를표형식으로표현 레코드 : 테이블의행 필드또는컬럼 : 테이블의열 필드명 : 각필드의이름 데이터타입 : 각필드에입력할값의형식 학번이름주소연락처 관련용어 DB : 테이블의집합 DBMS : DB 들을관리하는소프트웨어

More information

11 템플릿적용 - Java Program Performance Tuning (김명호기술이사)

11 템플릿적용 - Java Program Performance Tuning (김명호기술이사) Java Program Performance Tuning ( ) n (Primes0) static List primes(int n) { List primes = new ArrayList(n); outer: for (int candidate = 2; n > 0; candidate++) { Iterator iter = primes.iterator(); while

More information

<4D F736F F F696E74202D20C1A63234C0E520C0D4C3E2B7C228B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20C1A63234C0E520C0D4C3E2B7C228B0ADC0C729205BC8A3C8AF20B8F0B5E55D> Power Java 제 24 장입출력 이번장에서학습할내용 스트림이란? 스트림의분류 바이트스트림 문자스트림 형식입출력 명령어행에서입출력 파일입출력 스트림을이용한입출력에대하여살펴봅시다. 스트림 (stream) 스트림 (stream) 은 순서가있는데이터의연속적인흐름 이다. 스트림은입출력을물의흐름처럼간주하는것이다. 스트림들은연결될수있다. 중간점검문제 1. 자바에서는입출력을무엇이라고추상화하는가?

More information

Microsoft PowerPoint - 18-DataSource.ppt

Microsoft PowerPoint - 18-DataSource.ppt 18 장 : JDBC DataSource DataSource JDBC 2.0의 javax.sql 패키지에포함되어도입됨 DataSource 인터페이스는데이터베이스커넥션을만들거나사용하는데좀더유연한아키텍처를제공하기위해도입됨 DataSource를이용할경우, 클라이언트코드는한줄도바꾸지않고서도다른데이터베이스에접속할수있도록해줌 즉 DataSource 는커넥션상세사항들을캡슐화

More information

Design Issues

Design Issues 11 COMPUTER PROGRAMMING INHERIATANCE CONTENTS OVERVIEW OF INHERITANCE INHERITANCE OF MEMBER VARIABLE RESERVED WORD SUPER METHOD INHERITANCE and OVERRIDING INHERITANCE and CONSTRUCTOR 2 Overview of Inheritance

More information

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부 Eclipse (IDE) JDK Android SDK with ADT IDE: Integrated Development Environment JDK: Java Development Kit (Java SDK) ADT: Android Development Tools 2 JDK 설치 Eclipse

More information

Cluster management software

Cluster management software 자바네트워크프로그래밍 (OCJP 국제공인자격취득중심 ) 충북대학교 최민 기본예제 예외클래스를정의하고사용하는예제 class NewException extends Exception { public class ExceptionTest { static void methoda() throws NewException { System.out.println("NewException

More information

쉽게 풀어쓴 C 프로그래밍

쉽게 풀어쓴 C 프로그래밍 제 5 장생성자와접근제어 1. 객체지향기법을이해한다. 2. 클래스를작성할수있다. 3. 클래스에서객체를생성할수있다. 4. 생성자를이용하여객체를초기화할수 있다. 5. 접근자와설정자를사용할수있다. 이번장에서만들어볼프로그램 생성자 생성자 (constructor) 는초기화를담당하는함수 생성자가필요한이유 #include using namespace

More information