일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- JPA
- Properties
- union_find
- 리소스모니터링
- 스프링부트
- GC로그수집
- deque
- sql
- Java
- string
- 큐
- spring boot
- Calendar
- date
- 스택
- priority_queue
- 힙덤프
- List
- map
- set
- math
- NIO
- scanner
- dfs
- html
- javascript
- alter
- BFS
- Union-find
- CSS
- Today
- Total
매일 조금씩
01/21 ! - MyBatis(2) : myBatis로 model1 게시판 만들기, myBatis - annotation 방식, Maven 환경설정 본문
01/21 ! - MyBatis(2) : myBatis로 model1 게시판 만들기, myBatis - annotation 방식, Maven 환경설정
mezo 2021. 2. 25. 19:57myBatis
SQL Mapper framework
SQL - Java
XML
Annotation (Java)
1. 환경설정
(내가 정할수 있는 파일 이름)
데이터베이스 연결 - myBatisConfig.xml
매퍼 SQL - mapper.xml (to이름.xml)
2. 라이브러리
* 다운로드
mybatis - 버전.java
+
기타
log4j - log4j.xml
※ myBatis 환경설정 방법
1. window application
2. web application
3. mobile(app) application
다 알고 있어야한다.
환경설정법이 myBatis의 처음과 끝이다.
myBatis - xml 방식
1. myBatisConfig.xml
1) 직접연결
2) JNDI(커넥션 풀) - web에서만 됨
2. mapper.xml
select
insert/update/delete
update - ddl
#{데이터명} - ' ' 붙고
${데이터명} - X - DDL에 쓰임
3. myBatis로 Model1 게시판 만들기 (xml 방식)
이클립스에서 프로젝트를 복사하면 Properties > Web project setting 에서 이름을 한번더 수정해줘야한다.
아니면 충돌난다!
※ 에러 해결 방법
1) multiple context 에러
여러개의 프로젝트를 진열해놓고 해서 발생하는 경우가 대다수임.
실제 프로젝트에선 하나만 열어놓고 하기 때문에 발생 안함.
2) java or tomcat 버전 안맞을 경우
두번째의 경우 버전 확인, 해결 방법
우클릭 > Properties > Java Build Path
우클릭 > Properties > Targeted Runtimes
우클릭 > Properties > project facets (<custom> 이거나 tomcat9 여야함)
들어가서 버전이 맞는지 확인해야한다.
3-1. model1 게시판을 myBatis의 xml 방식으로 바꾸기
> MyBatisModel1Ex01
1) 라이브러리 가져오기
myBatis에 필요한 라이브러리들을 lib폴더에 넣는다.
기존 model1 기본 게시판을 복사한 프로젝트이기 때문에 lib 폴더에 mariadb 드라이버가 있을 것이다.
그걸 삭제해도 상관없다. 어차피 myBatis 쓸거기 때문이다.
하지만 여기선 myBatisConfig.xml에서 mariadb 드라이버가 필요한 JNDI를 남겨놓았기때문에 mariadb 드라이버를 지울경우 에러가 난다.
2) 환경 설정파일 가져오기
log4j.xml, myBatisConfig.xml 가져와서 Java Resources > src 에 넣는다.
3) 매핑 파일 만들기
파일명은 데이터베이스의 테이블명과 동일하게 board.xml로 한다.
그안에서 list부터 delete까지모든 DAO에 있던 sql문을 작성 한다.
> board.xml
<?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="mybatis">
<!-- list -->
<select id="list" resultType="model1.BoardTO">
select seq, subject, writer, date_format(wdate,'%Y-%m-%d') wdate, hit, datediff(now(), wdate) wgap
from board1
order by seq desc
</select>
<!-- view -->
<select id="view" parameterType="model1.BoardTO" resultType="model1.BoardTO">
select seq, subject, writer, mail, wip, wdate, hit, content
from board1
where seq=#{seq}
</select>
<update id="view_hit" parameterType="model1.BoardTO">
update board1 set hit=hit+1
where seq=#{seq}
</update>
<!-- write_ok -->
<insert id="write_ok" parameterType="model1.BoardTO">
insert board1 values(0, #{subject}, #{writer}, #{mail}, #{password}, #{content}, 0, #{wip}, now())
</insert>
<!-- modify -->
<select id="modify" parameterType="model1.BoardTO" resultType="model1.BoardTO">
select seq, subject, writer, content, mail
from board1
where seq=#{seq}
</select>
<!-- modify_ok -->
<update id="modify_ok" parameterType="model1.BoardTO">
update board1 set subject = #{subject}, mail=#{mail}, content=#{content}
where seq=#{seq} and password=#{password}
</update>
<!-- delete -->
<select id="delete" parameterType="model1.BoardTO" resultType="model1.BoardTO">
select seq, subject, writer
from board1
where seq=#{seq}
</select>
<!-- delete_ok -->
<delete id="delete_ok" parameterType="model1.BoardTO">
delete from board1
where seq=#{seq} and password=#{password}
</delete>
</mapper>
4) DAO 수정
원래 DAO 파일을 복사하여 BoardMyBatisDAO.java 라는 이름으로 myBatis용 DAO 파일을 만든다.
myBatis와 맞게 수정한다.
> BoardMyBatisDAO.java
package model1;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
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 BoardMyBatisDAO {
private SqlSession sqlSession;
public BoardMyBatisDAO() {
String resource = "myBatisConfig.xml";
InputStream is = null;
try {
is = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
this.sqlSession = sqlSessionFactory.openSession(true);
} catch (IOException e) {
System.out.println("[에러]" + e.getMessage());
} finally {
if(is != null) try {is.close();} catch(IOException e) {}
}
}
// writer - dao 통과 안해도됨
public void boardWrite() {}
// writer_ok - flag 값있어야함
public int boardWriteOk(BoardTO to) {
int flag = 1;
int result = sqlSession.insert("write_ok",to);
if(result == 1) {
flag = 0;
}
return flag;
}
// list
public ArrayList<BoardTO> boardList(){
ArrayList<BoardTO> boardLists = (ArrayList)sqlSession.selectList("list");
if(sqlSession != null) sqlSession.close();
return boardLists;
}
// view
public BoardTO boardView(BoardTO to) {
sqlSession.update("view_hit", to);
to = sqlSession.selectOne("view", to);
if(sqlSession != null) sqlSession.close();
return to;
}
// delete
public BoardTO boardDelete(BoardTO to) {
BoardTO board = sqlSession.selectOne("delete", to);
if(sqlSession != null) sqlSession.close();
return board;
}
// delete_ok
public int boardDeleteOk(BoardTO to) {
int flag = 2;
int result = sqlSession.delete("delete_ok",to);
if(result == 1) {
flag = 2;
}else if(result == 0) {
flag = 1;
}
return flag;
}
// modify
public BoardTO boardModify(BoardTO to) {
BoardTO board = sqlSession.selectOne("modify", to);
if(sqlSession != null) sqlSession.close();
return board;
}
// modify_ok
public int boardModifyOk(BoardTO to) {
int flag = 1;
int result = sqlSession.update("modify_ok",to);
if(result == 1) {
flag = 2;
}else if(result == 0) {
flag = 1;
}
return flag;
}
}
5) view 수정
board_list1.jsp에서 BoardDAO를 BoardMyBatisDAO로 바꾸고 model1.BoardMyBatisDAO를 import 시킨다.
myBatis 설정 파일 형식
1. xml
2. annotation + POJO(Plain Object Java Object : 순수자바)
인터페이스로 활용을 많이 한다.
4. myBatis 구현 - annotation
> myBatisEx05
1. 라이브러리, 환경설정파일 넣기
2. model1 패키지에 to 만들기
3. config 패키지에 인터페이스 만들기
4. default 패키지에 main 클래스 만들기
원래 mapper.xml 파일이 인터페이스가 된다.
그 인터페이스에서 annotation으로 sql문을 갖는다.
5. myBatis annotation방식으로 Model1 게시판 만들기
myBatis 로 만든 model1 게시판을 annotation 기법으로 바꾸기
xml방식을 사용했을 땐 DAO 메서드 안에서 매핑을 위해 selectOne, selectList, insert, update, delete 와 같이
내부적으로 선언된 메서드를 사용해야 했다. ex) '메서드명(mapper.xml태그id , 파라메터)'
그러나 annotation 방식은 그냥 현재 속한 DAO메서드를 매핑객체랑 재귀호출해서 매핑한다.
annotation 방식은 인터페이스를 사용한다.
이 인터페이스의 역할은 DAO 메서드별로 수행할 sql 문을 지정하는 것이다.
인터페이스에서 sql 문을 annotation방식으로 지정 받은 DAO 메서드는 호출되면 바로 매핑이 이루어지는게 아니고
메서드 안에서 매핑객체를 통해 재귀호출되면서 매핑이 이루어진다.
JSP / Java Framework
1. myBatis - SQL Mapper
2. spring - class 를 풀링하는 framework
=> 전자정부 프레임워크의 핵심
ant > maven > gradle
1. Maven - 컴파일을 쉽게 처리하려고 만든 Java 개발 도구 framework
=> 라이브러리 접근에도 쉽다.
(중앙 저장소가 있어서 라이브러리 관리 기능 포함 - 네트워크로 자동 다운로드(pom.xml))
=> 컴파일과 빌드를 동시에 수행
https://mavenrepository.com/ - xml
gradle - json
라이브러리 많음 CDN 처럼 가져다 쓸수 있게 주소가 있음 (원격으로 쓸수 있게함)
Maven
1. 프로젝트 환경 설정
1-1. 환경 설정
New > other.. > Maven Project 로 프로젝트를 만든다.
가장 간단한 형태를 가져다가 쓰기로 한다.
maven-archetype-quickstart가 가장 간단하다.
Group Id 와 Artifact Id를 입력한다.
이건 도메인 네임이 된다.
그렇게 Maven 프로젝트를 만들면 다음과 같은 형태를 띄게 된다.
근데 이렇게 될 때까지 시간이 좀 걸린다. 완전히 생성될 때까지 잘 기다리도록 한다^^
1-2. 라이브러리 관리
다음으로 Maven에서 제공하는 라이브러리 관리 기능을 알아보자.
https://mavenrepository.com/ 에서 라이브러리를 검색하면 프레임워크 별로 코드를 준다.
Maven은 pom.xml에서 라이브러리를 관리 하기 때문에 xml 코드가 제공된다.
이 xml코드를 복사해서 다음과같이 pom.xml의 <dependencies> 안에 붙여넣는다.
그럼 자동으로 다운받아진다.
!!! 라이브러리 삭제시 유의 사항!!!
라이브러리를 삭제하려고 pom.xml에서 코드를 지워도 임시저장소에 저장되어 있기 때문에 삭제된게 아니다.
완전히 삭제하려면 내 컴퓨터의 'C:\Users\김해선\.m2\repository' 에 가서 지워줘야한다.
※ 그렇다면 Maven에서 myBatis의 라이브러리는 어떻게 추가할까?
'빅데이터 플랫폼 구축을 위한 자바 개발자 양성과정' 카테고리의 다른 글
01/25 ! - Spring(2) : DI(Dependency Inject)의 2가지 형태 bean configuration file(xml)과 annotation (0) | 2021.02.25 |
---|---|
01/22 ! - Maven 웹 프로젝트 만들기, Spring(1) (0) | 2021.02.25 |
01/20 ! - MyBatis(1) : MyBatis 설정파일(mapper)을 xml로 자바,웹 프로젝트 구현 (0) | 2021.02.25 |
01/19 - Bootstrap(2) : 사용법 (1) | 2021.01.31 |
01/18 - W2ui, Bootstrap(1) : javascript를 지원하는 다양한 라이브러리 (0) | 2021.01.31 |