21.03.31
[☆☆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>
Author And Source
이 문제에 관하여(21.03.31), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mingmang17/21.03.31저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)