22.04.14 스프링

최고고·2022년 4월 14일
0

게시판을 만들기위한 과정, + 환경설정

MySQL cmd창에서 환경설정

MySQL은 구동 작업 필요: c드라이브 -egov\bin\mysql-5.6\startup

cd C:\eGovFrame-3.10.0\bin\mysql-5.6.21\bin
change directory
mysql -u root -p 루트계정 접근
pw 첨엔 그냥 엔터
show databases;
use mysql;
show tables;
테이블 조회 후 user테이블 조회하고 root계정의 비번을 바꿔주자
update user set password = password('12345') where host = 'localhost'
-> and user='root';
내 로컬호스트의 유저컬럼이 root인 컬럼이 패스워드의 비번을 1234로 변경
flush privileges;
quit; 종료

cmd에서 접근하기
mysql -u root -p

이클립스-data source explorer >dbconnection
C:\eGovFrame-3.10.0\maven\repository\mysql\mysql-connector-java\5.1.42
jar추가
vo있는패키지에 new-sql파일 추가
type-MySql_5.1 name-내가설정한 이름 database-mysql

cmd창에서 테이블 생성하면 보기 힘들 수 있어서, 이클립스 파일에서 테이블을 생성해준다!!


임의의 데이터를 넣어줌


My Batis
java - sql 연결시켜줌 DAO가 아닌, sql파일만 (쿼리문만있는)따로 만들어줌
mybatis xml mapper 생성
Mybatis 스키마와 연결됨 "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"

MyBatis 라이브러리 pom.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="kr.smhrd.mapper.BoardMapper">
    <select id="boardList" resultType="kr.smhrd.mapper.BoardVO">
        select * from board;
    </select>
    
    
</mapper>

생성되므로 추가해줄필요x

sql문 쓰는 boardMapper.xml과 연결해주는
인터페이스 생성

package kr.smhrd.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface BoardMapper {
	//xml과 연결시켜주는 매퍼-- 이 메소드가 BoardMapper.xml을 실행함! 
	//xml에서 namespace 에서 이름과 class명이 같아야됨 and id와 메소드명이 같아야됨
	// 리턴타입은 실행하는 sql문에 따라 다름 select --> 리스트
	public List<BoardVO> boardList(); 
	// {}없는 추상메소드 >>>추상클래스로 만들어야하는데, 추상메소드가 계속 생기기땜에 인터페이스로 만들어주자
	//추상클래스는 인스턴스 생성 안됨
		
}

컨트롤러 (POJO)도 수정필요!

@Controller
@Autowired 스프링작동될때 모든 객체들이 올라가는데 특정영역의 객체를 불러와 사용하는것 --객체생성안하고도 사용가능하게함 (결합도를 낮추려고--DI의존성주입)
@RequestMapping

키워드 기억
db에서 가져온 데이터는 스프링에서는 모델에 저장하게됨

package kr.smhrd.web;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import kr.smhrd.mapper.BoardMapper;
import kr.smhrd.mapper.BoardVO;

@Controller  //컨트롤러라는 어노테이션 명시해줘야됨 디스패처에서 찾아올 수 있게됨
public class BoardController {
	
	//의존성주입 DI를 한다 결합도를 낮추는 방법
	@Autowired
	private BoardMapper mapper;	
	
	//web/boardList.do 라고 요청했을 때 실행되는 메소드 /web까지 컨텍스트패스
	@RequestMapping
	
	//db에서 데이터 가져와서, 스프링은 모델에 저장하게됨
	public String boardList(Model model) {
		System.out.println("게시판전체보기 실행");
		List<BoardVO> list = mapper.boardList();
		model.addAttribute("list",list);
		
		return "boardList";		//forward방식이동, 뷰이름만 돌려줌-뷰리졸버가이름완성해줌 동적바인딩 동적할당
	}
}

DBCP

db 연결하는 커넥션을 여러개 만들어 사용
hikari cp 사용

<bean class="org.mybatis.spring.SqlSessionFactoryBean">
          <property name="dataSource" ref="dataSource" />
      </bean> 

-->xml db연결

히카리쓰려면 스키마 추가 해줘야됨

   http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"
   xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring"

root-context.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://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd
   http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"
   xmlns:mybatis-spring="http://mybatis.org/schema/mybatis-spring">
   
   <!-- Root Context: defines shared resources visible to all other web components -->
   
   <!-- 히카리 CP 빈 등록 -->
   <bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
      <property name="driverClassName"
         value="com.mysql.jdbc.Driver">
      </property>
      <property name="jdbcUrl"
         value="jdbc:mysql://localhost:3306/mysql"></property>
         <property name="username" value="root"></property>
         <property name="password" value="12345"></property>
   </bean>   
      
   <!-- 히카리 CP 설정 -->
   <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"
      destroy-method="close">
      <constructor-arg ref="hikariConfig"/>
   </bean>
   
   <bean class="org.mybatis.spring.SqlSessionFactoryBean">
          <property name="dataSource" ref="dataSource" />
    </bean>
    
   <mybatis-spring:scan base-package="kr.smhrd.mapper"/>
   
      
</beans>

boardList.jsp 부분

  • 기존의 스크립틀릿 방식을 jstl을 적용해 자바코드를 태그화
    위는 기존 방식
  • 선언문
    jstl java언어를 태그로 쓰기위해서는 선언문을 꼭적어야함
    맨위에 선언해주기
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

    바뀐부분
  • 확장된 for문
    확장for문인 forEach태그를 써줌
    변수=임의값(데이터타입은 리스트에 들어있는 타입임) var="vo"
    필드명과 동일하게써줘야함 ${ }
    varstatus는 1씩 증가되는 의미
<%@page import="java.util.ArrayList"%>
<%@page import="kr.smhrd.mapper.BoardVO"%>
<%@page import="java.util.List"%>
<%@ 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">
<meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>
<title>게시판</title>
</head>
<body>
	<div class="container">
  	<h2>Spring MVC Board</h2>
  	<div class="panel panel-default">
    	<div class="panel-heading">Board List</div>
    	<div class="panel-body">
    	<table class="table table-hover table-bordered">
    		<tr class="active">
    			<td>번호</td>
    			<td>제목</td>
    			<td>조회수</td>
    			<td>작성자</td>
    			<td>작성일</td>
    		</tr>
    		
    		<c:forEach var="vo" items="${list}" varStatus="i">
    			<tr>
    				<td>${i.count}</td>
    				<td>${vo.title}</td>
    				<td>${vo.count}</td>
    				<td>${vo.writer}</td>
    				<td>${vo.indate}</td>
    			</tr>
    		</c:forEach>
    	</table>
    	
    	</div>
    	<div class="panel-body">지능형 IoT ㅇㅇㅇ</div>
  	</div>
</div>
</body>
</html>

pom.xml

api 추가된 부분

			<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
		<dependency>
		    <groupId>com.google.code.gson</groupId>
		    <artifactId>gson</artifactId>
		    <version>2.8.5</version>
		</dependency>
		<!-- Test -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.7</version>
			<scope>test</scope>
		</dependency>      
		
		<!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
		<dependency>
		    <groupId>org.projectlombok</groupId>
		    <artifactId>lombok</artifactId>
		    <version>1.18.20</version>
		    <scope>provided</scope>
		</dependency>
		
		<!-- My Batis 라이브러리 -->
			<dependency>
			  <groupId>org.mybatis</groupId>
			  <artifactId>mybatis</artifactId>
			  <version>3.4.6</version>
			</dependency>
		  <!-- HikariCP 라이브러리  -->
	<dependency>
	    <groupId>com.zaxxer</groupId>
	    <artifactId>HikariCP</artifactId>
	    <version>2.7.4</version>
	</dependency>
	<!-- MySQL.jar 파일추가 -->
	<dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.38</version>
      </dependency>
      <!-- Spring-jdbc, mybatis-spring api 추가 -->
      <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-jdbc</artifactId>
         <version>4.3.14.RELEASE</version>
      </dependency>
      <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis-spring</artifactId>
          <version>1.3.0</version>
      </dependency>

0개의 댓글