-
[spring] member Business,Dataservice(xml방식)JAVA 2021. 8. 4. 09:59
STS
스프링 툴 스위트(STS, Spring Tool Suite)란 이클립스 기반 스프링 애플리케이션을 개발 하기 위한 개발 환경을 의미하며, 오픈소스이다.
다운로드 : spring-tool-suite-3.9.12.RELEASE-e4.15.0-win32-x86_64.zip
https://dist.springsource.com/release/STS/index.html
해당 파일 압축을 풀기
경로 ~\sts-bundle\sts-3.9.15.RELEASE = STS.exe (실행파일)
1. STS 프로젝트 만들기
sts + mybatis + mysql
2. mysql db, table 만들기
cmd 창
C:\Users\ehdbs>cd c:\mysql5.5 c:\MySQL5.5>cd bin c:\MySQL5.5\bin>mysql -u root -p Enter password: ***** Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.5.62 MySQL Community Server (GPL) Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> create database ch20; Query OK, 1 row affected (0.00 sec) mysql> use ch20; Database changed mysql> create table member( -> id varchar(20) not null primary key, -> pw varchar(15) not null, -> name varchar(30) not null, -> email varchar(30) not null, -> tel varchar(14) not null, -> zipcode varchar(10) not null, -> addr varchar(50) not null, -> addr2 varchar(30) not null, -> regdate date not null -> ); Query OK, 0 rows affected (0.01 sec) mysql> create table board( -> num int not null primary key auto_increment, -> writer varchar(30) not null, -> subject varchar(40) not null, -> pw varchar(15) not null, -> regdate datetime, -> readcount int default 0, -> ref int not null, -> re_step int not null, -> re_level int not null, -> content text not null, -> ip varchar(20) not null -> ); Query OK, 0 rows affected (0.01 sec)
3. pom.xml에 library 추가 [ https://mvnrepository.com/ 여기서 검색 가능 ]
- spring-jdbc (스프링의 JDBC, Spring version과 동일)
- mysql-connector-java
- mybatis
- mybatis-spring (스프링에서 Mybatis 연동을 위한 모듈)
- spring-test
pom.xml
<!-- 추가 library --> <!-- MyBatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.8</version> </dependency> <!-- mybatis-spring --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.2</version> </dependency> <!-- Mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.31</version> </dependency> <!--spring-jdbc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>3.2.3.RELEASE</version> </dependency> <!-- //추가 library -->
4. web.xml 에 한글 인코딩필터 설정
web.xml
<!-- 한글처리 --> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
5. mybatis-config.xml 설정 파일 생성 [위치 : Java Resources/src/main/resources/]
1) MemberDTO 를 사용하며 Mapper 로 사용하는 xml 들을 설정한다.
2) root_context.xml 에서 SqlSessionFactoryBean 클래스를 통해 MyBatis 방식으로 비즈니스 업무하도록 설정한다.
mybatis-config.xml
<?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 alias="member77" type="co.kr.Hello.dto.MemberDTO"/> </typeAliases> <mappers> <mapper resource="/mybatis/member.xml"/> </mappers> </configuration>
6. root-context.xml
Config(클래스-어노테이션) 방식에서 MyBatisConfig 와 같은 역할이다!(@Configuration)
<?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="dataSource" class="org.apache.ibatis.datasource.pooled.PooledDataSource"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/ch20?useUnicode=true&characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="12345"/> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean > <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="configLocation" value= "classpath:/mybatis/mybatis-config.xml"> </property> </bean> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg ref="sqlSessionFactory"></constructor-arg> </bean> </beans>
Config(클래스-어노테이션) 방식과 비교해보기
<?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="dataSource" class="org.apache.ibatis.datasource.pooled.PooledDataSource"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/ch20?characterEncoding=UTF-8"/> <property name="username" value="root"/> <property name="password" value="12345"/> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean > <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="configLocation" value= "classpath:/mybatis/mybatis-config.xml"> </property> </bean> <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg ref="sqlSessionFactory"></constructor-arg> </bean> </beans>
7. memberDTO
package co.kr.Hello.dto; import java.util.Date; //모델빈 public class MemberDTO { //전역변수=필드=프로퍼티=property private String id; private String pw; private String name; private String email; private String tel; private String zipcode; private String addr; private String addr2; private Date regdate; public MemberDTO() {} public String getId() { return id; } public void setId(String id) { this.id = id; } //...getter,setter 생략 }
8. member.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"> <!-- id중복체크, 내 정보 수정 --> <!-- public memberDTO selectOne(String id){db로~~} 와 같은 상황!! --> <!-- member77 로 별칭. 또는 co.kr.Hello.dto.MemberDTO 로 풀네임도 가능(해당 설정은 mybatis-config.xml 을 만들어 설정해줬다.)--> <select id="selectOne" parameterType="String" resultType="member77"> select * from member where id=#{id} </select> <!-- 회원가입 --> <insert id="insertMember" parameterType="co.kr.Hello.dto.MemberDTO"> insert into member(id,pw,name,email,tel,zipcode,addr,addr2,regdate) values(#{id},#{pw},#{name},#{email},#{tel},#{zipcode},#{addr},#{addr2},NOW()) </insert> <!-- 로그인,map사용 --> <select id="selectLogin" parameterType="map" resultType="member77"> select * from member where id=#{id} and pw=#{pw} </select> <!-- 내 정보 수정 --> <update id="memberUpdate" parameterType="member77"> update member set pw=#{pw},name=#{name},email=#{email},tel=#{tel},zipcode=#{zipcode}, addr=#{addr},addr2=#{addr2} where id=#{id} </update> <!-- 회원탈퇴 --> <delete id="memberDelete" parameterType="String"> delete from member where id=#{id} </delete> </mapper>
9. MemberController
package co.kr.Hello; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.beans.factory.annotation.Autowired; import org.apache.ibatis.session.SqlSession;//Mybatis �� ���� import java.util.*;//HashMap import co.kr.Hello.dto.MemberDTO; import javax.servlet.http.HttpServletRequest; import java.io.IOException; import javax.naming.NamingException; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.bind.annotation.ModelAttribute; @Controller public class MemberController { @Autowired private SqlSession sqlSession;// sqlSessionFactory(mapper 설정) 를 저장한 sqlSession @RequestMapping("main.do") public String mm() { return "main";// views/main.jsp } //회원가입 폼 @RequestMapping("insertForm.do") public String insertForm() { return "/member/insertForm";//views/member/insertForm.jsp } //id중복체크(map사용) @RequestMapping(value="confirmID.do",method=RequestMethod.POST) public String idCheck(String id,Model model) { int check = -1; MemberDTO memberDTO = sqlSession.selectOne("member.selectOne",id);//'member.xml의 namespace'.'select태그의 id', 매개값 if(memberDTO==null) { check=1;//사용가능한 id }else { check=-1;//사용 불가능한 id } model.addAttribute("check",check); return "/member/confirmID";//views/member/confirmID.jsp } //회원가입 db 저장 @RequestMapping(value="insertPro.do",method=RequestMethod.POST) public String insertPro(@ModelAttribute("memberDTO") MemberDTO memberDTO, HttpServletRequest request)throws IOException,NamingException { String email1 = request.getParameter("email1"); String email2 = request.getParameter("email2"); String email = email1+email2; memberDTO.setEmail(email); String tel1 = request.getParameter("tel1"); String tel2 = request.getParameter("tel2"); String tel3 = request.getParameter("tel3"); String tel = tel1+tel2+tel3; memberDTO.setTel(tel); sqlSession.insert("member.insertMember",memberDTO);//namespace.insert.insert태그의 id, 매개값 return "main"; } //로그인 폼 @RequestMapping("loginForm.do") public String loginForm() { return "/member/loginForm";//views/member/loginForm.jsp } //로그인 db 업무 @RequestMapping(value="loginPro.do",method=RequestMethod.POST) public String loginPro(String id, String pw,Model model) { //Map, HashMap HashMap<String, String> map = new HashMap<String, String>(); map.put("id", id); map.put("pw", pw); MemberDTO mdto = sqlSession.selectOne("member.selectLogin",map); if(mdto==null) {//일치하는 회원이 없다. model.addAttribute("msg","아이디 또는 비밀번호가 일치하지 않습니다."); return "/member/loginForm"; } //일치하는 회원이 있다. model.addAttribute("mdto",mdto); return "/member/loginSuccess"; } //로그아웃 @RequestMapping("logOut.do") public String logOut() { return "/member/logOut";//;logOut.jsp } //회원정보수정 폼 @RequestMapping(value="memUpdateForm.do",method=RequestMethod.POST) public String updateForm(String id, Model model) { MemberDTO mdto = sqlSession.selectOne("member.selectOne",id); //example@daum.net String email = mdto.getEmail(); int idx=email.indexOf("@"); String email1 = email.substring(0,idx);//example String email2 = email.substring(idx);//daum.net model.addAttribute("email1",email1); model.addAttribute("email2",email2); //01023456789 String tel = mdto.getTel(); String tel1 = tel.substring(0,3);//010 String tel2 = tel.substring(3,7);//2345 String tel3 = tel.substring(7);//6789 model.addAttribute("tel1",tel1); model.addAttribute("tel2",tel2); model.addAttribute("tel3",tel3); model.addAttribute("mdto",mdto); return "/member/updateForm";//updateForm.jsp } //회원정보수정 db 처리 @RequestMapping(value="memIpdatePro.do",method=RequestMethod.POST) public String memIpdatePro(@ModelAttribute("memberDTO")MemberDTO memberDTO, HttpServletRequest request) throws IOException,NamingException{ String email1 = request.getParameter("email1"); String email2 = request.getParameter("email2"); String email = email1+email2; memberDTO.setEmail(email); String tel1 = request.getParameter("tel1"); String tel2 = request.getParameter("tel2"); String tel3 = request.getParameter("tel3"); String tel = tel1+tel2+tel3; memberDTO.setTel(tel); sqlSession.update("member.memberUpdate",memberDTO); return "main"; } //회원탈퇴 db 처리 @RequestMapping("deleteMember.do") public String deleteMember(String id) { sqlSession.delete("member.memberDelete",id); return "main"; } }//class-end
'JAVA' 카테고리의 다른 글
[spring]board Business,Dataservice(xml방식) (0) 2021.08.06 [spring]member Presentation (0) 2021.08.05 [spring] 스프링 프로젝트 2가지: Starter Project,Legacy Project(STS) (0) 2021.08.04 java환경변수,tomcat웹배포,mysql다운로드 (0) 2021.08.04 VO 와 DTO (0) 2021.08.03