2022. 10. 9. 12:58ㆍDev.Program/Java & Spring
> 우리가 지금까지 배운 건 첫 번째 형태
- 이런 부분들이 이름이 바뀌게 되면 수정할 게 너무 많아진다(전부 일일이 찾아서 바꿔야함)
- 이런 중복을 줄이기 위해 2번째형태(한 번만 수정하게) / 3번째형태(0 번 수정 : xml파일 사용)가 있음
======== service 패키지에 MemService 인터페이스 만들기
package com.itwillbs.service; // 부모 인터페이스 MemService public interface MemService { // 추상메서드(자식은 이 추상메서드를 상속받아서 씀) public void insert(); } |
< MemServiceImpl.java >
- MemService 상속(구현)받기
======== DAO 에 MemDAO 인터페이스 만들기
package com.itwillbs.DAO; public interface MemDAO { // 부모인터페이스 추상메서드 public void insert(); } |
< MemDAOImpl.java >
- MemDAO 상속(구현)받기
< MemberController.java >
@RequestMapping(value = "/insert", method = RequestMethod.POST) public String insertPost(MemberBean mb) { logger.info("Welcome insertPost!"); System.out.println(mb.getId()); System.out.println(mb.getPass()); System.out.println(mb.getName()); System.out.println("회원가입 처리"); // 1. 객체 생성 => 3군데 수정 필요 // MemServiceImpl memServiceImpl = new MemServiceImpl(); // memServiceImpl.insert(); // 2. 부모=자식 형태로 객체생성 // ⇒ 이름이 변경되면 1군데 수정 필요(↓자식클래스만 바꾸면 됨) MemService memService = new MemServiceImpl(); memService.insert(); return "redirect:login"; } |
< MemberServiceImpl.java >
package com.itwillbs.service; import com.itwillbs.DAO.MemDAO; import com.itwillbs.DAO.MemDAOImpl; // 처리 담당(Service) @Override public class MemServiceImpl implements MemService { public void insert() { System.out.println("MemServiceImpl - insert()"); // 1. 객체생성 => 3군데 수정 필요 // MemDAOImpl memDAOImpl = new MemDAOImpl(); // memDAOImpl.insert(); // 2. 부모=자식 객체생성 => 1군데 수정 필요 MemDAO memDAO = new MemDAOImpl(); memDAO.insert(); } } |
- http://localhost:8080/myweb/insert 링크부터 시작!
- 가입처리 해보기!
- 회원가입 눌렀을 때 콘솔창
- 업캐스팅과 다형성을 응용해서 2번째 방법을 만들어냄!
> 한 군데도 수정하고 싶지 않아서 3번째 방법을 고안해냄! = 스프링 형태
- 원래는 부모=자식인데 여기선 그렇게 안하고 스프링파일 xml 에서 자식객체 생성!
- 그럼 xml 만 바뀌면 싹 바뀔 수 있다!
부모=자식이 사용되는 곳 ⇐ 스프링파일 xml 에서 자식 객체생성 (필요한 곳에 주게끔)
스프링에서 객체 생성하는 방식 : 의존관계 주입(DI : Dependency Injection)
⇒ 객체 생성(new)은 다른 말로 의존관계라고 함!
set메서드 / 생성자
< MemberController.java >
MemService memService; public void setMemService(MemService memService) { this.memService = memService; } |
- 멤버변수로 추가!
- xml 을 전달해서 set메서드() 호출 후 부모에게 전달!
- 이렇게 하면 new(객체생성) 보다 복잡해보이지만 수정할 때 용이하다!
< MemServiceImpl.java >
// 처리 담당(Service) public class MemServiceImpl implements MemService { // 멤버변수 // MemDAO memDAO = new MemDAOImpl(); MemDAO memDAO; public void setMemDAO(MemDAO memDAO) { this.memDAO = memDAO; } @Override public void insert() { System.out.println("MemServiceImpl - insert()"); // 1. 객체생성 => 3군데 수정 필요 // MemDAOImpl memDAOImpl = new MemDAOImpl(); // memDAOImpl.insert(); // 2. 부모=자식 객체생성 => 1군데 수정 필요 // MemDAO memDAO = new MemDAOImpl(); // memDAO.insert(); // 3. 부모=자식이 사용되는 곳 <= 스프링파일 xml 에서 자식 객체생성 (필요한 곳에 주게끔) // 스프링에서 객체 생성하는 방식 : 의존관계 주입(DI : Dependency Injection) memDAO.insert(); } } |
- 똑같이 멤버변수로 만들고 / setter 만들고 / 호출
< servlet-context.xml >
- 지금은 myweb 만 스캔하게 되어있는데 서비스랑 DAO 도 스캔하게끔 추가해주기
<context:component-scan base-package="com.itwillbs.myweb" /> <context:component-scan base-package="com.itwillbs.service" /> <context:component-scan base-package="com.itwillbs.DAO" /> |
- 추가
< MemServiceImpl.java >
- 서비스를 담당하는 거라고 어노테이션 적어주기
- @Service
- 객체생성 자동으로 하게끔 set메서드 위에 @Inject 표시해주기!
< MemDAOImpl.java >
- DB 작업만 하는 거라고 어노테이션 적어주기
- @Repository
< MemController.java >
- 객체 생성을 자동으로 하게끔 표시해주기
- @Inject
< root-context.xml >
<bean id="memController" class="com.itwillbs.myweb.MemController"></bean> <bean id="memService" class="com.itwillbs.service.MemServiceImpl"></bean> <bean id="memDAO" class="com.itwillbs.DAO.MemDAOImpl"></bean> |
- 객체 생성 자동으로 할 수 있게 추가해주기
- bean 안에 property 만들기 : name 자동완성 할 수 있음! (Ctrl + Space)
- set 메서드 호출하는 게 property ⇒ set메서드가 있기 때문에 자동완성이 됨!
- 값을 가져오는 게 ref
- bean은 객체 생성
- 이런식으로 xml 에서 값을 넘겨주는 거
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- Root Context: defines shared resources visible to all other web components --> <bean id="memController" class="com.itwillbs.myweb.MemController"> <property name="memService"> <ref local="memService"/> </property> </bean> <bean id="memService" class="com.itwillbs.service.MemServiceImpl"> <property name="memDAO"> <ref local="memDAO"/> </property> </bean> <bean id="memDAO" class="com.itwillbs.DAO.MemDAOImpl"></bean> </beans> |
- 완성된 코드!
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- Root Context: defines shared resources visible to all other web components --> <bean id="memController" class="com.itwillbs.myweb.MemController"> <!-- <property name="memService"> --> <!-- <ref local="memService"/> --> <!-- </property> --> <property name="memService" ref="memService"/> </bean> <bean id="memService" class="com.itwillbs.service.MemServiceImpl"> <!-- <property name="memDAO"> --> <!-- <ref local="memDAO"/> --> <!-- </property> --> <property name="memDAO" ref="memDAO"/> </bean> <bean id="memDAO" class="com.itwillbs.DAO.MemDAOImpl"></bean> </beans> |
- 한줄로 축약 가능! ⇒ 코드가 한결 간단해진다
- 3단계 방법은 여기 페이지만 수정하면 되기 때문에 유지보수성도 좋아짐!
>
- 멤버변수 은닉화!
> insert 작업 해보기(DB 연동해서!)
< MemverService.java >
- insert 할 때 mb받아오도록
> 모든 .java 의 insert() 메서드 매개변수 안에 MemberBean mb 넣기!
> 각 처리 작업은 Service 단에서 진행
< MemServiceImpl.java >
// 가입날짜 처리 mb.setReg_date(new Timestamp(System.currentTimeMillis())); memDAO.insert(mb); |
> 데이터베이스 연동
- JDBC 프로그램 설치
- Spring JDBC 프로그램 설치
⇒ 스프링은 자동으로 다운받아지게끔 할 수 있다 (원래는 우리가 프로그램설치해서 폴더 안에 넣어줬다)
- 여기에 자동으로 설치되어있음! 근데 DB는 아직 없다!
- Maven Dependencies 자동으로 프로그램 설치 도와줌
- 프로그램 설치 목록 파일 : pom.xml ⇒ 설치하고자 하는 프로그램 목록들
> https://mvnrepository.com/ 메이븐 프로그램 다운 받는 사이트
원하는 파일 다운 가능
< 첫번째 파일 다운 >
- mysql 자바랑 연결하는 파일
- 파일을 다운받는 게 아니라 이렇게 코드가 있음!
< pom.xml >
- 코드만 적어 넣으면 이렇게 파일이 자동으로 생김(코드 지우면 파일도 사라짐)
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.36</version> </dependency> |
< 두번째 파일 다운 >
- 이건 아무거나 다운!
- 코드에 스프링 버전에 따르겠다고 표시해줌
- 그럼 자동으로 파일 만들어짐!
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${org.springframework-version}</version> </dependency> |
> DB 연동 : 우리가 썼던 Context.xml 내용을 root-context.xml 안에 적어줄 거
< root-context.xml >
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/jspdb1"/> <property name="username" value="jspid"/> <property name="password" value="jsppass"/> </bean> |
- 형광펜 부분은 DriverManager 적고 자동완성
- ref 는 참조주소, value 는 값! 여기는 value 를 적어준다
< MemDAOImpl.java >
- SimpleJdbcTemplate
package com.itwillbs.DAO; import javax.sql.DataSource; import javax.inject.Inject; import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; import org.springframework.stereotype.Repository; import com.itwillbs.domain.MemberBean; // DB 작업 하는 공간(DAO) @Repository public class MemDAOImpl implements MemDAO { // SimpleJdbcTemplate template = new SimpleJdbcTemplate(dataSource); private SimpleJdbcTemplate template; @Inject public void setDataSource(DataSource dataSource) { template=new SimpleJdbcTemplate(dataSource); } @Override public void insert(MemberBean mb) { System.out.println("MemDAOImpl - insert()"); } } |
< root-context.xml >
<bean id="memDAO" class="com.itwillbs.DAO.MemDAOImpl"> <property name="dataSource" ref="dataSource"></property> </bean> |
- 추가해주기!
< MemDAOImpl.java >
@Repository public class MemDAOImpl implements MemDAO { // SimpleJdbcTemplate template = new SimpleJdbcTemplate(dataSource); private SimpleJdbcTemplate template; @Inject public void setDataSource(DataSource dataSource) { template=new SimpleJdbcTemplate(dataSource); } String insertsql = "INSERT INTO member(id, pass, name, reg_date) values(?,?,?,?)"; @Override public void insert(MemberBean mb) { System.out.println("MemDAOImpl - insert()"); template.update(insertsql, mb.getId(), mb.getPass(), mb.getName(), mb.getReg_date()); } } |
- 추가해주기!
> http://localhost:8080/myweb/insert 실행해보기!
- 회원가입 버튼 누르면
- mysql(DB)에 들어감! ⇒ 연동 성공!
< MemController.java >
- POST 방식일 때만 MemberBean 받음
##
- 세션은 자바단에서 바로 쓸 수 없기 때문에 이렇게 객체생성해서 받아줘야함
>
@RequestMapping(value = "/login", method = RequestMethod.POST) public String loginPost(MemberBean mb, HttpSession session) { System.out.println(mb.getId()); System.out.println(mb.getPass()); System.out.println("로그인처리"); // 리턴값 MemberBean mb2 = userCheck(mb); MemberBean mb2 = memService.userCheck(mb); // 아이디 비밀번호 일치하면 mb2 회원정보 모두 가져오기 if(mb2!=null) { // 세션값 생성 "id", id } return "redirect:main"; } |
- 메서드 userCheck() 만들기
- 메서드 자동완성 해주기(userCheck() 메서드 만들기)
< MemService.java >
// 부모 인터페이스 MemService public interface MemService { // 추상메서드(자식은 이 추상메서드를 상속받아서 씀) public void insert(MemberBean mb); public MemberBean userCheck(MemberBean mb); } |
- 자동완성
- 이렇게 추상메서드 만들고 이걸 상속받는 메서드 만들기
< MemServiceImpl.java >
@Override public MemberBean userCheck(MemberBean mb) { System.out.println("MemServiceImpl - userCheck()"); return memDAO.userCheck(mb); } |
- 추가해주기
- 메서드 자동완성 누르기
< memDAO.java >
public interface MemDAO { // 부모인터페이스 추상메서드 public void insert(MemberBean mb); public MemberBean userCheck(MemberBean mb); } |
- 추상메서드 구현하고 이걸 상속받는 메서드 만들기
< MemDAOImpl.java >
// MemberBean mb = new MemberBean();
// mb.setId(rs.getString("id"));
우리는 원래 위와 같이 rs.getXX 이런식으로 들고와서 멤버빈 객체 생성 후 결과에 담고 가져가고 이랬는데, 스프링에서는 실행만하면 알아서 rs 에서 뽑아서 빈에 자동으로 담아줌!
> SELECT
- 물음표가 없을 땐 이렇게 query 로 넣음
- 그치만 우리는 물음표(id=?, pass=?)가 있기 때문에
- queryForObject();
- RowMapper
- BeanPropertyRowMapper
// id, pass 일치하면 회원정보 모두 가져오기 String userChecksql = "SELECT * FROM member WHERE id=? AND pass=?"; @Override public MemberBean userCheck(MemberBean mb) { // MemberBean mb = new MemberBean(); // mb.setId(rs.getString("id")); RowMapper<MemberBean> mapper = new BeanPropertyRowMapper<MemberBean>(MemberBean.class); return template.queryForObject(userChecksql, mapper, mb.getId(), mb.getPass()); } |
- 추가해주기
< MemController.java >
// login POST 방식 // 로그인 처리 // main.jsp @RequestMapping(value = "/login", method = RequestMethod.POST) public String loginPost(MemberBean mb, HttpSession session) { System.out.println(mb.getId()); System.out.println(mb.getPass()); System.out.println("로그인처리"); // 리턴값 MemberBean mb2 = userCheck(mb); MemberBean mb2 = memService.userCheck(mb); // 아이디 비밀번호 일치하면 mb2 회원정보 모두 가져오기 if(mb2!=null) { // 세션값 생성 "id", id session.setAttribute("id", mb.getId()); } return "redirect:main"; } |
< main,jsp >
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1>/WEB-INF/views/main.jsp</h1> <c:if test="${empty sessionScope.id}"> <c:redirect url="./login"/> </c:if> ${sessionScope.id }님 로그인 하셨습니다. <input type="button" value="로그아웃" onclick="location.href='./logout'"><br> <a href="./info">회원정보조회</a><br> <a href="./update">회원정보수정</a><br> <a href="./delete">회원정보삭제</a><br> <a href="./list">회원목록</a><br> </body> </html> |
- 세션 값이 없을 경우 로그인페이지로 이동 / 세션값 있을 경우 아이디 값 가져옴
- 실행화면
> 로그아웃 처리하기
< MemController.java >
// logout 로그아웃 @RequestMapping(value = "/logout", method = RequestMethod.GET) public String logout(HttpSession session) { // 로그아웃 session.invalidate(); return "redirect:main"; } |
- 로그아웃 추가해주기
- 로그아웃 버튼 클릭 시
- 메인 → 세션값 없으므로 로그인페이지로 이동!
> 회원정보조회 해보기
< MemController.java >
@RequestMapping(value = "/info", method = RequestMethod.GET) public String info(HttpSession session, Model model) { // 데이터 가져오기 String id = (String)session.getAttribute("id"); MemberBean mb = memService.getMember(id); return "info"; } |
- getMember() 메서드 만들기!
< MemService.java >
public interface MemService { // 추상메서드(자식은 이 추상메서드를 상속받아서 씀) public void insert(MemberBean mb); public MemberBean userCheck(MemberBean mb); public MemberBean getMember(String id); } |
- 추상메서드 생성
< MemServiceImpl.java >
@Override public MemberBean getMember(String id) { System.out.println("MemServiceImpl - getMember()"); return memDAO.getMember(id); } |
- 추상메서드 받아서 정의해주기
- 메서드 자동생성하기 memDAO.getMember()
< MemDAO.java >
public interface MemDAO { // 부모인터페이스 추상메서드 public void insert(MemberBean mb); public MemberBean userCheck(MemberBean mb); public MemberBean getMember(String id); } |
- 추상메서드 생성
< MemDAOImpl.java >
String getMembersql = "SELECT * FROM member WHERE id=?"; @Override public MemberBean getMember(String id) { RowMapper<MemberBean> mapper = new BeanPropertyRowMapper<MemberBean>(MemberBean.class); return template.queryForObject(getMembersql, mapper, id); } |
- 추상메서드 받아서 정의해주기
< MemController.java >
@RequestMapping(value = "/info", method = RequestMethod.GET) public String info(HttpSession session, Model model) { // 세션 가져오기 // 데이터 베이스 세션에 해당하는 회원정보 데이터 가져오기 // 리턴값 : MemberBean mb = memService.getMember(id); String id = (String)session.getAttribute("id"); MemberBean mb = memService.getMember(id); // mb 데이터를 담아서 info.jsp 로 이동 model.addAttribute("mb", mb); return "info"; } |
- model 에 담아줘서 넘기기!
< info.jsp >
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> 아이디:${mb.id}<br> 비밀번호:${mb.pass}<br> 이름:${mb.name}<br> 가입날짜:${mb.reg_date}<br> <a href="./main">메인화면</a> </body> </html> |
- model 에 담아온 데이터 값 뿌려주기
- 실행화면!
> 업데이트 화면
< MemController.java >
// updateForm ==> info 랑 똑같음 @RequestMapping(value = "/update", method = RequestMethod.GET) public String update(HttpSession session, Model model) { // 수정할 데이터 가져오기 // 세션 가져오기 String id = (String)session.getAttribute("id"); MemberBean mb = memService.getMember(id); // mb 데이터를 담아서 updateForm.jsp 로 이동 model.addAttribute("mb", mb); return "updateForm"; } |
- info 랑 똑같음! 정보를 뿌려줘야하기 때문에
< updateForm.jsp >
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action="./update" method="post"> 아이디: <input type="text" name="id" value="${mb.id }" readonly><br> 비밀번호: <input type="password" name="pass"><br> 수정할 이름: <input type="text" name="name" value="${mb.name }"><br> <input type="submit" value="회원정보수정"> </form> </body> </html> |
- 실행화면
> 수정하기
< MemController.java >
@RequestMapping(value = "/update", method = RequestMethod.POST) public String updatePost(MemberBean mb) { System.out.println("수정처리"); System.out.println(mb.getId()); System.out.println(mb.getPass()); System.out.println(mb.getName()); // 리턴값 MemberBean mb2 = userCheck(mb); MemberBean mb2 = memService.userCheck(mb); // 아이디 비밀번호 일치하면 update 하기 if(mb2!=null) { memService.updateMember(mb); } return "redirect:main"; } |
- 메서드 자동으로 만들기! mb2는 값이 있나 없나 확인한 것이고 메서드에 넣어주는 값은 mb2 가 아니라 우리가 입력한 값인 mb 를 넣어줘야함!
< MemService.java >
public void updateMember(MemberBean mb); |
- 추상메서드 만들기
< MemServiceImpl.java >
@Override public void updateMember(MemberBean mb) { System.out.println("MemServiceImpl - updateMember()"); memDAO.update(mb); } |
- 추상메서드 구현하고 memDAO.update() 메서드 자동완성
< MemDAO.java >
public void update(MemberBean mb); |
- 추상메서드 만들기
< MemDAOImpl.java >
String updatesql = "UPDATE member SET name=? WHERE id=?"; @Override public void update(MemberBean mb) { template.update(updatesql, mb.getName(), mb.getId()); } |
- 메서드 구현! 해당 id 값에 대한 name 만 바꿔야함! (이거 안 적었다가 싹 바뀔뻔^_^)
- ⇒
- 수정 후 회원정보조회!
> deleteForm 해보기
< deleteForm.jsp >
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action="./delete" method="post"> 아이디: <input type="text" name="id" value="${SessionScope.id}" readonly><br> 비밀번호: <input type="password" name="pass"><br> <input type="submit" value="회원정보삭제"> </form> </body> </html> |
- 실행화면
> 삭제처리
< MemController.java >
@RequestMapping(value = "/delete", method = RequestMethod.POST) public String deletePost(MemberBean mb, HttpSession session) { System.out.println(mb.getId()); System.out.println(mb.getPass()); // 리턴값 MemberBean mb2 = userCheck(mb); MemberBean mb2 = memService.userCheck(mb); // 아이디 비밀번호 일치하면 삭제하기 if(mb2!=null) { memService.deleteMember(mb.getId()); session.invalidate(); } System.out.println("삭제처리"); return "redirect:main"; } |
< MemService.java >
public void deleteMember(String id); |
< MemServiceImpl.java >
@Override public void deleteMember(String id) { System.out.println("MemServiceImpl - deleteMember()"); memDAO.delete(id); } |
< MemDAO.java >
public void delete(String id); |
< MemDAOImpl.java >
String deletesql = "DELETE FROM member WHERE id=?"; @Override public void delete(String id) { System.out.println("MemDAOImpl - delete()"); template.update(deletesql, id); } |
> 아이디가 ‘admin’ 일 때만 회원목록 조회할 수 있게
< main.jsp >
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1>/WEB-INF/views/main.jsp</h1> <c:if test="${empty sessionScope.id}"> <c:redirect url="./login"/> </c:if> ${sessionScope.id }님 로그인 하셨습니다. <input type="button" value="로그아웃" onclick="location.href='./logout'"><br> <a href="./info">회원정보조회</a><br> <a href="./update">회원정보수정</a><br> <a href="./delete">회원정보삭제</a><br> <c:if test="${!(empty sessionScope.id) }"> <c:if test="${sessionScope.id eq 'admin'}"> <a href="./list">회원목록</a><br> </c:if> </c:if> </body> </html> |
- eq → 같을 때(equals)
> 리스트 불러오기
< MemController.java >
@RequestMapping(value = "/list", method = RequestMethod.GET) public String list(HttpSession session, Model model) { List<MemberBean> mbList = memService.getMemberList(); // mb 데이터를 담아서 updateForm.jsp 로 이동 model.addAttribute("mbList", mbList); return "list"; } |
- 메서드 자동완성으로 만들기
< MemService.java >
public List<MemberBean> getMemberList(); |
- 추상메서드 추가됨
< MemServiceImpl.java >
@Override public List<MemberBean> getMemberList() { System.out.println("MemServiceImpl - getMemberList()"); return memDAO.getMemberList(); } |
- 메서드 자동완성으로 만들기
< MemDAO.java >
public List<MemberBean> getMemberList(); |
- 추상메서드 추가됨
< MemDAOImpl.java >
String getListsql = "SELECT * FROM member"; @Override public List<MemberBean> getMemberList() { System.out.println("MemDAOImpl - getMemberList()"); RowMapper<MemberBean> mapper = new BeanPropertyRowMapper<MemberBean>(MemberBean.class); return template.query(getListsql, mapper); } |
- 여기선 쿼리문에 물음표(들어갈 값)가 없기 때문에 queryForObject 사용안함
- query() 사용
- 이렇게 넣어주면 따로 List 객체에 넣지 않아도 자동으로 가지고 다님(스프링 능력)
- mapping 할때는 MemberBean 으로 매핑한다. List 형이어도 자동으로 List 로 들고가줌
- 실행화면
====================================================================
'Dev.Program > Java & Spring' 카테고리의 다른 글
[Spring] - (5) (0) | 2022.10.10 |
---|---|
[Spring] - (4)MyBatis / 설정 및 연동 (0) | 2022.10.09 |
[Spring] - (2) (0) | 2022.10.09 |
[Spring] - (1)설치 및 설정하기 (0) | 2022.10.09 |
InetAddress 클래스 (0) | 2022.10.07 |