다시 Spirng 수업
새로운 프로젝트를 만들어주고 먼저 Oracle DB를 이클립스로 연결해보겠다.
이클립스 window에 Eclipse Marketplace를 열고 mybasit를 검색해주고 제일 상단을 install해준다.
여기에 다음과 같은 코드를 추가해주었다.
<!--
JNDI 데이터 소스 객체 얻어오는 설정
Servers/context.xml 에 설정된 oracle 접속정보 가 있어야 된다.
<Resource name="jdbc/myoracle" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@127.0.0.1:1521:xe"
username="scott" password="tiger" maxTotal="20" maxIdle="10"
maxWaitMillis="-1"/>
-->
<beans:bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<beans:property name="jndiName" value="java:comp/env/jdbc/myoracle"/>
</beans:bean>
<!--
위는 아래의 코드와 같다
dataSource = new JndiObjectFactoryBean();
dataSource.setJndiName("java:comp/env/jdbc/myoracle");
-->
<!--
SqlSessionFactory 객체
Configuration.xml 문서가 어디에 있는지 알려야 한다.
value 에서 classpath: 은 src/main/resources 폴더를 가리킨다.
따라서 classpath:Configuration.xml 은 src/main/resources 폴더안에 존재 해야 한다.
-->
<beans:bean id="sessionFactory"
class="org.mybatis.spring.SqlSessionFactoryBean">
<beans:property name="dataSource" ref="dataSource"/>
<beans:property name="configLocation" value="classpath:Configuration.xml"/>
</beans:bean>
<!--
sessionFactory=new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
sessionFactory.setConfigLocation("classpath:Configuration.xml");
-->
<!--
SqlSession 인터페이스를 구현한
SqlSessionTemplate(SqlSession) 객체
Dao 가 의존하는 객체
-->
<beans:bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<beans:constructor-arg name="sqlSessionFactory"
ref="sessionFactory"/>
</beans:bean>
<!--
위의 bean 설정을 java code 로 환산 하면 아래와 같다
dataSource = new JndiObjectFactoryBean();
dataSource.setJndiName("java:comp/env/jdbc/myoracle");
sessionFactory=new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
sessionFactory.setConfigLocation("classpath:xxx");
new SqlSessionTemplate(sessionFactory);
-->
Spring 프레임워크를 사용하는 근본적인 이유는
프로젝트의 규모가 큰 경우에 유지 보수를 편하게 하기 위해서 사용한다.
클래스(객체들)들 간에 의존 관계가 느슨해야 유지 보수가 편하다. 어떠헥 해야 의존 관계가 느슨해 지는걸까?
- 필요한 핵심의존 객체를 직접 생성하지 않고 주입 받아서 사용한다.
- 객체의 생성과 관리를 spring프레임워크에 맡긴다.
- 인터페이스 type을 적극 활용한다.
객체 생성과 관리를 Spring에게 맡긴다. 이렇게 하면 의존 관계가 느슨해진다.
<beans:bean id="dataSource"
class="org.springframework.jndi.JndiObjectFactoryBean">
<beans:property name="jndiName" value="java:comp/env/jdbc/myoracle"/>
</beans:bean>
<!--
위는 아래의 코드와 같다
dataSource = new JndiObjectFactoryBean();
dataSource.setJndiName("java:comp/env/jdbc/myoracle");
-->
Configuration.xml 은 sqlSessionFactoryBean에서 읽어 들이고 이 읽어 들인 sqlSessionFactoryBean은 sessionFactory로 들어가게 된다.
새로운 패키지 두개를 만들어준다. dao와 dto 에 각각 클래스도 만들어주고 지난 시간과는 다르게 구현 클래스도 만들어주겠다.
insert문 먼저 작성해보겠다.
그런다음 MemberMapper.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="member">
<insert id="insert" parameterType="com.gura.spring02.member.dto.MemberDto">
INSERT INTO member
(num, name, addr)
VALUES (member_seq.NEXTVAL, #{name}, #{addr})
</insert>
</mapper>
parameterType은 full package 경로를 적어주어야 한다.
#{name}, #{addr}은 MemberDto에 있는 name과 addr을 알아서 바인딩 해달라는 뜻이다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>/views/member/insertform.jsp</title>
</head>
<body>
<div class="container">
<h1>회원 추가 폼 입니다.</h1>
<form action="${pageContext.request.contextPath }/member/insert" method = "post">
<div>
<label for="name">이름</label>
<input type="text" name = "name" id = "name"/>
</div>
<div>
<label for="addr">주소</label>
<input type="text" name = "addr" id = "addr" />
</div>
<button type = "submit">추가</button>
</form>
</div>
</body>
</html>
@Autowired
private MemberDao dao;
//회원추가 요청처리
@RequestMapping("/member/insert")
public String insert(MemberDto dto) {
//MemberDao 객체를 이용해서 DB에 저장
dao.insert(dto);
//view page로 forward 이동해서 응답
return "member/insert";
}
SELECT할 칼럼의 이름이 해당 DTO의 필드 명과 같아야 한다.
//회원 목록 보기 요청 처리
@RequestMapping("/member/list")
public String list(HttpServletRequest request) {
//회원목록을 얻어와서
List<MemberDto> list = dao.getList();
//request scope에 담고
request.setAttribute("list", list);
// /WEB_INF/views/member/list.jsp페이지로 forward이동해서 응답
return "member/list";
}
'수업내용' 카테고리의 다른 글
20230622 수업내용🤦♂️🤦♂️🤦♂️ (0) | 2023.06.23 |
---|---|
20230620 수업내용😢😢😢 (0) | 2023.06.20 |
20230616 수업내용2🤦♂️🤦♂️🤦♂️ (1) | 2023.06.16 |
20230616 수업내용🫡🫡🫡 (0) | 2023.06.16 |
20230615 수업내용👏👏👏 (0) | 2023.06.15 |
댓글