0. mysql 라이브러리 확인
- pom.xml 에 올린 mysql 라이브러리가 정상작동하는지 확인
① class로 dbconfig.java 생성
② mainpage2.java에서 확인public class dbconfig { Connection con = null; public Connection dbinfo() throws Exception{ String driver = "com.mysql.cj.jdbc.Driver"; String url = "jdbc:mysql://localhost:3306/cms"; String user = "hana"; String pass = "hana1234"; Class.forName(driver); this.con = DriverManager.getConnection(url,user,pass); return this.con; } }
- 밑에 datalist.do 를 실행 시켰을 때 아래이미지의 출력 결과 나오면 제대로 로드된것.
@Controller public class mainpage2 { @GetMapping("/datalist.do") public String datalist() { dbconfig dc = new dbconfig(); try { Connection con = dc.dbinfo(); System.out.println(con); con.close(); } catch (Exception e) { System.out.println("db연결오류"); } return null; } }
1. DB 연결 (Mysql)
1-1. 연결 형태
⑴ XML 형태의 DB 연결 (Maven 형태의 프로젝트)
- XML형태 DB 연결 시 필요한 라이브러리 (필수)
⒜ MysqlConnect/J
⒝ spring-jdbc : (@ 이용하여 Resource 형태로 구성하기 위해)
⒞ DBCP (Database Connection Pool) - Spring, Spring-boot 에서만 사용
⑵ Properties + JSTL (Legacy 형태의 프로젝트)
1-2. XML 형태의 DB 연결 (Maven 형태)
1. 필요한 라이브러리 pom.xml에 업로드
- DBCP (Database Connection Pool) 업로드
- Mybatis 업로드 (Mybatis와 Mybatis Spring은 별개, 각각 업로드 해야함)2. web.xml 에 dbconfig.xml 올리기
3. dbconfig.xml 생성
4. dbconfig.xml 에 코드 추가작업
- search 기능 이용해 BasicDataSource 검색 후 참고
- bean 태그의 id 는 본인 마음대로 , class 를 검색한 것을 참고해서 아래 와 같이 추가
-> destroy-method ="close" 를 통해 db 는 자동으로 close 되게끔 설정
- bean 태그 안에 property 태그로 database 접속 정보 추가
5. DB연결 위한 보안 해제
- webpage.xml 에 wepspring 패키지 전체에 어노테이션 및 xml에 사용하는 id 값을 연동 할 수 있도록 오픈
-> db 연결시에 dbconfig.xml 에 있는 아래의 클래스를 로드해야하는데
-> ① 처럼 오픈하면 해당 외의 클래스를 로드 할 수 없음
-> ② 처럼 패키지 전체를 오픈해야 그 안에 로드해놓은 다른 클래스들을 사용 할 수 있음
- 다른 패키지도 같은 DB 연결 하는 방법 ( shop 이라는 패키지도 동일한 db 연결)
6. do 에 dabases xml 파일로드 , db 연결
- @Autowired : ⑴ 모든 메소드에 사용할 수 있는 객체 및 Bean을
사용할 수 있도록 의존성 여부 실행하는 어노테이션 , 두번 세번 사용 x, 한번만 씀
⑵ 단점 : 외부 class를 호출하여 Database를 연결 시 오류발생
-> 해당 클래스 내에서만 사용 가능 (그래서 잘 안씀)
-> Controller 에서만 사용 가능함 (Module 에서는 안됨)
- BasicDataSource datasource : database 접속정보 xml 파일로드
- 코드 예시 ) db는 dbconfig,xml 에서 자동으로 close 되므로 나머지만 close해줌
@Controller public class mainpage2 { @Autowired BasicDataSource datasource; @GetMapping("/datalist.do") public String datalist() { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = this.datasource.getConnection(); String sql = "select count(*) as ctn from user"; ps= conn.prepareStatement(sql); rs = ps.executeQuery(); rs.next(); System.out.println(rs.getString("ctn")); System.out.println(this.datasource); System.out.println(conn); ps.close(); rs.close(); } catch (Exception e) { System.out.println(e); System.out.println("db 접속 오류"); } return null; } }
1-3. Legacy project DB 연결
0. legacy project 생성은 아래링크
https://mindiit.tistory.com/126
1. pom.xml
- 열어보면 도메인 기준인것을 확인할 수 있음 (maven과는 다르게)
- 데이터 베이스 관련 라이브러리, lombok 등 빠져있는 라이브러리 세팅해줌 (jdk-11,.2024-07기준)
-> spring-jdbc, commons-fileupload, mysql, lombok, dbcp, tomcat
2. web.xml
- 한글 깨짐 방지 추가
- dbconfig.xml 코드 추가
3. dbconfig.xml 생성
-> appServlet 디렉토리안에 dbconfig.xml 생성 4. dbconfig.properties 생성
-> WEB-INF 디렉토리 안의 classes 에 생성
-> properties 안에 코드 추가 (db정보 작성)
- properties 작성 시 문장의 끝 뒤에 절대 공백이 있으면 안됨
5. dbconfig.xml에 db 정보 불러오기
-> 아래처럼 코드 추가
-> properties 활용해서 가져옴 : 보안상 좋음 (db 뚫리는 일이 거의 없음)
-> property - placeholder : jstl 형태로 쓸 수 있게 함
6. 연결 확인 -> 여기다가 임시로 test 진행-> System.out.println(con); 하고 콘솔에 db 정보 찍히면 연결 성공@Controller public class HomeController { private static final Logger logger = LoggerFactory.getLogger(HomeController.class); @Autowired BasicDataSource dbinfo; @RequestMapping("/test.do") public void test() throws Exception { try { Connection con = dbinfo.getConnection(); System.out.println(con); } catch (Exception e) { System.out.println("db연결 오류"); } } }
2. 응용문제. datasource 를 이용하여 해당 정보를 db 에 insert 하시오
2-1. 내가 작성한 코드
1. member.jsp 생성 (데이터 입력받는 파트)
- 해당 코드 )
2. memberok.do 생성 (데이터 insert 파트)<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="aaa" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>회원가입 JSTL + Spring + Datasource</title> </head> <body> <form id="frm" method="post" action="./memberok.do"> 아이디 : <input type="text" name="mid"><br> 패스워드 : <input type="password" name="mpass"><br> 고객명 : <input type="text" name="mname"><br> <input type="button" value="간편 회원 가입" onclick="join()"><br> </form> </body> <script> function join() { frm.submit(); } </script> </html>
- 풀이 코드 )
@Controller public class mainpage2 { @RequestMapping(value="/memberok.do" ,method=RequestMethod.POST) public String memberok(String mid, String mpass, String mname, HttpServletResponse res) { Connection con = null; PreparedStatement ps = null; PrintWriter pw = null;; try { con = this.datasource.getConnection(); String sql = "insert into user(uidx,uid,upass,uname,ujoin) " + "values('0','"+mid+"','"+mpass+"','"+mname+"',now())"; ps= con.prepareStatement(sql); int result = ps.executeUpdate(); pw = res.getWriter(); if(result>0) { pw.write("<script>" + "alert('리뷰가 정상적으로 등록되었습니다.');" + "</script>"); } } catch (Exception e) { System.out.println("접속 오류"); e.printStackTrace(); } return null; } }
2-1. DAO 이용한 코드
1. db 구조부터 확인 (컬럼 구조 파악하기 위함)
1. getter, setter 로 데이터 값 받기 위해 dao 생성 (새로운 클래스로 member_dao.java 생성)
-> dao 에 컬럼명 과 동일하게 변수 선언
-> DAO 사용하려면 name도 컬럼명과 동일하게 맞춰줘야함
@Setter @Getter public class member_dao { int uidx; String uid,upass,uname,ujoin; }
2. name을 컬럼명과 동일하게 설정
3. memberok.do 코드 작성 (데이터 db에 저장하는 파트)
@Controller public class mainpage2 { @RequestMapping(value="/memberok.do" ,method=RequestMethod.POST) public String memberok(@ModelAttribute("mb") member_dao dao) { Connection con = null; PreparedStatement ps = null; try { con = this.datasource.getConnection(); String sql = "insert into user values('0',?,?,?,now())"; ps = con.prepareStatement(sql); ps.setString(1, dao.getUid()); ps.setString(2, dao.getUpass()); ps.setString(3, dao.getUname()); int result = ps.executeUpdate(); if(result>0) { System.out.println("db 저장 성공"); } ps.close(); } catch (Exception e) { System.out.println("접속 오류"); e.printStackTrace(); } return null; } }
'Spring' 카테고리의 다른 글
Spring - 쿠폰 생성 프로세서 (0) | 2024.07.10 |
---|---|
legacy project 생성 (0) | 2024.07.09 |
JSTL 사용법 (0) | 2024.07.09 |
Spring 의 Controller (0) | 2024.07.09 |
웹 경로에서 프로젝트 명 빼기 (0) | 2024.07.08 |