Spring/Spring framework

Mybatis

원2 2021. 7. 29. 15:05
728x90
반응형

https://ko.wikipedia.org/wiki/%EB%A7%88%EC%9D%B4%EB%B0%94%ED%8B%B0%EC%8A%A4

 

마이바티스 - 위키백과, 우리 모두의 백과사전

 

ko.wikipedia.org


 

한글관련 깨짐은 앞에 필터를 추가해주면 되니 여기서 언급은 안함

 

여기에 빈즈 삽입
패키지 경로가 맞아야한다 ㅇㅇ 이걸로 DB와 연결

 

	<beans:bean name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<beans:property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
		<beans:property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
		<beans:property name="username" value="scott"/>
		<beans:property name="password" value="tiger"/>
	</beans:bean>
	
	<beans:bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<beans:property name="dataSource" ref="dataSource"/>
		<beans:property name="mapperLocations" 
		value="classpath:com/bit/springNote2/dao/mapper/*.xml"/>
	</beans:bean>
	
	<beans:bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
		<beans:constructor-arg index="0" ref="sqlSessionFactory"/>
	</beans:bean>

Mybatis를 사용하기 위한 라이브러리 추가 앞에서 2개를 추가해주었따.

Mybatis를 사용하지 않으려면 아래 코드에서 mybaits 관련 2개만 지워주면 된다.

<!-- 스프링에서 JDBC 를 사용하기 위한 라이브러리 입니다. -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>

		<!-- 컨넥션 풀을 위한 라이브러리 -->
		<dependency>
			<groupId>commons-dbcp</groupId>
			<artifactId>commons-dbcp</artifactId>
			<version>1.4</version>
		</dependency>

		<!-- 오라클 JDBC 드라이버 -->
		<dependency>
    		<groupId>com.oracle.database.jdbc</groupId>
    		<artifactId>ojdbc6</artifactId>
    		<version>11.2.0.4</version>
		</dependency>
		
		<!-- lombok -->
		<dependency>
    		<groupId>org.projectlombok</groupId>
    		<artifactId>lombok</artifactId>
    		<version>1.18.10</version>
    		<scope>provided</scope>
		</dependency>
		
		<!--mybatis-->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.5.1</version>
		</dependency>
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>2.0.1</version>
		</dependency>

마이바티스를 쓰기 위해서는 라이브러리 버전은 11이상, springframework 버전은 5.0.7이 되어야한다

숫자만 바꿔줘도 변경된다
그후 해당 프로젝트의 Properties 에 들어가서 자바 버전 설정

자바 버전을 11로 맞춰줘야 에러가 안뜬다.

 


7/29
SpringNote(with Oracle)
1.app명 : springNote(MVC Project 생성)
2.package명 : com.bit.springNote
3.web.xml 한글 처리
4.HomeController.java에서 home 메소드의 mapping값을 home으로 수정
5.main.jsp 생성 실행
6.server.xml에서 myapp context는 주석처리
7.table.sql에 테이블과 시퀀스 생성
8.pom.xml에 필수 lib 추가
(lombok-1개, DB연동-3개)
9.server.xml 오라클 연결 정보 추가(JNDI)
 - <GlobalNamingResources> 태그 안에 추가
<Resource auth="Container" driverClassName="oracle.jdbc.OracleDriver" maxActive="50" maxWait="1000" name="jdbc/Oracle18g" password="tiger" type="javax.sql.DataSource" url="jdbc:oracle:thin:@localhost:1521:xe" username="scott"/>
- <Context> 태그 안에 추가
<ResourceLink global="jdbc/Oracle" name="jdbc/Oracle" type="javax.sql.DataSource"/>

10.패키지 생성 : dao, dto, controller, command
11.dto/NoteDto.java 생성
12.dao/NoteDao.java 생성
13.command/interface NoteCommand.java 구현
 - NoteWriteCommand.java 
 - NoteListCommand.java 
 - NoteDeleteCommand.java
14.NoteController.java 구현
15.noteForm.jsp 복사
      noteList.jsp 구현

프로젝트 목록


home


noteForm

<%@ page contentType="text/html; charset=UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>Note Form</h3>
<form action="write" method="post">
	<table width="500" border="1">
			<tr>
				<td> 이름 </td>
				<td> <input name="writer" size = "20"> </td>
			</tr>
			<tr>
				<td> 내용 </td>
				<td> <input name="content" size = "50"> </td>
			</tr>

			<tr >
				<td colspan="2"> 
				<input type="submit" value="입력"> &nbsp;&nbsp; 
				<a href="list">목록보기</a></td>
			</tr>
	</table>
	</form>
</body>
</html>

noteList

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<table width="500" border="1">
	<tr>
		<th>번호</th>
		<th>작성자</th>
		<th>내용</th>
		<th>삭제</th>
	</tr>
	<c:forEach var="dto" items="${list }">
	<tr>
		<td>${dto.id }</td>
		<td>${dto.writer }</td>
		<td>${dto.content }</td>
		<td><a href="delete?id=${dto.id }">삭제</a></td>
	</tr>
	</c:forEach>
	<tr>
		<td colspan="4"><a href="noteForm"></a></td>
	</tr>
</table>
</body>
</html>

NoteController

NoteController

package com.bit.springNote2.controller;

import javax.servlet.http.HttpServletRequest;


import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.bit.springNote2.dao.IDao;


@Controller
public class NoteController {
	
//	servlet-context.xml 생성된 객체를 주입 받아서 사용.
//	Mybatis를 이용하여 DAO를 구현하려면 sqlSession이 필요하다
	@Autowired
	private SqlSession sqlSession;
	
	@RequestMapping(value = "noteForm")
	public String noteForm() {
		
		return "noteForm";
	}
	
	@RequestMapping(value = "write")
	public String write(HttpServletRequest req, Model model) {
		
//		아래 두줄은 이해하지말고 그냥 써라 이렇게 쓰는거다 ㅇㅇ
		IDao dao = sqlSession.getMapper(IDao.class);
		dao.writeDao(req.getParameter("writer"), req.getParameter("content"));
		
		return "redirect:list";
	}
	
	@RequestMapping(value = "list")
	public String list(Model model) {
		
		IDao dao = sqlSession.getMapper(IDao.class);
		model.addAttribute("list",dao.listDao());

		return "noteList"; // noteList호출
	}
	
	@RequestMapping(value = "delete")
	public String delete(HttpServletRequest req, Model model) {
		
//		여기서는 자동으로 형변환을 시켜줘서 따로 intpar뭐시기를 쓸 필요가 없다.
		IDao dao = sqlSession.getMapper(IDao.class);
		dao.deleteDao(req.getParameter("id"));
		
		return "redirect:list"; // noteList호출
	}
}

IDao.java // interface
여기서 DAO의 속성(?) 만 설정.

 

다시보는 접근자 
  • public : 접근 제한 없음
  • protected : 동일한 패키지 내에 존재하거나 파생 클래스에서만 접근 가능
  • default : 아무런 접근 제한자를 명시하지 않으면 default 값, 동일한 패키지 내에서만 접근 가능
  • private : 자기 자신의 클래스 내에서만 접근이 가능 ->> getter, setter 로 접근이 가능
다시보는 void

void의 역할은return 되는 타입이 없음을 의미. (void : 공허,공백,무효의)

 즉 아무것도 리턴하지 않음을 선언해주는 것과 같다.

 리턴에 대하여 void를 선언하였으므로 아무것도 리턴하지 않아야 에러가 발생하지 않는다.

IDao.java // interface

package com.bit.springNote2.dao;

import java.util.ArrayList;

import com.bit.springNote2.dto.NoteDTO;

public interface IDao {
	public void writeDao(String writer, String id);
	public ArrayList<NoteDTO> listDao();
	public void deleteDao(String id);
}

IDao.xml
<!-- 값을 처리하는 DAO를 따로 주절주절 넣지 않아도 간단하게 처리가 가능하다. -->

IDao.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">

<!-- xml 위의 링크를 타보면 속성과 엘리먼트 값이 나온다 ㅇㅇ //경로값 확인 -->
<mapper namespace="com.bit.springNote2.dao.IDao">
	<insert id="writeDao">
		insert into tblNote(id, writer, content)values(tblNoteSeq.nextval,#{param1},#{param2})
	</insert>
	<!--
		select는 무조건 값이 있기 때문에 resultType이 필요하다. 
		여기서 말하는 resultType은 레코드 단위의 값이라서 패키지명까지 다 입력 해줘야한다.
		참조 : Arraylist<> IDao.java의 값
	 -->
	 <!-- 주의 할 점 : sql문이 특수문자에서 띄워쓰지 않아도 잘 되지만, 프로그래밍에서는 안된다. -->
	<select id="listDao" resultType="com.bit.springNote2.dto.NoteDTO">
		select * from tblNote order by id desc
	</select>
	
	<delete id="deleteDao">
		delete from tblNote where id = #{param1}
	</delete>

</mapper>

NoteDTO.java

lombok을 사용해서 어노테이션 만으로 getter, setter, AllargsConstructor를 구현한 모습

 

어노테이션 태그
  • @AllArgsConstructor
     
    클래스에 존재하는 모든 필드에 대한 생성자를 자동으로 생성
     
    만약 필드중에서 @NonNull 애노테이션이 마크되어 있다면 생성자 내에서 null-check 로직을 자동적으로 생성

NoteDTO.java

package com.bit.springNote2.dto;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@AllArgsConstructor
public class NoteDTO {

	private int Id;
	private String Writer;
	private String Content;
}

결과

NoteForm 입력
리스트 출력
삭제


7/29_1
SpringNote2(with Oracle)
1.app명 : springNote2(MVC Project 생성)
2.package명 : com.bit.springNote2
3.web.xml 한글 처리
4.HomeController.java에서 home 메소드의 mapping값을 home으로 수정
5.main.jsp 생성 실행
6.server.xml에서 springNote context는 주석처리
7.noteForm.jsp, noteList.jsp 복사
8.springNote에 추가된 lib 4개 복사
 - mybatis lib 2개 추가
9.pom.xml에 11라인 자바 버전 -> 1.8
                           12라인 스프링 버전 -> 5.0.7
    - JRE 버전 ->jdk11 
10.servlet-context.xml
 - beans 3개 추가
11.package : controller, dto, dao/mapper
12.dto/NoteDto.java 생성
13.dao/IDao.java(인터페이스 생성)
14.dao/mapper/IDao.xml
15.controller/NoteController.java 구현
728x90
반응형

'Spring > Spring framework' 카테고리의 다른 글

Command 사용 Board  (0) 2021.08.03
Mybatis이용한 Board2  (0) 2021.08.03
Board  (0) 2021.07.30
DB연결 코드와 자주 쓰는 코드 지정해두기  (0) 2021.07.29
Model 객체  (0) 2021.07.29
Spring 기초  (0) 2021.07.28