MyBatis Framework
๊ฐ๋ฐ์๊ฐ ์ง์ ํ SQL, ์ ์ฅํ๋ก์์ ๊ทธ๋ฆฌ๊ณ ๋ช ๊ฐ์ง ๊ณ ๊ธ ๋งคํ์ ์ง์ํ๋ ํผ์์คํด์ค ํ๋ ์์ํฌ
MyBatis ์ฌ์ฉ ์ด์
1. ์ฌ์ด ์ ๊ทผ์ฑ๊ณผ ์ฝ๋์ ๊ฐ๊ฒฐํจ
- JDBC์ ๋ชจ๋ ๊ธฐ๋ฅ์ MyBatis๊ฐ ๋๋ถ๋ถ ์ ๊ณตํ๋ค.
- ๋ณต์กํ JDBC ์ฝ๋๋ฅผ ๊ฑท์ด๋ด๋ฉฐ ๊น๋ํ ์์ค์ฝ๋๋ฅผ ์ ์งํ ์ ์๋ค.
- ์๋์ ์ธ ํ๋ผ๋ฏธํฐ ์ค์ ๊ณผ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ์ ๋ํ ๋งตํ ๊ตฌ๋ฌธ์ ์ ๊ฑฐํ ์ ์๋ค.
2. SQL ๋ฌธ๊ณผ ํ๋ก๊ทธ๋๋ฐ ์ฝ๋์ ๋ถ๋ฆฌ
- SQL์ ๋ณ๊ฒฝ์ด ์์ ๋๋ง๋ค ์๋ฐ ์ฝ๋๋ฅผ ์์ ํ๊ฑฐ๋ ์ปดํ์ผํ์ง ์์๋ ๋๋ค.
3. ๋ค์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ก ๊ตฌํ ๊ฐ๋ฅ
Spring์์ MyBatis ์ธํ ๋ฐฉ๋ฒ
1. lib ํด๋์ mybatis-3.4.6.jar(mvnrepository.com/ ์์ mybatis ๊ฒ์ ) ์ ojdbc6.jar ๋ฃ๊ธฐ
(์ธ์ ์๋๋ฉด Build Path์์ ์ง์ jar ํ์ผ add)
2. src/main/java์ ํจํค์ง ์์ฑ ํ config.xml, MyBatisMapper.xml ํ์ผ ์์ฑ
config.xml
DB ์ ๋ณด ์ค์ ์ ํด์ค๋ค.
(Spring ์ค์ ์ ์ด๋ ๊ฒ ์ํ๊ณ ์๋์ ์์ผ๋ ์ด๋ถ๋ถ์ ์ดํด๋งํ๊ณ ๋์ด๊ฐ์.)
<?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"> <!-- DB์ ๋ณด, ์ค์ -->
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@192.168.0.231:1521:xe"/>
<property name="username" value="hr"/>
<property name="password" value="hr"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mybatis/MyBatisMapper.xml"/>
</mappers>
</configuration>
MyBatisMapper.xml
Mapper XML ํ์ผ์์ Query๋ฌธ์ ์์ฑํ๋ค.
<?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"> <!-- Query๋ฌธ -->
<mapper namespace="mybatis.MyBatisMapper">
<!--
ํ์
<insert, delete, select, update
id = "์ธ๋ถ์์ ํธ์ถํ ๋ฌธ์์ด"
parameterType = "object"
resultType = "object">
์ฟผ๋ฆฌ #{ ์ธ๋ถ๋ก๋ถํฐ ๋ค์ด์ค๋ ๊ฐ} - core tag
${ ์ซ์ }
</insert, delete, select, update>
-->
<!-- insert, update, delete ์ฟผ๋ฆฌ๋ฌธ -->
<insert id="add" parameterType="dto.MemberDto">
INSERT INTO MEMBERDTO(ID, PWD, EMAIL)
VALUES ( #{ id }, #{ pwd }, #{ email } )
</insert>
<update id="updateData" parameterType="dto.MemberDto">
UPDATE MEMBERDTO
SET EMAIL = #{email}
WHERE ID = #{id}
</update>
<delete id="deleteData" parameterType="dto.MemberDto">
DELETE FROM MEMBERDTO
WHERE ID = #{id}
</delete>
<!-- select ํ๊ฐ -->
<select id="find" parameterType="java.lang.String" resultType="dto.MemberDto">
SELECT *
FROM MEMBERDTO
WHERE ID=#{id}
</select>
<!-- select ์ฌ๋ฌ๊ฐ -->
<select id="allData" parameterType="java.lang.String" resultType="dto.MemberDto">
SELECT *
FROM MEMBERDTO
</select>
<!-- Bbs Search -->
<select id="bbsSearch" parameterType="dto.BbsParam" resultType="dto.BbsDto">
SELECT *
FROM BBS
WHERE 1=1
<if test="s_category == 'title'">
AND TITLE LIKE '%'||#{keyword}||'%'
</if>
<if test="s_category == 'content'">
AND CONTENT LIKE '%'||#{keyword}||'%'
</if>
<if test="s_category == 'id'">
AND ID=#{keyword}
</if>
</select>
<!-- Bbs Search (choose)-->
<select id="bbsSearchChoose" parameterType="dto.BbsParam" resultType="dto.BbsDto">
SELECT *
FROM BBS
WHERE 1=1
<choose>
<when test="s_category == 'title'">
AND TITLE LIKE '%'||#{keyword}||'%'
</when>
<when test="s_category == 'content'">
AND CONTENT LIKE '%'||#{keyword}||'%'
</when>
<when test="s_category == 'id'">
AND ID=#{keyword}
</when>
<otherwise>
AND 1=1
</otherwise>
</choose>
</select>
</mapper>
MainClass.java
Javaํ์ผ์์ DTO๋ฅผ ์ฌ์ฉํด DB ์ ๊ทผ
package main;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import dto.BbsDto;
import dto.BbsParam;
import dto.MemberDto;
public class MainClass {
public static void main(String[] args) throws Exception {
// mybatis ์ค์ ํ์ผ์ ์ฝ์ด๋ค์ธ๋ค
InputStream is = Resources.getResourceAsStream("mybatis/config.xml");
// SqlSessionFactory ๊ฐ์ฒด๋ฅผ ์ทจ๋
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
// SqlSession ๊ฐ์ฒด๋ฅผ ์ทจ๋
SqlSession session = factory.openSession(); // session <- ์ค์ธ
//INSERT
MemberDto dto = new MemberDto("ddd", "444", "d1@d.com");
int n = session.insert("add", dto);
if(n > 0) {
session.commit();
System.out.println("์ถ๊ฐ ์ฑ๊ณต!");
}else {
session.rollback();
System.out.println("์ถ๊ฐ ์คํจ");
}
//UPDATE
MemberDto dto = new MemberDto ("aaa", "111", "a1@a");
int n = session.update("updateData", dto);
if(n > 0) {
session.commit();
System.out.println("์์ ์ฑ๊ณต!");
}else {
session.rollback();
System.out.println("์์ ์คํจ");
}
//DELETE
String id = "ddd";
int n = session.delete("deleteData", id);
if(n > 0) {
session.commit();
System.out.println("์ญ์ ์ฑ๊ณต!");
}else {
session.rollback();
System.out.println("์ญ์ ์คํจ");
}
//SELECT 1๊ฐ
String id = "ccc";
MemberDto dto = session.selectOne("find", id);
System.out.println(dto.toString());
//SELECT ์ฌ๋ฌ๊ฐ
List<MemberDto> list = session.selectList("allData");
for(MemberDto m : list) {
System.out.println(m.toString());
}
//BBS ๊ฒ์์กฐ๊ฑด SELECT
BbsParam param = new BbsParam("title", "์ ๋ชฉ");
List<BbsDto> list = session.selectList("bbsSearch", param);
for (BbsDto bbs : list) {
System.out.println(bbs.toString());
}
}
}
๋์ ์ฟผ๋ฆฌ
- if
JSTL core ํ๊ทธ์ ๋น์ทํ๊ฒ ์๊ฒผ๋ค.
<if test="s_category == 'title'">
AND TITLE LIKE '%'||#{keyword}||'%'
</if>
- choose, when, otherwise
choose ํ๊ทธ ์์ whenํ๊ทธ์ otherwiseํ๊ทธ๋ฅผ ์ด๋ค.
when ํ๊ทธ๋ if, else if ์ญํ
otherwise๋ else ์ญํ ์ ํ๋ค.
<select id="bbsSearchChoose" parameterType="dto.BbsParam" resultType="dto.BbsDto">
SELECT *
FROM BBS
WHERE 1=1
<choose>
<when test="s_category == 'title'">
AND TITLE LIKE '%'||#{keyword}||'%'
</when>
<when test="s_category == 'content'">
AND CONTENT LIKE '%'||#{keyword}||'%'
</when>
<when test="s_category == 'id'">
AND ID=#{keyword}
</when>
<otherwise>
AND 1=1
</otherwise>
</choose>
</select>
- DB ์ ์์ ์ํ Spring ์ธํ ๋ฐฉ๋ฒ
์ฐ์ ๊ทธ๋ฆผ์ ํตํด ์ ์ฒด์ ์ธ ๊ตฌ์กฐ๋ฅผ ์์๋ณด์
pom.xml
์์ ๋ณต๋ถํด์ ์ฐ์.
<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>
<groupId>sample2</groupId>
<artifactId>sample2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<release>15</release>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.3</version>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- ๋ฐํ์์ ๋์ ์ผ๋ก ์๋ฐ ํด๋์ค์ ํ๋ก์(๋๋ฆฌ(์ธ))๋ฅผ ์์ฑํด์ฃผ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค -->
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>commons-digester</groupId>
<artifactId>commons-digester</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.3</version>
</dependency>
<!-- Ajax ์ฌ์ฉ ์ค์ [jackson] -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.12</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.12</version>
</dependency>
<!-- ์์กด์ฑ์ ์ถ๊ฐ -->
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<!-- JCL(์์นด๋ฅดํ ์ปค๋จผ์ค ๋ก๊น
)์ ์ฌ์ฉ -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.7.30</version>
</dependency>
<!-- XML ํ์ฑ -->
<dependency>
<groupId>jdom</groupId>
<artifactId>jdom</artifactId>
<version>1.0</version>
</dependency>
<!-- ๋ง์ด ๋ฐํฐ์ค ์คํ๋ง ์ฌ์ฉ์ -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.3</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
<!-- ๋ง์ด SQL ์ฌ์ฉ์ -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.18</version>
</dependency>
<!-- XML ํ์ฑ -->
<dependency>
<groupId>org.jdom</groupId>
<artifactId>jdom</artifactId>
<version>2.0.1</version>
</dependency>
<!-- SLF4J API๋ฅผ ์ฌ์ฉํ๋๋ก -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
<!-- log4j -->
<!-- <dependency>
<groupId>ant</groupId>
<artifactId>ant-apache-log4j</artifactId>
<version>1.9.4</version>
</dependency> -->
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<!-- Map์ Bean๊ฐ์ฒด๋ก ๋ฐ๊พธ์ด์ฃผ๋ ํด๋์ค -->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils-core</artifactId>
<version>1.8.2</version>
</dependency>
<!-- DBCP : DB Connection Pool ์ฌ์ฉ -->
<dependency>
<groupId>com.kenai.nbpwr</groupId>
<artifactId>org-apache-commons-dbcp</artifactId>
<version>1.2.2-201002241055</version>
<type>nbm</type>
</dependency>
<!-- IO ๊ธฐ๋ฅ ๊ฐ๋ฐ์ ์ง์ํ๋ ์ ํธ๋ฆฌํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ค์ด์๋จ -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.30</version>
</dependency>
<!-- spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>5.3.3</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.3.3</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.3</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>5.3.3</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.3</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>5.3.3</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.3</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>5.3.3</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.3.3</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.3.3</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.3.3</version>
</dependency>
<!-- Java์ฉ json ๋ผ์ด๋ธ๋ฌ๋ฆฌ(XML/YAM/CSV) data-processing ํด -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.10.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.1</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>1.9.4</version>
</dependency>
<!-- oracle -->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.4</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20190722</version>
</dependency>
</dependencies>
<!-- ojdbc6 ์ ํจ๊ป ์ถ๊ฐ -->
<repositories>
<repository>
<id>codelds</id>
<url>https://code.lds.org/nexus/content/groups/main-repo</url>
</repository>
</repositories>
</project>
WEB-INF/spring/applicationContext.xml
ํ์ํ ๋ถ๋ถ ๊ฐ์ ธ๋ค๊ฐ ์ฐ๊ธฐ
jdbc.properties ํ์ผ์ ๋ฌด์กฐ๊ฑด ๋ง๋ค์ด์ค์ผ ํ๋ค.
'MyBatis setting'์์ 'sqls' ํจํค์ง์ 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"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<!-- Database ์ค์ -->
<!-- db ์ด๊ธฐํ ํ์ผ์ ์์น / ํ์ผ -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:properties/jdbc.properties</value>
</list>
</property>
</bean>
<!-- DBMS() -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="initialSize" value="${jdbc.initialSize}"/>
<property name="maxActive" value="${jdbc.maxActive}"/>
<property name="minIdle" value="${jdbc.initialSize}"/>
<property name="maxWait" value="3000"/>
<property name="poolPreparedStatements" value="true"/>
<property name="maxOpenPreparedStatements" value="50"/>
</bean>
<!-- MyBatis setting -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations" value="classpath:sqls/*.xml"/>
</bean>
<!-- sqlSession ์ทจ๋ -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"/>
<constructor-arg index="1" value="SIMPLE"/>
</bean>
<!-- jdbc ์ค์ (Spring Transaction Manager)-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>
jdbc.properties
properties ํจํค์ง ์์ ์์ฑ
์ค๋ผํด ์ธํ ์ ํ์ํ ์ ๋ณด๋ฅผ ๋ด๋๋ค.
# oracle setting
jdbc.driverClassName = oracle.jdbc.driver.OracleDriver
jdbc.url = jdbc:oracle:thin:@192.168.0.231:1521:xe
jdbc.username = hr
jdbc.password = hr
jdbc.initialSize = 5
jdbc.maxActive = 20
sqls ํจํค์ง์ member.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="Member">
<select id="allMember" resultType="bit.com.a.dto.MemberDto">
SELECT * FROM MEMBER
</select>
</mapper>
WEB-INF/spring/servlet-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"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
<context:annotation-config/>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp" />
</bean>
<context:component-scan base-package="bit.com.a"/>
<!-- ์ฌ๊ธฐ ํจํค์ง๋ช
๋ง ์์ ํด์ ์ฌ์ฉ -->
<!-- Ajax ์ฃผ์๋ฌธ์ ์ฌ์ฉํ๊ฐ -->
<mvc:annotation-driven/>
<!-- spring์์ ์ฒ๋ฆฌํ ์ ์๋ ์์ฒญ์ tomcat์ ์์ -->
<mvc:default-servlet-handler/>
</beans>
web.xml
๊ทธ๋๋ก ์ฌ์ฉ
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<display-name>sample4</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.do</url-pattern> <!-- .do ๋ก ๋๋๋ ๋งํฌ๋ง controller ์ด๋ -->
</servlet-mapping>
<!-- DB ๊ด๋ จ -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/applicationContext.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- filter -->
<!-- ํ๊ธ์ค์ -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern> <!-- '/*' ๋ชจ๋ ๊ฒฝ๋ก์ ์ฒดํฌ -->
</filter-mapping>
</web-app>
Controller ์์ ์์
์ปจํธ๋กค๋ฌ๋ฅผ ์ฌ์ฉํ๋ ์ด์
aibees.github.io/Why-Use-Service/
๋ค์ ๊ธ ์ฐธ๊ณ ํ์. ์ดํด๊ฐ๊ฒ ์ ๋ฆฌ๋ฅผ ์ ํด์ฃผ์ จ๋ค.
์ด๋ ธํ ์ด์ ์ ์ ์ํ์.
@Autowired : ์์กด๊ฐ์ฒด ์๋ ์ฃผ์ (Automatic Dependency Injection)
- ํ์ํ ์์กด ๊ฐ์ฒด์ “ํ์ "์ ํด๋นํ๋ ๋น์ ์ฐพ์ ์ฃผ์ .
package bit.com.a.controller;
import java.util.Date;
import java.util.List;
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 bit.com.a.dto.MemberDto;
import bit.com.a.service.MemberService;
@Controller
public class MemberController {
private static Logger logger = LoggerFactory.getLogger(MemberController.class);
@Autowired
MemberService memberService;
@RequestMapping(value = "allMember.do", method = RequestMethod.GET)
public String allmember(Model model) {
logger.info("MemberController allmember " +new Date());
List<MemberDto> list = memberService.allMember();
model.addAttribute("memlist", list);
return "allMember";
}
}
Service ์์
Service ์ธํฐํ์ด์ค
package bit.com.a.service;
import java.util.List;
import bit.com.a.dto.MemberDto;
public interface MemberService {
List<MemberDto> allMember();
}
Service ํด๋์ค
package bit.com.a.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import bit.com.a.dao.MemberDao;
import bit.com.a.dto.MemberDto;
import bit.com.a.service.MemberService;
@Service
public class MemberServiceImpl implements MemberService{
@Autowired // new ์๋ ์์ฑ
MemberDao memberDao;
@Override
public List<MemberDto> allMember() {
return memberDao.allMember();
}
}
Dao(Repository) ์์
Dao(Repository) ์ธํฐํ์ด์ค
package bit.com.a.dao;
import java.util.List;
import bit.com.a.dto.MemberDto;
public interface MemberDao {
List<MemberDto> allMember();
}
Dao(Repository) ํด๋์ค
package bit.com.a.dao.impl;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import bit.com.a.dao.MemberDao;
import bit.com.a.dto.MemberDto;
/* DB์ ๋ํํ๋ Class */
@Repository
public class MemberDaoImpl implements MemberDao{
@Autowired // new ์๋ ์์ฑ : Dependency Injection . ํ์ํ ์์กด ๊ฐ์ฒด์ “ํ์
"์ ํด๋นํ๋ ๋น์ ์ฐพ์ ์ฃผ์
ํ๋ค.
SqlSession sqlSession;
String namespace = "Member.";
/* member.xml ์ ์๋ 'SELECT * FROM MEMBER' ์ฟผ๋ฆฌ๋ฌธ์ ๋ถ๋ฌ์ด */
@Override
public List<MemberDto> allMember() {
List<MemberDto> list = sqlSession.selectList(namespace + "allMember");
return list;
}
}
'๐ป ๊ฐ๋ฐ > ๐ TIL (Today I Learned)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
21.04.16 TIL(D+67 Spring AOP ,Tiles) (0) | 2021.04.16 |
---|---|
21.04.14 TIL (D+65 Spring, ajax) (0) | 2021.04.14 |
21.04.12 TIL (D+63 Spring) (0) | 2021.04.12 |
210323 TIL(JSP EL ํ๊ทธ, JSTL ํ๊ทธ, JSP Action ํ๊ทธ) (0) | 2021.03.23 |
21.03.12 TIL(D+42 ์๋ธ๋ฆฟ Cookie and Session, JSP, Ajax) (0) | 2021.03.12 |