ÃֽŠ°Ô½Ã±Û(JAVA)
2022.05.02 / 15:28

JSP + MyBatis + MySql »ùÇÃ

ÄÚÄÚ·Î
Ãßõ ¼ö 120

JSP + MyBatis + MySql »ùÇÃ

Âü°í: http://www.mybatis.org/core/ko/index.html

¾Æ·¡ ¼ø¼­·Î ¼³¸í.
1. MySql DB ±¸Ãà
2. À¥¾Û »ý¼º
3. MyBatis ¼³Á¤
  3.1. ÇÊ¿äÇÑ ¶óÀ̺귯¸® ¼³Ä¡
  3.2. ȯ°æ ¼³Á¤
  3.3. ¸ÊÆÛ »ý¼º
  3.4. JSP ¿¬µ¿
4. À¥ ÆäÀÌÁö »ý¼º
5. Å×½ºÆ®

ÃÖÁ¾ Æú´õ ±¸Á¶:



1. MySql DB ±¸Ãà
- Å×½ºÆ®¿ë °èÁ¤À» ¾Æ·¡¿Í °°ÀÌ ¼³Á¤Çß´Ù.
User name : "username"
Password : "password"

1) test ½ºÅ°¸¶¸¦ »ý¼ºÇÑ´Ù.
mysql> create schema test;

2) users Å×À̺íÀ» »ý¼ºÇÑ´Ù.
mysql> use test;

mysql> create table users (
`username` varchar(255) not null,
`password` varchar(255) not null,
`email` varchar(255) not null,
primary key (`username`)
) default charset=utf8;

3) user ¸¦ »ý¼ºÇÑ´Ù.
mysql> create user 'username'@'localhost' identified by 'password';

4) test ½ºÅ°¸¶¿¡ ´ëÇÑ ±ÇÇÑÀ» ¼³Á¤ÇÑ´Ù.
mysql> grant all privileges on test.* to 'username'@'locahost';

2. À¥¾Û »ý¼º
- Æú´õ ±¸Á¶
+ $WEB_APP/
  + WEB-INF/
    + libs/
    - web.xml
  + index.jsp

web.xml ¼Ò½º:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
 metadata-complete="true" version="3.0">
 
 <welcome-file-list>
 <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
 
</web-app>

3. MyBatis ¼³Á¤
3.1. ÇÊ¿äÇÑ ¶óÀ̺귯¸® ¼³Ä¡
- ´Ù¿î·Îµå

- À§ ÆÄÀϵéÀ» ´Ù¿î·Îµå ¹Þ¾Æ $WEB_APP/WEB-INF/libs/ ¿¡ º¹»çÇÑ´Ù.
!) MyBatis Æú´õ¿¡ lib Æú´õ¿¡ ÀÖ´Â ÆÄÀϵ鵵 º¹»çÇÑ´Ù.
  • asm-3.3.1.jar
  • cglib-2.2.2.jar
  • commons-dbcp-1.4.jar
  • commons-logging-1.1.1.jar
  • commons-pool-1.6.jar
  • log4j-1.2.16.jar
  • mybatis-3.1.1.jar
  • mysql-connector-java-5.1.20-bin.jar
  • slf4j-api-1.6.2.jar
  • slf4j-log4j12-1.6.2.jar

3.2. ȯ°æ ¼³Á¤
- mybatis ¼³Á¤ ÆÄÀÏÀÎ mybatis-config.xml ÆÄÀÏÀ» »ý¼ºÇÑ´Ù.(ÆÄÀÏ À̸§Àº Áß¿äÇÏÁö ¾Ê´Ù)
!) com.sample.mybatis.config ÆÐÅ°Áö¿¡ »ý¼ºÇÏ¿´´Ù.
!) ÆÄÀÏ ³»¿ë: JDBC ¼³Á¤¸¸ µé¾î ÀÖ´Ù.
<?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>
 
 <environments default="development">
  <environment id="development">
   <transactionManager type="JDBC"/>
   <dataSource type="POOLED">
    <property name="driver" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/test"/>
    <property name="username" value="username"/>
    <property name="password" value="password"/>
   </dataSource>
  </environment>
 </environments>

</configuration>

3.3. ¸ÊÆÛ »ý¼º
- ÇÊ¿äÇÑ ÆÄÀϵé
  • User.java - ·¹ÄÚµå ¾ÆÀÌÅÛ
  • UserMapper.java - SQL ¹® ¼öÇàÀ» À§ÇÑ ÀÎÅÍÆäÀ̽º
  • UserMap.xml - SQL ¹® ¸ÊÆÛ

 - ¼Ò½º ÄÚµåµé
com.sample.mybatis.dto.User.java:
package com.sample.mybatis.dto;

public class User {
 private String username;
 private String password;
 private String email;
 
 public String getUsername() {
  return username;
 }
 public void setUsername(String username) {
  this.username = username;
 }
 public String getPassword() {
  return password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
 public String getEmail() {
  return email;
 }
 public void setEmail(String email) {
  this.email = email;
 }
}
com.sample.mybatis.dao.UserMapper.java:
package com.sample.mybatis.dao;

import java.util.List;

import com.sample.mybatis.dto.User;

public interface UserMapper {
 public List<User> selectAllUsers();
 public User selectUser(String username);
 public void insertUser(User user);
 public void updateUser(User user);
 public void deleteUser(String username);
}
com.sample.mybatis.sqlmap.UserMap.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">

<mapper namespace="com.sample.mybatis.dao.UserMapper">

<select id="selectAllUsers" resultType="User">
 select username as username,
  password as password,
  email as email
 from users;
</select>

<select id="selectUser" parameterType="string" resultType="User">
 select username as username,
  password as password,
  email as email
 from users
 where username=#{username};
</select>

<insert id="insertUser" parameterType="User">
 insert into users (username, password, email)
  values (#{username}, #{password}, #{email});
</insert>

<update id="updateUser" parameterType="User">
 update users set
  password=#{password},
  email=#{email}
 where username=#{username}
</update>

<delete id="deleteUser" parameterType="string">
 delete from users
  where username=#{username}
</delete>

</mapper>

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

 <!-- Type alias -->
 <typeAliases>
  <typeAlias alias="User" type="com.sample.mybatis.dto.User"/>
 </typeAliases>
 
 <environments default="development">
  <environment id="development">
   <transactionManager type="JDBC"/>
   <dataSource type="POOLED">
    <property name="driver" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/test"/>
    <property name="username" value="username"/>
    <property name="password" value="password"/>
   </dataSource>
  </environment>
 </environments>

 <!-- UserMap.xml µî·Ï -->
 <mappers>
  <mapper resource="com/sample/mybatis/sqlmap/UserMap.xml" />
 </mappers>
</configuration>

3.4. JSP ¿¬µ¿
- ¼­¹ö ½ÃÀ۽ÿ¡ SqlSessionFactory ¸¦ »ý¼ºÇØ¾ß ÇÑ´Ù.
- SqlSessionFactory ¸¦ »ý¼ºÇÏ´Â ¼­ºí¸´À» »ý¼ºÇÑ´Ù.

com.sample.mybatis.config.MyBatisConfig.java : ¼­¹ö ½ÃÀ۽à init ÇÔ¼ö°¡ ½ÇÇàµÈ´Ù.
package com.sample.mybatis.config;

import java.io.IOException;
import java.io.InputStream;

import javax.servlet.http.HttpServlet;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MyBatisConfig extends HttpServlet {
 
 private static SqlSessionFactory sqlSessionFactory;
 
 public void init() {
  
  try {
   InputStream inputStream = Resources.getResourceAsStream("com/sample/mybatis/config/mybatis-config.xml");
   sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  } catch (IOException e) {
   e.printStackTrace();
  }
 }

 public static SqlSessionFactory getSqlSessionFactory() {
  return sqlSessionFactory;
 }

 public static void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
  MyBatisConfig.sqlSessionFactory = sqlSessionFactory;
 }
}


- web.xml ¼³Á¤ : load-on-startup À» ¼³Á¤ÇØ Áà¾ß ÇÑ´Ù.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
 metadata-complete="true" version="3.0">
 
 <!-- MyBatis initializer µî·Ï -->
 <servlet>
 <servlet-name>MyBatisInitializer</servlet-name>
 <servlet-class>com.sample.mybatis.config.MyBatisConfig</servlet-class>
 
 <load-on-startup>1</load-on-startup>
 </servlet>
 
 <welcome-file-list>
 <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>
 
</web-app>

4. À¥ ÆäÀÌÁö »ý¼º
- User ·¹ÄÚµå »ý¼º, ¼öÁ¤, »èÁ¦ ÇÒ ¼ö ÀÖ´Â ÆäÀÌÁö (validation ¹ÌÆ÷ÇÔ)

user_control.jsp :
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="com.sample.mybatis.config.MyBatisConfig" %>
<%@ page import="com.sample.mybatis.dao.*" %>
<%@ page import="com.sample.mybatis.dto.*" %>
<%@ page import="org.apache.ibatis.session.*" %>
<%@ page import="java.util.*" %>

<%

// handle operation

if (request.getMethod().equalsIgnoreCase("POST")) {
 
 SqlSession sqlSession = MyBatisConfig.getSqlSessionFactory().openSession(true);
 try {
  UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
 
  String subtype = request.getParameter("subtype");
  if (subtype.equals("create-user")) {
   User user = new User();
   user.setUsername(request.getParameter("username"));
   user.setPassword(request.getParameter("password"));
   user.setEmail(request.getParameter("email"));
   userMapper.insertUser(user);
  } else if (subtype.equals("modify-user")) {
   User user = new User();
   user.setUsername(request.getParameter("username"));
   user.setPassword(request.getParameter("password"));
   user.setEmail(request.getParameter("email"));
   userMapper.updateUser(user);
  } else if (subtype.equals("delete-user")) {
   userMapper.deleteUser(request.getParameter("username"));
  }
 } finally {
  sqlSession.close();
 }
}

// select users
List<User> users = null;

SqlSession sqlSession = MyBatisConfig.getSqlSessionFactory().openSession(true);
try {
 UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
 
 users = userMapper.selectAllUsers();
 
} finally {
 sqlSession.close();
}
%>

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>User Control</title>
</head>
<body>

<h2>Create User</h2>
<form name="create-form" method="post">
<input type="hidden" name="subtype" value="create-user" />
Username: <input type="text" name="username" value="" /><br />
Password: <input type="password" name="password" value="" /><br />
Email: <input type="email" name="email" value="" /><br />
<input type="submit" value="Create" />
</form>

<h2>User List</h2>
<ul>
<%
if (users == null || users.size() == 0) {
 %><li>no user</li><%
} else {
 for (User user : users) {
%>
 <li style="border:solid 1px black;padding:4px;margin-bottom:5px;">
 <form name="modify-form" method="post">
 <input type="hidden" name="subtype" value="modify-user" />
 <input type="hidden" name="username" value="<%= user.getUsername() %>" />
 Username: <%= user.getUsername() %><br />
 Password: <input type="password" name="password" value="" /><br />
 Email: <input type="text" name="email" value="<%= user.getEmail() %>" /><br />
 <input type="submit" value="Modify" />
 </form>
 <form name="delete-form" method="post">
 <input type="hidden" name="subtype" value="delete-user" />
 <input type="hidden" name="username" value="<%= user.getUsername() %>" />
 <input type="submit" value="Delete" />
 </form>
 </li>
<%
 }
}
%>
</ul>

</body>
</html>
!) SqlSessionFactory.openSession() ÇÔ¼ö¿¡ true ¸¦ ÀÎÀÚ·Î ÁÖ¸é ÀÛ¾÷ÀÌ ³¡³ª¸é ÀÚµ¿À¸·Î commit ÇÑ´Ù.

5. Å×½ºÆ®