21.03.31

30822 단어 SpringSpring

[☆☆Spring Legact Project 생성하고 해야 할 일☆☆]

1. pom.xml에 자바와 스프링버전 바꿔주기
2. pom.xml에 maven 라이브러리 추가해주기
-> 추가하고 Dependencies에서 추가 되어있는지 확인
3. DataSource작성(접속정보)
4. DataSource를 이용해서 DB접속 설정
-> 접속정보를 어디서 가져올지 설정
-> 쿼리문 xml이 있는 장소 설정
5. Mybatis를 자동으로 감지하여 사용할 수 있도록 설정
-> 탭에서 Namespaces에서 mybatis체크 version위에꺼 체크
6. RUN AS 해서 실행되나 보기

[MyBatis]

- 자바에서 DB프로그래밍을 쉽게 도와주는 프레임워크
- 프레임워크 : 하나의 작업을 하는 틀(절차) + 작업을 돕는 도구
- XML 이나 annotation 을 사용하여 저장 프로시저나 SQL 문으로 객체들을 연결시킨다.
- 퍼시스턴스 : 애플리케이션을 종료 후 실행 시 이전에 저장한 데이터를 다시 불러올 수 있는 기술

- MyBatis를 사용하기 위한 라이브러리
ojdbc8, common-dbcp, spring-dbcp, mybatis, mybatis-spring
- MyBatis 설정(servlet-context.xml에서 )
    - dataSource : 접속정보
    - sqlSessionFactory : Mybatis 연결시 DB 정보 
    			  mapper위치 지정(패키지가 생성되지 않으면 에러 발생)
    - mybatis-spring:scan : MyBatis를 자동 감지하는 범위
- mapper.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"
>
[servlet-context.xml]
<!-- DataSource작성(접속정보) -->
<beans:bean name="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <beans:property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
    <beans:property name="url" value="jdbc:oracle:thin:@gdportal.iptime.org:1521:xe"/>
    <beans:property name="username" value="C##WEB_USER"/>
    <beans:property name="password" value="web_pass"/>
</beans:bean>

<!-- DataSource를 이용해서 DB접속 설정 -->
<!-- id="네이밍에 자율성 있음" name="이름이 정해져있음" -->
<!-- 1. 접속정보를 어디서 가져오나? -->
<!-- 2. 쿼리문 xml이 있는 장소는? -->
<beans:bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
  <beans:property name="dataSource" ref="dataSource"/>
  <beans:property name="mapperLocations" value="classpath:com/spring/main/dao/*.xml"/>
</beans:bean>

<!-- Mybatis를 자동으로 감지하여 사용할 수 있도록 설정 -->
<mybatis-spring:scan base-package="com.spring.main.dao"/>

[게시판]

@Controller
public class HomeController {
	
	private Logger logger = LoggerFactory.getLogger(this.getClass());
	
	@Autowired BoardService service;
	
    	//리스트요청
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Model model) {
		ArrayList<BoardDTO> list = service.list();
		logger.info("list size : {}",list.size());
		model.addAttribute("boardList", list);
		return "list";
	}
	//삭제요청
	@RequestMapping(value = "/delete", method = RequestMethod.GET)
	public String delete(Model model,@RequestParam String idx) {
		logger.info("삭제요청 : "+idx);
		int success = service.delete(idx);
		logger.info("성공여부 : "+success);
		return "redirect:/";
	}
	//상세보기요청
	@RequestMapping(value = "/detail", method = RequestMethod.GET)
	public String detail(Model model,@RequestParam String idx) {
		logger.info("상세보기요청 : "+idx);
		BoardDTO dto = service.detail(idx);
		logger.info("작성자 : "+ dto.getUser_name());
		model.addAttribute("dto", dto);
		return "detail";
	}
	//글쓰기폼요청
	@RequestMapping(value = "/writeForm", method = RequestMethod.GET)
	public String writeForm(Model model) {
		logger.info("글쓰기폼 요청");
		return "writeForm";
	}
	//글쓰기폼요청
	@RequestMapping(value = "/write", method = RequestMethod.POST)
	public String write(Model model,@RequestParam HashMap<String,String> params) {
		logger.info("글쓰기 요청");
		logger.info("params: "+params);
		int success = service.write(params);
		logger.info("글쓰기 성공여부 : "+success);
		return "redirect:/";
	}
	
}
* 스프링에서는 jsp간 이동 불가 -> 컨트롤러를 타야한다.
@Service
public class BoardService {
	
	private Logger logger = LoggerFactory.getLogger(this.getClass());
	
	@Autowired BoardDAO dao;
	
	public ArrayList<BoardDTO> list() {
		logger.info("서비스 접근");
		ArrayList<BoardDTO> list = dao.list();
		return list;
	}

	public int delete(String idx) {
		logger.info("삭제 쿼리 요청");
		return dao.delete(idx);
	}

	public BoardDTO detail(String idx) {
		logger.info("상세보기 쿼리 요청");
		return dao.detail(idx);
	}

	public int write(HashMap<String, String> params) {
		logger.info("글쓰기요청");
		return dao.write(params);
	}

}
public interface BoardDAO {

	ArrayList<BoardDTO> list();

	int delete(String idx);

	BoardDTO detail(String idx);

	int write(String user_name, String subject, String content);

	int write(HashMap<String, String> params);
}
* 스프링에서는 DAO는 메서드 요청만 하고 쿼리작업은 mapper에서 한다.
[bbs_mapper.xml]
<!-- 누가 이 xml을 사용할까? mybatis / 누구와 연결? dao -->
<mapper namespace="com.spring.main.dao.BoardDAO">
    <!-- 어떤 쿼리를 실행할까?(쿼리에 세미콜론 찍지 말것) -->
    <!-- id="실행시킬 dao의 메서드이름" resultType="반환타입" -->
    <!--글 리스트 요청-->
    <select id="list" resultType="com.spring.main.dto.BoardDTO">
	SELECT * FROM BBS ORDER BY idx DESC
    </select>
	
    <!-- select가 아니면 반환값이 있어도 resultType을 선언하지 않는다. -->
    <!-- 기본타입(int,String)으로 파라메터가 들어올 경우  parameterType 생략가능-->
    <!-- 기본타입이 아닌경우 : arrayList,hashmap등 -->
    <!--글 삭제 -->
    <delete id="delete">
	DELETE FROM bbs WHERE idx = #{param1}
    </delete>
    
    <!--글 상세보기-->
    <select id="detail" resultType="com.spring.main.dto.BoardDTO">
	SELECT * FROM BBS WHERE idx = #{param1}
    </select>
	
    <!--글 쓰기-->
    <insert id="write" parameterType="hashMap">
	INSERT INTO BBS (idx,user_name,subject,content,bHit) 
    	VALUES(bbs_seq.NEXTVAL,#{user_name},#{subject},#{content},0)
    </insert>
</mapper>

좋은 웹페이지 즐겨찾기