[Spring-F.] 25. MyBatis 3.5, Spring Framework 5.4, Oracle 19g - 방법1(web.xml-Beans)
MyBatis 3.5 - 연동 방법에 관한 글을 시작하겠다.
1. [Spring-Framework] Spring Framework 5.4, MyBatis 3.5 연동 방법 - 실험 결과, 2020-10-02
소스코드를 위주로 소개하겠다.
동작되지 않은 소스이지만, 분석해보고 싶은 사람들을 위해서 소스코드를 공개하도록 하겠다.
7. 방법 1 - 출력 결과
결과는 동작하지 않았다.
그림 14. 결과 (방법1) - 미지원
8. 프로젝트 구성
프로젝트는 아래처럼 구성하였다.
그림 15, 그림 16. 프로젝트 구성 모습
9. web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/root-context.xml
/WEB-INF/spring/mybatis-context.xml
</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/appServlet/servlet-context.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
파일명: web.xml
[첨부(Attachments)]
10. mybatis-context.xml (없는 파일 - 생성해줘야 함)
셋팅 파일의 경로에 관한 것이다. /src/main/java/webapp/WEB-INF/spring 폴더 내에 만들어줘야 한다.
그림 17. mybatis-context.xml의 위치
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 현재는 빈(Bean) 등록 방식 미지원함(2020-10-02 / Spring Framework 5 이상) -->
<!-- org.apache.ibatis.datasource.pooled.PooledDataSource -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
<property name="username" value="사용자계정"/>
<property name="password" value="비밀번호"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="/WEB-INF/mybatis-config.xml"/>
<property name="mapperLocations" value="classpath:com/example/spbatis/mapper/*.xml" />
</bean>
<!--
<property name="mapperLocations" value="classpath:com/think/mapper/**/*.xml" />
<property name="mapperLocations" value="/WEB-INF/mybatis/mapper/*.xml" />
-->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>
</bean>
</beans>
파일명: mybatis-context.xml
[첨부(Attachments)]
10. mybatis-config.xml (없는 파일 - 생성해줘야 함)
mybatis-config.xml의 위치이다.
/src/main/webapp에 생성해주면 된다.
그림 18. 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>
<settings>
<setting name="cacheEnabled" value="false" />
<setting name="useGeneratedKeys" value="true" />
<setting name="defaultExecutorType" value="REUSE" />
</settings>
<!-- 별명 -->
<typeAliases>
<typeAlias alias="hashMap" type="java.util.HashMap" />
<typeAlias alias="map" type="java.util.Map" />
</typeAliases>
<!--
<mappers>
<mapper resource="mybatis/mapper/tempMapper.xml" />
</mappers>
<mappers>
<mapper resource="mybatis/mapper/bbsMapper.xml" />
</mappers>
-->
</configuration>
파일명: mybatis-config.xml
[첨부(Attachments)]
11. view - home.jsp
경로: /src/main/webapp/WEB-INF/views/home.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ page session="false" %>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>
Hello world!
</h1>
<P> The time on the server is ${serverTime}. </P>
<h3>Beans 방식(XML)</h3>
<c:forEach items="${list }" var="val" >
${val.username} /
${val.password} /
${val.enabled }<br>
</c:forEach>
<c:if test="${empty list }">
${"데이터가 존재하지않아요."}
</c:if>
<h3>XML - web.xml 설정방식</h3>
<c:forEach items="${list2 }" var="val" >
${val.username} /
${val.password} /
${val.enabled }<br>
</c:forEach>
<c:if test="${empty list2 }">
${"데이터가 존재하지않아요."}
</c:if>
</body>
</html>
파일명: home.jsp
[첨부(Attachments)]
11. Controller - HomeController.java
패키지 경로: com.example.spbatis;
package com.example.spbatis;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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 org.springframework.web.bind.annotation.RequestMethod;
import com.example.spbatis.service.CompUsersService;
/**
* Handles requests for the application home page.
*/
@Controller
public class HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
private CompUsersService compUserService;
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
logger.info("Welcome home! The client locale is {}.", locale);
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
String formattedDate = dateFormat.format(date);
compUserService = new CompUsersService();
model.addAttribute("serverTime", formattedDate );
model.addAttribute("list2", compUserService.getAllCompUsers()) ;
return "home";
}
}
파일명: HomeController.java
[첨부(Attachments)]
12. Service - CompUsersService.java
패키지 경로: com.example.spbatis.service
package com.example.spbatis.service;
import java.util.List;
import com.example.spbatis.dao.CompUsersDao;
import com.example.spbatis.model.CompUsers;
public class CompUsersService {
CompUsersDao dao = new CompUsersDao();
public List<CompUsers> getAllCompUsers() {
return dao.selectAddress();
}
}
파일명: CompUsersService.java
[첨부(Attachments)]
13. DAO - CompUsersDao.java
패키지 경로: com.example.spbatis.dao
package com.example.spbatis.dao;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.example.spbatis.model.CompUsers;
@Component
public class CompUsersDao {
/* 동작 안함1
@Autowired
private SqlSessionFactory sqlSessionFactory;
*/
/* 동작 안함2 */
@Autowired
private SqlSession sqlSession;
/* */
public CompUsersDao() {
}
// SQL 세션 열기
public List<CompUsers> selectAddress() {
/* 동작 안함2 */
return sqlSession.selectList("com.example.spbatis.mapper.allCompUsers");
/* 동작 안함1
SqlSession session = sqlSessionFactory.openSession();
try
{
return session.selectList("com.example.spbatis.mapper.allCompUsers");
}
finally
{
session.close();
}
*/
// return null;
}
}
파일명: CompUsersDao.java
[첨부(Attachments)]
14. Mapper - CompUsersMapper.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="com.example.spbatis.mapper">
<select id="allCompUsers" resultType="com.example.spbatis.model.CompUsers">
select * from comp_users
</select>
<!--
<select id="allAddress" resultType="com.edu.db.AddressDto">
select * from addressbook
</select>
<select id="selectAddress" parameterType="Integer" resultType="com.edu.db.AddressDto">
select NUM, NAME, ADDRESS, BIRTHDATE
from addressbook
where num=#{num}
</select>
<insert id="insertAddress" parameterType="com.edu.db.AddressDto">
insert into
addressbook(NAME, ADDRESS, BIRTHDATE)
values
(#{name},#{address},#{birthdate})
</insert>
<delete id="deleteAddress" parameterType="Integer">
DELETE FROM AddressBook
WHERE NUM = #{num}
</delete>
<update id="updateAddress" parameterType="com.edu.db.AddressDto" >
update addressbook
set birthdate = #{birthdate}, name = #{name}, address =#{address}
where num = #{num}
</update>
-->
</mapper>
파일명: CompUsersMapper.java
[첨부(Attachments)]
* 방법2 - 실험 결과 보기
2. [Spring-F.] 26. MyBatis 3.5, Spring Framework 5.4, Oracle 19g - 방법2(SqlMap-XML-XML 맵핑) // 결과: 지원, 2020-10-02