메뉴 건너뛰기

 

1. Spring Stater Project 생성

 

 

 

 

 

MyBatis Framewor, MariaDB Driver, Spring Web 선택 후 Finish버튼

 

 

 

2. Pom.xml

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <parent>

        <groupId>org.springframework.boot</groupId>

        <artifactId>spring-boot-starter-parent</artifactId>

        <version>3.1.4</version>

        <relativePath /> <!-- lookup parent from repository -->

    </parent>

    <groupId>com.eugeneprogram</groupId>

    <artifactId>TestWeb</artifactId>

    <version>0.0.1-SNAPSHOT</version>

    <packaging>war</packaging>

    <name>TestWeb</name>

    <description>Demo project for Spring Boot</description>

    <properties>

        <java.version>17</java.version>

    </properties>

    <dependencies>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

        </dependency>

        <dependency>

            <groupId>org.mybatis.spring.boot</groupId>

            <artifactId>mybatis-spring-boot-starter</artifactId>

            <version>3.0.2</version>

        </dependency>

 

        <dependency>

            <groupId>org.mariadb.jdbc</groupId>

            <artifactId>mariadb-java-client</artifactId>

            <scope>runtime</scope>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-tomcat</artifactId>

            <scope>provided</scope>

        </dependency>

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-test</artifactId>

            <scope>test</scope>

        </dependency>

        <dependency>

            <groupId>org.mybatis.spring.boot</groupId>

            <artifactId>mybatis-spring-boot-starter-test</artifactId>

            <version>3.0.2</version>

            <scope>test</scope>

        </dependency>

 

        <!-- This is for JDBC -->

        <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-jdbc</artifactId>

        </dependency>

        <!-- This is for JDBC -->

 

        <!-- JSTL for JSP -->

        <!--

        https://mvnrepository.com/artifact/jakarta.servlet.jsp.jstl/jakarta.servlet.jsp.jstl-api -->

 

        <dependency>

            <groupId>jakarta.servlet.jsp.jstl</groupId>

            <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>

        </dependency>

 

        <!--

             https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api -->

        <dependency>

            <groupId>jakarta.servlet</groupId>

            <artifactId>jakarta.servlet-api</artifactId>

            <scope>provided</scope>

        </dependency>

 

        <!--

              https://mvnrepository.com/artifact/org.glassfish.web/jakarta.servlet.jsp.jstl -->

        <dependency>

            <groupId>org.glassfish.web</groupId>

            <artifactId>jakarta.servlet.jsp.jstl</artifactId>

        </dependency>

        <!-- JSTL for JSP -->

 

        <!-- Need this to compile JSP -->

        <dependency>

            <groupId>org.apache.tomcat.embed</groupId>

            <artifactId>tomcat-embed-jasper</artifactId>

            <scope>provided</scope>

        </dependency>

       

        <dependency>

            <groupId>org.eclipse.jdt.core.compiler</groupId>

            <artifactId>ecj</artifactId>

            <version>4.6.1</version>

            <scope>provided</scope>

        </dependency>

        <!-- Need this to compile JSP -->

 

    </dependencies>

 

    <build>

        <plugins>

            <plugin>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-maven-plugin</artifactId>

            </plugin>

        </plugins>

    </build>

 

</project>

 

 

여기서 주석 부분은 프로젝트 생성 후 기본 dependencies 목록에 추가된 것이다.

JSTL의 경우 1.2 버전이 Spring 3 이상에서는 오류가 발생하므로 위 xml 파일의 <!-- JSTL for JSP --> 주석 부분으로 대체한다.

위 설정 파일에서 <!-- --> 주석 부분은 sts-4에서 생성한 pom.xml에 직접 추가한 부분이다.

 

 

 

3. DatabaseConfig.java 생성 package root

package com.eugeneprogram.testweb;

 

import javax.sql.DataSource;

 

import org.apache.ibatis.session.SqlSessionFactory;

import org.mybatis.spring.SqlSessionFactoryBean;

import org.mybatis.spring.SqlSessionTemplate;

import org.mybatis.spring.annotation.MapperScan;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import org.springframework.transaction.annotation.EnableTransactionManagement;

 

@Configuration

@MapperScan(basePackages = "com.eugeneprogram.testweb.dao")

@EnableTransactionManagement

public class DatabaseConfig {

       @Bean

       public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {

             final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();

             sessionFactory.setDataSource(dataSource);

             PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();

              sessionFactory.setMapperLocations(resolver.getResources("classpath:mapper/*.xml"));

             return sessionFactory.getObject();

       }

 

       @Bean

       public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) throws Exception {

             final SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);

             return sqlSessionTemplate;

       }

 

}

 

 

 

 

 

4. TestMapper.java(Interface) 생성 package dao

package com.eugeneprogram.testweb.dao;

 

import java.util.List;

import java.util.Map;

 

public interface TestMapper {

    public List<Map<String, Object>> getList() throws Exception;

}

 

 

 

 

5. TestService.java package service

package com.eugeneprogram.testweb.service;

 

import java.util.List;

import java.util.Map;

 

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

 

import com.eugeneprogram.testweb.dao.TestMapper;

 

@Service

public class TestService {

    @Autowired

    TestMapper testMapper;

 

    public List<Map<String, Object>> getList() throws Exception {

        return testMapper.getList();

    }

}

 

 

 

 

 

6. MainController.java package controller

package com.eugeneprogram.testweb.controller;

 

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

 

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.servlet.ModelAndView;

 

import com.eugeneprogram.testweb.service.TestService;

 

@Controller

public class MainController {

    @Autowired

    TestService testService;

 

    @RequestMapping(value = "/main.do")

    public String goMain() {

        return "main";

    }

 

    @RequestMapping(value = "/dbTest.do")

    public ModelAndView dbTest() throws Exception {

        List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

        list = testService.getList();

 

        return new ModelAndView("testDbList", "testDbList", list);

    }

}

 

 

 

 

7. testMapper.xml 위치 src/main/resources

<?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="com.eugeneprogram.testweb.dao.TestMapper">

    <select id="getList" resultType="java.util.Map">

        SELECT col1, col2 FROM test_tb

    </select>

</mapper>

 

 

MariaDB [test]> desc test_tb;

+-------+--------------+------+-----+---------+-------+

| Field | Type         | Null | Key | Default | Extra |

+-------+--------------+------+-----+---------+-------+

| col1  | varchar(100) | YES  |     | NULL    |       |

| col2  | varchar(100) | YES  |     | NULL    |       |

+-------+--------------+------+-----+---------+-------+

 

test_db의 간단한 구성이다.

 

 

 

8. application.properties 수정. 위치 src/main/resources

spring.datasource.driverClassName=org.mariadb.jdbc.Driver

spring.datasource.url=jdbc:mariadb://192.168.?.?/test

spring.datasource.username=test

spring.datasource.password=password

spring.mvc.view.prefix=/WEB-INF/jsp/

spring.mvc.view.suffix=.jsp

 

 

 

 

 

9. jsp 생성(src/main/WEB-INF/jsp)

main.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>

<h1><%="Main" %></h1>

</body>

</html>

 

 

jsp는 그저 이 프로젝트가 잘 동작하는 지 보기위한 파일아다.

 

testDbList.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<%@ page import="com.eugeneprogram.testweb.service.TestService" %>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

</head>

<body>

<table>

  <tr>

    <th>col1</th>

    <th>col2</th>

  </tr>

<c:forEach var="testMap" items="${testDbList}" varStatus="status">

  <tr>

      <td><p>${testMap.col1 }</p></td>

      <td><p>${testMap.col2 }</p></td>

  </tr>

</c:forEach>

       

</table>

 

</body>

</html>

 

 

localhost:8080/dbTest.do에 접속하면,

 

col1

col2

col1 value 1

col2 value 1

col1 value 2

col2 value 2

col1 value 3

col2 value 3

 

 

와 같은 페이지가 나온다.