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 값을 넣었다치면 데이터베이스에 있는 값을 상관하지않고 그냥 값 밀어넣음!