마이바티스
Persistence 솔루션으로 SQL 실행 결과 관리 (SQL -> XML)
SQL문과 프로그래밍 코드 분리 구현
DataSource 기능, 트랜잭션 처리 기능 제공
SqlMapConfig.xml: 사용할 SqlMap.xml 파일들 등록
SqlMap.xml: SQL문 저장
pro23/src/mybatis/SqlMapConfig.xml
SQL문 파일 연결
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAlias type="com.spring.ex01.MemberVO" alias="memberVO"/> <!-- MemberDAO - MemberVO - SQL -->
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED"> <!-- DB 연결 -->
<property name="driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="JDBC:oracle:thin:@localhost:1521:XE" />
<property name="username" value="scott" />
<property name="password" value="tiger"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mybatis/mappers/member.xml"/>
</mappers>
</configuration>
pro23/src/mybatis/mappers/member.xml
SQL문 저장
<?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="mapper.member">
<resultMap id="memResult" type="java.util.HashMap">
<!-- <resultMap id="memResult" type="memberVO"> -->
<result property="id" column="id" />
<result property="pwd" column="pwd" />
<result property="name" column="name" />
<result property="email" column="email" />
<result property="joinDate" column="joinDate"/>
</resultMap>
<select id="selectAllMemberList" resultMap="memResult">
<![CDATA[
select * from t_member order by joinDate desc
]]>
</select>
<select id="selectMemberById" resultType="memberVO" parameterType="String" >
<![CDATA[
select * from t_member
where
id= #{id}
]]>
</select>
<select id="selectMemberByPwd" resultMap="memResult" parameterType="int" >
<![CDATA[
select * from t_member
where
pwd = #{pwd}
]]>
</select>
<insert id="insertMember" parameterType="memberVO"> <!-- 회원 추가 SQL문 -->
<![CDATA[
insert into t_member(id,pwd, name, email)
values(#{id}, #{pwd}, #{name}, #{email}) <!-- 속성 이름으로 값 설정 -->
]]>
</insert>
<insert id="insertMember2" parameterType="java.util.HashMap"> <!-- HashMap 회원 추가 SQL문 -->
<![CDATA[
insert into t_member(id,pwd, name, email)
values(#{id}, #{pwd}, #{name}, #{email})
]]>
</insert>
<update id="updateMember" parameterType="memberVO"> <!-- 회원 정보 수정 SQL문 -->
<![CDATA[
update t_member
set pwd=#{pwd}, name=#{name}, email=#{email}
where
id=#{id}
]]>
</update>
<delete id="deleteMember" parameterType="String"> <!-- 회원 삭제 SQL문 -->
<![CDATA[
delete from t_member
where
id=#{id}
]]>
</delete>
</mapper>
pro23/src/com/spring/ex01/MemberServlet.java
요청을 DAO에 전달
package com.spring.ex01;
...
@WebServlet("/mem.do")
public class MemberServlet extends HttpServlet {
protected void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
doHandle(request,response);
}
protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException , IOException {
doHandle(request,response);
}
private void doHandle(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
MemberDAO dao = new MemberDAO();
MemberVO memberVO=new MemberVO();
String action=request.getParameter("action");
String nextPage="";
if(action==null || action.equals("listMembers")){ //회원 목록 조회
List<MemberVO> membersList=dao.selectAllMemberList();
request.setAttribute("membersList", membersList);
nextPage="test02/listMembers.jsp";
}
else if(action.equals("selectMemberById")){ //ID로 회원 검색
String id=request.getParameter("value");
memberVO=dao.selectMemberById(id);
request.setAttribute("member",memberVO);
nextPage="test02/memberInfo.jsp";
}
else if(action.equals("selectMemberByPwd")){ //pw로 회원 검색
int pwd =Integer.parseInt(request.getParameter("value"));
List<MemberVO> membersList=dao.selectMemberByPwd(pwd);
request.setAttribute("membersList",membersList);
nextPage="test02/listMembers.jsp";
}
else if(action.equals("insertMember")) { //회원 추가
String id=request.getParameter("id");
String pwd=request.getParameter("pwd");
String name=request.getParameter("name");
String email = request.getParameter("email");
memberVO.setId(id);
memberVO.setPwd(pwd);
memberVO.setName(name);
memberVO.setEmail(email);
dao.insertMember(memberVO);
nextPage="/mem4.do?action=listMembers";
}
else if(action.equals("insertMember2")) { //HashMap 회원 추가
String id=request.getParameter("id");
String pwd=request.getParameter("pwd");
String name=request.getParameter("name");
String email = request.getParameter("email");
Map memberMap=new HashMap();
memberMap.put("id", id);
memberMap.put("pwd", pwd);
memberMap.put("name", name);
memberMap.put("email", email);
dao.insertMember2(memberMap);
nextPage="/mem4.do?action=listMembers";
}
else if(action.equals("updateMember")) { //회원 정보 수정
String id=request.getParameter("id");
String pwd=request.getParameter("pwd");
String name=request.getParameter("name");
String email = request.getParameter("email");
memberVO.setId(id);
memberVO.setPwd(pwd);
memberVO.setName(name);
memberVO.setEmail(email);
dao.updateMember(memberVO);
nextPage="/mem4.do?action=listMembers";
}
else if(action.equals("deleteMember")) { //회원 삭제
String id=request.getParameter("id");
dao.deleteMember(id);
nextPage="/mem4.do?action=listMembers";
}
RequestDispatcher dispatch = request.getRequestDispatcher(nextPage);
dispatch.forward(request, response);
/* HashMap 회원 목록 조회
List<HashMap<String, String>> membersList = dao.selectAllMemberList();
//List<MemberVO> membersList = dao.selectAllMemberList();
request.setAttribute("membersList", membersList);
RequestDispatcher dispatch = request.getRequestDispatcher("test01/listMembers.jsp");
dispatch.forward(request, response); */
}
pro23/src/com/spring/ex01/MemberDAO.java
SQL문 호출
package com.spring.ex01;
...
public class MemberDAO{
private static SqlSessionFactory sqlMapper=null;
public static SqlSessionFactory getInstance() {
/* DB 연동 */
if(sqlMapper==null) {
try {
String resource = "mybatis/SqlMapConfig.xml";
Reader reader = Resources.getResourceAsReader(resource);
sqlMapper = new SqlSessionFactoryBuilder().build(reader);
reader.close();
} catch(Exception e) { e.printStackTrace(); }
}
return sqlMapper;
}
public List<MemberVO> selectAllMemberList() {
sqlMapper=getInstance();
SqlSession session=sqlMapper.openSession();
List<HashMap<String, String>> memlist = null; //List<MemberVO> memlist=null;
memlist=session.selectList("mapper.member.selectAllMemberList"); //SQL 실행
return memlist;
}
public MemberVO selectMemberById(String id){
sqlMapper=getInstance();
SqlSession session=sqlMapper.openSession();
MemberVO memberVO=session.selectOne("mapper.member.selectMemberById", id);
return memberVO;
}
public List<MemberVO> selectMemberByPwd(int pwd) {
sqlMapper = getInstance();
SqlSession session = sqlMapper.openSession();
List<MemberVO> membersList = null;
membersList= session.selectList("mapper.member.selectMemberByPwd", pwd);
return membersList;
}
public int insertMember(MemberVO memberVO) { //회원 추가
sqlMapper = getInstance();
SqlSession session = sqlMapper.openSession();
int result = session.insert("mapper.member.insertMember", memberVO);
session.commit();
return result;
}
public int insertMember2(Map<String,String> memberMap) { //HashMap으로 회원 추가
sqlMapper=getInstance();
SqlSession session=sqlMapper.openSession();
int result = session.insert("mapper.member.insertMember2", memberMap);
session.commit();
return result;
}
public int updateMember(MemberVO memberVO) { //회원 정보 수정
sqlMapper = getInstance();
SqlSession session = sqlMapper.openSession();
int result = session.update("mapper.member.updateMember", memberVO);
session.commit();
return result;
}
public int deleteMember(String id) { //회원 삭제
sqlMapper = getInstance();
SqlSession session = sqlMapper.openSession();
int result = 0;
result = session.delete("mapper.member.deleteMember", id);
session.commit();
return result;
}
}
pro23/src/com/spring/ex01/MemberVO.java
package com.spring.ex01;
...
public class MemberVO {
private String id;
private String pwd;
private String name;
private String email;
private Date joinDate;
public MemberVO() { }
public MemberVO(String id, String pwd, String name, String email) {
this.id = id;
this.pwd = pwd;
this.name = name;
this.email = email;
}
/* setter, getter */
...
pro23/WebContent/test01/listMembers.jsp
...
<table border="1" align="center" width="80%">
<tr align="center" bgcolor="lightgreen">
<td ><b>아이디</b></td>
<td><b>비밀번호</b></td>
<td><b>이름</b></td>
<td><b>이메일</b></td>
<td><b>가입일</b></td>
<td><b>삭제</b></td>
</tr>
<c:forEach var="member" items="${membersList}" >
<tr align="center">
<td>${member.id}</td>
<td>${member.pwd}</td>
<td>${member.name}</td>
<td>${member.email}</td>
<td>${member.joinDate}</td>
<td><a href="${contextPath}/mem4.do?action=deleteMember&id=${member.id}">
삭제하기</a></td>
</tr>
</c:forEach>
</table>
...
pro23/WebContent/test02/search.jsp
...
<title>회원 검색창</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/mem3.do">
입력 : <input type="text" name="value"/>
<select name="action">
<option value="listMembers" >전체</option>
<option value="selectMemberById" >아이디</option>
<option value="selectMemberByPwd">비밀번호</option>
</select>
<br>
<input type="submit" value="검색" />
</form>
</body>
</html>
pro23/WebContent/test02/memberInfo.jsp
...
<table border="1" align="center" width="100%" >
<tr align="center" bgcolor="lightgreen">
<td ><b>아이디</b></td>
<td><b>비밀번호</b></td>
<td><b>이름</b></td>
<td><b>이메일</b></td>
<td><b>가입일</b></td>
</tr>
<tr align="center">
<td>${member.id}</td>
<td>${member.pwd}</td>
<td>${member.name}</td>
<td>${member.email}</td>
<td>${member.joinDate}</td>
</tr>
</table>
...
pro23/WebContent/test03/memberForm.jsp
...
<form method="post" action="${ contextPath}/mem4.do?action=insertMember">
<h1 class="text_center">회원 가입창</h1>
<table align="center">
<tr>
<td width="200"><p align="right">사용자 아이디</td>
<td width="400"><input type="text" name="id"></td>
</tr>
...
pro23/WebContent/test03/modMember.jsp
...
<form method="post" action="${contextPath}/mem4.do?action=updateMember">
<h1 class="text_center">회원 정보 수정창</h1>
<table align="center">
<tr>
<td width="200"><p align="right">아이디</td>
<td width="400"><input type="text" name="id"></td>
</tr>
<tr>
<td width="200"><p align="right">비밀번호</td>
<td width="400"><input type="text" name="pw"></td>
</tr>
<tr>
<td width="200"><p align="right">이름</td>
<td width="400"><input type="text" name="name"></td>
</tr>
<tr>
<td width="200"><p align="right">이메일</td>
<td width="400"><input type="text" name="email"></td>
</tr>
...
<input type="submit" value="수정하기">
...
List selectList(query_id)
List selectList(query_id, 조건)
T selectOne(query_id): select 타입 지정
T selectOne(query_id, 조건)
Map<K, V> selectMap(query_id, 조건): Map 타입 반환
int insert(query_id, Object obj)
int update(query_id, Object obj)
int delete(query_id, Object obj)
SQL문 조건절에 동적으로 조건 추가
JSTL과 XML 기반 동적 SQL문 작성
<where>
<if test="조건식"> 추가할 구문 </if>
</where>
pro23/src/mybatis/mappers/member.xml
...
<select id="searchMember" parameterType="memberVO" resultMap="memResult">
<![CDATA[
select * from t_member
]]>
<where>
<if test="name != '' and name != null"> name = #{name} </if>
<if test=" email != '' and email != null "> and email=#{email} </if>
</where>
order by joinDate desc
</select>
</mapper>
pro23/src/com/spring/ex04/MemberServlet.java
...
private void doHandle(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
...
} else if(action.equals("searchMember")){
String name=request.getParameter("name");
String email=request.getParameter("email");
memberVO.setName(name);
memberVO.setEmail(email);
List<MemberVO> membersList =dao.searchMember(memberVO);
request.setAttribute("membersList",membersList);
nextPage="test03/listMembers.jsp";
}
...
pro23/src/com/spring/ex04/MemberDAO.java
...
public List<MemberVO> searchMember(MemberVO memberVO) {
sqlMapper=getInstance();
SqlSession session = sqlMapper.openSession();
List<MemberVO> list = session.selectList("mapper.member.searchMember",memberVO);
return list;
}
...
pro23/WebContent/test03/searchMember.jsp
...
<body>
<h1>회원검색</h1>
<form action="${contextPath}/mem4.do">
<input type="hidden" name="action" value="searchMember" />
이름 : <input type="text" name="name" /><br>
이메일 : <input type="text" name="email" /><br>
<input type="submit" value="검색" />
</form>
</body>
...
<choose>
<when test="조건식1"> 구문1 </when>
<when test="조건식2"> 구문2 </when>
...
<otherwise> 구문 n+1; </otherwise>
</choose>
pro23/src/mybatis/mappers/member.xml
...
<select id="searchMember" parameterType="memberVO" resultMap="memResult">
<![CDATA[
select * from t_member
]]>
<where>
<choose>
<when test="name != '' and name != null and email != '' and email != null"> name=#{name} and email=#{email} </when>
<when test="name != '' and name != null"> name = #{name} </when>
<when test="email != '' and email != null"> email = #{email} </when>
</choose>
</where>
order by joinDate desc
</select>
</mapper>
collection: 순회할 객체 모음
index
item: 현재 선택된 객체
open: 시작할 때 추가
close: 끝날 때 추가
separator: 구분자 추가
pro23/src/mybatis/mappers/member.xml
...
<!-- 조회 -->
<select id="foreachSelect" resultMap="memResult" parameterType="java.util.Map">
<![CDATA[
select * from t_member
]]>
where name in
<foreach item="item" collection="list" open="(" separator="," close=")" >
#{item}
</foreach>
order by joinDate desc
</select>
<!-- 추가 -->
<insert id="foreachInsert" parameterType="java.util.Map">
<foreach item="item" collection="list" open="INSERT ALL" separator=" "close="SELECT * FROM DUAL" >
INTO t_member(id, pwd, name, email)
VALUES (#{item.id},
#{item.pwd},
#{item.name},
#{item.email})
</foreach>
</insert>
</mapper>
pro23/src/com/spring/ex04/MemberServlet.java
...
private void doHandle(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
...
else if(action.equals("foreachSelect")) { //조회
List<String> nameList = new ArrayList();
nameList.add("홍길동");
nameList.add("차범근");
nameList.add("이순신");
List<MemberVO> membersList=dao.foreachSelect(nameList);
request.setAttribute("membersList", membersList);
nextPage="test03/listMembers.jsp";
}
else if(action.equals("foreachInsert")) { //추가
List<MemberVO> memList = new ArrayList();
memList.add(new MemberVO("m1", "1234", "박길동", "m1@test.com"));
memList.add(new MemberVO("m2", "1234", "이길동", "m2@test.com"));
memList.add(new MemberVO("m3", "1234", "김길동", "m3@test.com"));
int result=dao.foreachInsert(memList);
nextPage="/mem4.do?action=listMembers";
}
RequestDispatcher dispatch = request.getRequestDispatcher(nextPage);
dispatch.forward(request, response);
}
...
pro23/src/com/spring/ex04/MemberDAO.java
...
public List<String> foreachSelect(List<String> nameList) {
sqlMapper=getInstance();
SqlSession session=sqlMapper.openSession();
List<String> list=session.selectList("mapper.member.foreachSelect", nameList);
return list;
}
public int foreachInsert(List<MemberVO> memList) {
sqlMapper=getInstance();
SqlSession session=sqlMapper.openSession();
int result = session.insert("mapper.member.foreachInsert", memList);
session.commit();
return result ;
}
...
<sql id="a"> 재사용할 sql문 </sql>
sql문을 적용할 위치: <include refid="a" />
pro23/src/mybatis/mappers/member.xml
...
<!-- 재사용 코드 -->
<sql id="a">
<![CDATA[
select * from t_member
]]>
</sql>
<select id="searchMember" parameterType="memberVO" resultMap="memResult">
<include refid="a" />
<where>
<choose>
<when test="name != '' and name != null and email != ’’ and email != null"> name=#{name} and email=#{email} </when>
<when test="name != '' and name != null"> name = #{name} </when>
<when test="email !=’’ and email != null"> email = #{email} </when>
</choose>
</where>
order by joinDate desc
</select>
<select id="foreachSelect" resultMap="memResult" parameterType="java.util.Map">
<include refid="a" />
where name in
<foreach item="item" collection="list" open="(" separator="," close=")" >
#{item}
</foreach>
</select>
</mapper>
pro24/WebContent/WEB-INF/web.xml
<web-app ...>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/config/action-mybatis.xml
/WEB-INF/config/action-service.xml
</param-value>
</context-param>
...
</web-app>
pro24/WebContent/WEB-INF/action-servlet.xml
...
<beans>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/views/member/" />
<property name="suffix" value=".jsp"/>
</bean>
<bean id="memberController" class="com.spring.member.controller.MemberControllerImpl">
<property name="methodNameResolver"> <ref local="memberMethodNameResolver"/> </property>
<property name="memberService" ref="memberService"/>
</bean>
<bean id="memberMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
pro24/WebContent/WEB-INF/config/action-mybatis.xml
...
<!-- DB 설정 정보 가져오기 -->
<bean id="propertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<value>/WEB-INF/config/JDBC.properties</value>
</property>
</bean>
<!-- dataSource bean 생성 -->
<bean id="dataSource" class="org.apache.ibatis.datasource.pooled.PooledDataSource">
<property name="driver" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!-- 설정 파일 지정 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:mybatis /model/modelConfig.xml" />
<property name="mapperLocations" value="classpath:mybatis/mappers/*.xml" />
</bean>
<!-- sqlSession bean 생성-->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>
</bean>
<!-- memberDAO: sqlSession bean 주입 -->
<bean id="memberDAO" class="com.spring.member.dao.MemberDAOImpl">
<property name="sqlSession" ref="sqlSession"></property>
</bean>
</beans>
pro24/WebContent/WEB-INF/config/action-service.xml
...
<bean id="memberService" class="com.spring.member.service.MemberServiceImpl">
<property name="memberDAO" ref="memberDAO"/>
</bean>
</beans>
pro24/src/mybatis/mappers/member.xml
<mapper namespace="mapper.member">
<resultMap id="memResult" type="memberVO">
<result property="id" column="id" />
<result property="pwd" column="pwd" />
<result property="name" column="name" />
<result property="email" column="email" />
<result property="joinDate" column="joinDate" />
</resultMap>
<select id="selectAllMemberList" resultMap="memResult">
<![CDATA[
select * from t_member order by joinDate desc
]]>
</select>
<insert id="insertMember" parameterType="memberVO">
<![CDATA[
insert into t_member(id,pwd, name, email)
values(#{id}, #{pwd}, #{name}, #{email})
]]>
</insert>
<update id="updateMember" parameterType="memberVO">
<![CDATA[
update t_member
set pwd=#{pwd}, name=#{name}, email=#{email}
where
id=#{id}
]]>
</update>
<delete id="deleteMember" parameterType="String">
<![CDATA[
delete from t_member
where
id=#{id}
]]>
</delete>
...
</mappers>
pro24/src/mybatis/model/modelConfig.xml
...
<configuration>
<typeAliases>
<typeAlias type="com.spring.member.vo.MemberVO" alias="memberVO" /> <!-- 클래스명 별칭 설정 -->
</typeAliases>
</configuration>
pro24/src/com/spring/member/controller/MemberControllerImpl.java
View - MemberService
package com.spring.member.controller;
...
public class MemberControllerImpl extends MultiActionController implements MemberController {
private MemberService memberService;
public void setMemberService(MemberServiceImpl memberService) { //setter
this.memberService = memberService;
}
@Override
public ModelAndView listMembers(HttpServletRequest request, HttpServletResponse response) throws Exception { //회원 조회
String viewName = getViewName(request);
List<MemberVO> membersList = memberService.listMembers();
ModelAndView mav = new ModelAndView(viewName);
mav.addObject("membersList", membersList);
return mav;
}
@Override
public ModelAndView addMember(HttpServletRequest request, HttpServletResponse response) throws Exception { //회원 추가
request.setCharacterEncoding("utf-8");
MemberVO memberVO = new MemberVO();
bind(request, memberVO); //전송받은 정보를 각 속성으로 자동 바인딩
int result = 0;
result = memberService.addMember(memberVO);
ModelAndView mav = new ModelAndView("redirect:/member/listMembers.do"); //회원 목록으로 redirect
return mav;
}
@Override
public ModelAndView removeMember(HttpServletRequest request, HttpServletResponse response) throws Exception{ //회원 삭제
request.setCharacterEncoding("utf-8");
String id=request.getParameter("id");
memberService.removeMember(id);
ModelAndView mav = new ModelAndView("redirect:/member/listMembers.do"); //회원 목록으로 redirect
return mav;
}
public ModelAndView form(HttpServletRequest request, HttpServletResponse response) throws Exception {
/* DB 연동 없을 시 뷰이름 반환 */
String viewName = getViewName(request);
ModelAndView mav = new ModelAndView();
mav.setViewName(viewName);
return mav;
}
}
pro24/src/com/spring/member/service/MemberServiceImpl.java
Controller - MemberDAO
package com.spring.member.service;
...
@Transactional(propagation=Propagation.REQUIRED)
public class MemberServiceImpl implements MemberService {
private MemberDAO memberDAO;
public void setMemberDAO(MemberDAO memberDAO) { //setter
this.memberDAO = memberDAO;
}
@Override
public List<MemberVO> listMembers() throws DataAccessException {
List<MemberVO> membersList = null;
membersList = memberDAO.selectAllMemberList();
return membersList;
}
@Override
public int addMember(MemberVO memberVO) throws DataAccessException {
return memberDAO.insertMember(memberVO);
}
@Override
public int removeMember(String id) throws DataAccessException {
return memberDAO.deleteMember(id);
}
}
pro24/src/com/spring/member/dao/MemberDAOImpl.java
MemberService - DB(SqlSession)
package com.spring.member.dao;
...
public class MemberDAOImpl implements MemberDAO {
private SqlSession sqlSession;
public void setSqlSession(SqlSession sqlSession) { //setter
this.sqlSession = sqlSession;
}
@Override
public List selectAllMemberList() throws DataAccessException {
List<MemberVO> membersList = null;
membersList = sqlSession.selectList("mapper.member.selectAllMemberList");
return membersList;
}
@Override
public int insertMember(MemberVO memberVO) throws DataAccessException {
int result = sqlSession.insert("mapper.member.insertMember", memberVO);
return result;
}
@Override
public int deleteMember(String id) throws DataAccessException {
int result = sqlSession.delete("mapper.member.deleteMember", id);
return result;
}
}
pro24/WebContent/WEB-INF/view/member/listMembers.jsp
...
<c:forEach var="member" items="${membersList}" >
<tr align=center>
<td>${member.id}</td>
<td>${member.pwd}</td>
<td>${member.name}</td>
<td>${member.email}</td>
<td>${member.joinDate}</td>
<td><a href="${contextPath}/member/removeMember.do?id=${member.id}">삭제하기</a></td>
</tr>
</c:forEach>
</table>
<a href="${contextPath}/member/memberForm.do">
<h1 style="text-align:center">회원가입</h1>
</a>
...
pro24/WebContent/WEB-INF/view/member/memberForm.jsp
...
<form method="post" action="${contextPath}/member/addMember.do">
<h1 class="text_center">회원 가입창</h1>
<table align="center">
<tr>
<td width="200"><p align="right">사용자 아이디</td>
<td width="400"><input type="text" name="id"></td>
</tr>
...
...
<tr>
<td width="200"><p> </p></td>
<td width="400"> <input type="submit" value="가입하기"><input type="reset" value="다시입력"> </td>
</tr>
...
*자바 웹을 다루는 기술