MyBatis

리무 rimu ·2023년 7월 7일
0

Co.

목록 보기
28/43

myBatis

myBatis란 개발을 도와주는 하나의 프레임워크!

MyBatis는 Java 언어를 위한 오픈 소스 ORM(Object-Relational Mapping) 프레임워크입니다. ORM은 객체 지향 프로그래밍 언어와 관계형 데이터베이스 간의 데이터 매핑을 자동으로 처리해 주는 기술입니다.

MyBatis는 SQL 매핑 파일(XML 또는 어노테이션 기반)을 사용하여 데이터베이스와의 상호 작용을 정의합니다.

이 매핑 파일에서는 SQL 쿼리문과 자바 객체 간의 매핑 규칙을 정의하여 데이터베이스와의 데이터 처리를 수행합니다.

MyBatis의 핵심 기능은 다음과 같습니다:

  • SQL 매핑: SQL 쿼리문을 정의하고 자바 객체와의 매핑을 설정합니다.
  • 데이터베이스 연동: JDBC를 사용하여 데이터베이스와의 연결을 설정하고 SQL을 실행합니다.
  • 객체 매핑: 데이터베이스 결과를 자바 객체로 매핑하여 반환합니다.
  • 동적 SQL: 동적인 SQL 쿼리를 생성하기 위한 기능을 제공합니다.
  • 트랜잭션 관리: 트랜잭션 처리를 위한 기능을 제공합니다.
    MyBatis는 간단하고 직관적인 API를 제공하여 데이터베이스와의 상호 작용을 쉽게 할 수 있도록 도와줍니다.

또한, 자체적인 ORM 기능보다는 개발자가 직접 SQL을 작성하고 제어할 수 있는 유연성을 제공하며, 성능과 확장성 측면에서 우수한 성능을 발휘합니다.

MyBatis는 Java 개발자들 사이에서 매우 인기 있는 ORM 프레임워크 중 하나이며, 대규모 엔터프라이즈 애플리케이션부터 작은 프로젝트까지 다양한 상황에서 사용됩니다. 이렇게 데이터베이스와 상호 작용을 쉽게 할 수 있도록 도와주는 프레임워크입니다.

pom.xml에 마이바티스 의존을 설정합니다.

pom.xml에서 라이브러리로 mybatis를 넣어야 사용할 수 있음!

테이블 생성하기!
1) 테이블 생성하고 commit; 하기

2) 테이블, 시퀀시 전부 다 생성 완료!!

HomeController.java

package com.javalec.spring_mybatis;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import javax.servlet.http.HttpServletRequest;
import org.apache.ibatis.session.SqlSession;
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.javalec.spring_mybatis.dao.ContentDao;
import com.javalec.spring_mybatis.dao.IDao;
/**
 * Handles requests for the application home page.
 */
@Controller
public class HomeController {
	private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
	ContentDao dao;
	// 스프링 설정파일에 넣어놨으니까 바로 autowired 태그 달면 setter 필요없음
	@Autowired
	private SqlSession sqlSession;
	@Autowired
	public void setDao(ContentDao dao) {
		this.dao = dao;
	}
	/**
	 * Simply selects the home view to render by returning its name.
	 */
	@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);
		model.addAttribute("serverTime", formattedDate );
		return "home";
	}
	@RequestMapping("/list")
	public String list(Model model) {
//		ArrayList<ContentDto> dtos = dao.listDao();
		IDao dao = sqlSession.getMapper(IDao.class);
//		ArrayList<ContentDto> dtos = dao.listDao();
		model.addAttribute("list", dao.listDao());
		return "/list";
	}
	@RequestMapping("/writeForm")
	public String writeForm() {
		return "/writeForm";
	}
	@RequestMapping("/write")
	public String write(HttpServletRequest request, Model model) {
		dao.writeDao(request.getParameter("mWriter"), request.getParameter("mContent"));
		return "redirect:list";
	}
	@RequestMapping("/view")
	public String view() {
		return "/view";
	}
	@RequestMapping("/delete")
	public String delete(HttpServletRequest request, Model model) {
		dao.deleteDao(request.getParameter("mId"));
		return "redirect:list";
	}
}

IDao.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.javalec.spring_mybatis.dao.IDao">
	<select id="listDao" resultType="com.javalec.spring_mybatis.dto.ContentDto">
		SELECT * FROM BOARD ORDER BY MID DESC
	</select>
	<insert id="writeDao">	
	</insert>
	<delete id="deleteDao">	
	</delete>	
</mapper>

sevlet-context.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.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.xsd">
	<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
	<!-- Enables the Spring MVC @Controller programming model -->
	<annotation-driven />
	<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
	<resources mapping="/resources/**" location="/resources/" />
	<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
	<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<beans:property name="prefix" value="/WEB-INF/views/" />
		<beans:property name="suffix" value=".jsp" />
	</beans:bean>
	<context:component-scan base-package="com.javalec.spring_mybatis" />
	<beans:bean name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" >
		<beans:property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
		<beans:property name="url" value="jdbc:oracle:thin:@localhost:1521:xe" />
		<beans:property name="username" value="scott" />
		<beans:property name="password" value="tiger" />
	</beans:bean>	
	<beans:bean name="template" class="org.springframework.jdbc.core.JdbcTemplate">
		<beans:property name="dataSource" ref="dataSource"/>
	</beans:bean>
	<beans:bean name="dao" class="com.javalec.spring_mybatis.dao.ContentDao">
		<beans:property name="template" ref="template"></beans:property>
	</beans:bean>
	<beans:bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<beans:property name="dataSource" ref="dataSource"></beans:property>
		<beans:property name="mapperLocations" value="classpath:com/javalec/spring_mybatis/dao/mapper/*.xml"></beans:property>
	</beans:bean>
	<beans:bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
		<beans:constructor-arg index="0" ref="sqlSessionFactory"></beans:constructor-arg>
	</beans:bean>
</beans:beans>

IDao.java 인터페이스

package com.javalec.spring_mybatis.dao;
import java.util.ArrayList;
import com.javalec.spring_mybatis.dto.ContentDto;
public interface IDao {
	public ArrayList<ContentDto> listDao();
	public void writeDao(String mWriter, String mContent);
	public ContentDto viewDao(String strID);
	public void deleteDao(String bId);
}

dao객체를 사용하지않고 인터페이스만 이용해서 xml 파일로
데이터베이스 관리를 할 수 있음

여기서 #을 붙이면 데이터베이스에 있는 컬럼 값에 맞춰서 값 변경되는데 $ 를 붙이면 String 값을 넣었다치면 데이터베이스에 있는 값을 상관하지않고 그냥 값 밀어넣음!

profile
JAVA / SQL / Spring 을 공부하고 있습니다 🐥

0개의 댓글