jdbc와 마이바티스
WEB/이론2017. 3. 21. 14:11
1.jdbc란?
자바 프로그램 내에서 데이터베이스 질의문 즉, SQL을 실행하기 위한 자바 API(application programming interface)이다.
다음은 프로젝트시 사용했던 jdbc예제이다.
1.java swing을 통해 구현했던 예제
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 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | package server; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.ArrayList; import java.util.Date; public class DB_Main { public ArrayList<String> dbMain = new ArrayList<String>(); String sql; public DB_Main(String sql) { // TODO Auto-generated constructor stub try { this.sql = sql; //1. jdbc 드라이버를 메모리로 로드한다. Class.forName("oracle.jdbc.driver.OracleDriver"); //2. DB 서버에 연결 Connection con = DriverManager.getConnection( "jdbc:oracle:thin:@192.168.43.34:1521:orcl", "hr", "hr" ); //3. sql 명령어 실행하기 위한 Statement 객체 생성 Statement stmt = con.createStatement(); //4. sql 명령어 실행(Statement를 통해서) //검색한 결과가 rs에 담겨져 있음 //ResultSet rs = stmt.executeQuery(SelectFrom.fromTable); ResultSet rs = stmt.executeQuery(sql); while(rs.next()) { if(sql.equals("select kind,id,name,pw,tel,address,birth from staff")) { String kind = (rs.getString("kind").equals("0") ? "관리자" : "직원" ); String id = rs.getString("id"); String name = rs.getString("name"); String pw = rs.getString("pw"); String tel = rs.getString("tel"); String ad = rs.getString("address"); String birth = rs.getString("birth"); dbMain.add(kind); dbMain.add(id); dbMain.add(name); dbMain.add(pw); dbMain.add(tel); dbMain.add(ad); dbMain.add(birth); } } rs.close(); stmt.close(); con.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } |
2. jsp와 연동한 예제 (DAO))
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 | public class BoardDAO { private Connection conn = DBConn.getConnection(); public int insertBoard(BoardDTO dto, String mode){ int result=0; PreparedStatement pstmt=null; String sql; String fields="num,userid,subject,content"; sql="INSERT INTO freeboard (" + fields + ") VALUES (?,?,?,?)"; try { pstmt = conn.prepareStatement(sql); int maxNum = maxBoardNum() + 1; pstmt.setInt(1, maxNum); pstmt.setString(2, dto.getUserId()); pstmt.setString(3, dto.getSubject()); pstmt.setString(4, dto.getContent()); result = pstmt.executeUpdate(); pstmt.close(); } catch (Exception e) { System.out.println(e.toString()); } return result; } |
db와 연동해 커넥션을 맺고 쿼리문을 날려 resultset을 받아오고, 그걸 rs.next()와 같은 방법을 통해 받아온다.
2.마이바티스
jdbc는 SQL의 변경이 발생할 경우 java파일 ,즉 프로그램 소스를 수정하기 때문에 유연성이 좋지 못했는데, 마이바티스 에서는 SQL을 xml 파일에 작성하기 때문에, SQL의 변환이 자유롭고, 가독성이 좋다.
mvc2패턴의 자유게시판 글쓰기 흐름.
1.클라이언트 요청 - bbs/created 로 요청한다.
var f 에 form내용을 실어보낸다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | function check() { var f = document.boardForm; var str = f.subject.value; if(!str) { f.subject.focus(); return false; } str = f.content.value; if(!str) { f.content.focus(); return false; } var mode="${mode}"; if(mode=="created") f.action="<%=cp%>/bbs/created"; else if(mode=="update") f.action="<%=cp%>/bbs/update"; return true; } |
2.컨트롤러 (서블릿) - 요청을 받는다 dto와 session을 들고 서비스에게 insertboard 명령
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | //글쓰기 POST// @RequestMapping(value="/bbs/created", method=RequestMethod.POST) public String createdSubmit( Board dto, HttpSession session ) throws Exception { SessionInfo info = (SessionInfo)session.getAttribute("staff"); if(info==null){ return "redirect:/"; } dto.setS_num(info.getS_num()); service.insertBoard(dto); return "redirect:/bbs/list"; } |
3.서비스
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | @Service("bbs.boardService") public class BoardServiceImpl implements BoardService { @Autowired private CommonDAO dao; //글쓰기. @Override public int insertBoard(Board dto) { int result = 0; try { result = dao.insertData("bbs.insertBoard", dto); } catch (Exception e) { System.out.println(e.toString()); } return result; } |
4.DAO
1 2 3 4 5 6 7 8 9 10 11 12 13 | public int insertData(String id, Object value) throws Exception { int result = 0; try { result = sqlSession.insert(id, value); } catch (Exception e) { System.out.println(e.toString()); throw e; } finally { } return result; } |
5.맵퍼.xml
1 2 3 4 5 6 7 8 9 10 | <mapper namespace="bbs"> <!-- 글쓰기 --> <insert id="insertBoard" parameterType="com.sp.bbs.Board"> INSERT INTO bbs ( num,s_num,subject,content) VALUES( bbs_seq.NEXTVAL, #{s_num}, #{subject}, #{content}) </insert> |
'WEB > 이론' 카테고리의 다른 글
마이바티스 사용이유 (0) | 2017.04.11 |
---|---|
spring mvc 동작방식 (0) | 2017.03.22 |
스프링 MVC 구조와 MVC1패턴과 2패턴의 차이. (0) | 2017.03.20 |
web.xml (0) | 2017.01.18 |