mybatis-3.4.5.jar [1.55 MB]

예제를 통해, MyBatis를 이용하여 DB에 접근해보자.

<br/>

<img alt="" src="https://file.podo-dev.com/blogs/images/2019/07/10/origin/YJC4Z9181224235518.PNG" style="border-style:solid; border-width:1px; width:360px">

우선 프로젝트의 기본적인 셋팅이다 ( MySql과 연동을 말함)*

학생정보를 DBMS로부터 가져오는 예제이다. <span style="color:#2980b9">Spring 4.2.3을 사용했다.

<br/>

학생 테이블을 다음과 같이 생성한다.

create table TB_SAMP_STUDENT(
STNT_ID int primary key,
STNT_NAME varchar(100),
STNT_AGE int,
STNT_SEX char(1)
);

<br/>

매핑 되는 학생 클래스는 다음과 같다.

public class StudentVo {
	private int id;
	private String name;
	private int age;
	private String sex;
    //add getter, setter
}
<br/>

<br/>

그럼 이제 MyBatis를 활용해보자.

Mybatis 3.4.5 버전이 maven에 없으므로 web라이브러리에 추가한다. (해당 파일을 첨부)

Pom.xml에는 다음 라이브러리를 추가하자.

<dependency>
	<groupId>org.mybatis</groupId>
	<artifactId>mybatis-spring</artifactId>
	<version>1.3.0</version>
</dependency>

<br/>

<br/>

<img alt="" src="https://file.podo-dev.com/blogs/images/2019/07/10/origin/3Q3SRZ181224235518.PNG" style="border-style:solid; border-width:1px; width:360px">

resources에 MyBatis 설정파일과 맵퍼를 추가한다.

<br/>

그 다음 <span style="color:#8e44ad">dao-context.xml에 다음을 추가하자.

<!-- Mybatis -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="DataSource" />
    <property name="configLocation" value="classpath:com/cglee079/sample/mybatis/mybatis-config.xml" />
    <property name="mapperLocations" value="classpath:com/cglee079/sample/mybatis/mappers/**.xml" />
</bean>

<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
	<constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>
</bean>

MyBatis설정 파일 위치와 Mapping 위치를 정의한다.

<br/>

<span style="color:#2980b9">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>
	<!--  Set Config -->
</configuration>

<br/>

<span style="color:#2980b9">studentMapper.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.cglee079.sample.mapper.StudentMapper">
</mapper>

<br/>

이제 모든 설정은 끝났다.

쿼리를 추가하고 데이터를 매핑하여 가져오는 일만 남았다.

<br/>

TB_SAMP_STUENT 데이터를 가져와 뿌려주는 예제를 구현해보자.

<br/>

<span style="color:#2980b9">studentMapper.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.cglee079.sample.mapper.StudentMapper">

	<select id="list" resultType="com.cglee079.sample.model.StudentVo">
		SELECT 
		STNT_ID as 'id',
		STNT_NAME as 'name',
		STNT_AGE as 'age',
		STNT_SEX as 'sex'
		FROM TB_SAMP_STUDENT
	</select>
	
</mapper>
  • 7 : id 설정, return 객체 설정

  • 9 ~ 12 : as문을 통해 클래스의 변수명과 맞춰줌.

<br/>

<br/>

<span style="color:#2980b9">studentDao.java

@Repository
public class StudentDao {
	final static String namespace = "com.cglee079.sample.mapper.StudentMapper";
	
	@Autowired
	private SqlSessionTemplate sqlSession;

	public List<StudentVo> list(){
		return sqlSession.selectList(namespace + ".list");
	}
	
}
  • 3 : studentMapper.xml에 정의된 namespace

  • 6 : dao-context.xml에 정의된 bean

  • 9 : namespace + "." + id 로 쿼리 호출

<br/>

<br/>

<span style="color:#2980b9">StudentController.java

@Controller
public class StudentController {
	
	@Autowired
	private StudentService studentService;
	
	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Locale locale, Model model) {
		List<StudentVo> students = studentService.list();
		model.addAttribute("students", students);
		return "home";
	}
	
}
  • 10 : 프론트 단으로 전달.

<br/>

<br/>

<span style="color:#2980b9">home.jsp

<%@ page pageEncoding="UTF-8"  %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<body>
# 
	Student List. 
<br/>

<table>
	<tr>
	<td>ID</td>
	<td>Name</td>
	<td>Age</td>
	<td>Sex</td>
	</tr>
	<c:forEach var="student" items="${students}">
		<tr>
		<td>${student.id}</td>
		<td>${student.name}</td>
		<td>${student.age}</td>
		<td>${student.sex}</td>
		</tr>
	</c:forEach>
</table>
</body>
</html>
  • 15 : jstl forEach 이용

<br/>

<br/>

<span style="color:#000000">결과

<img alt="" src="https://file.podo-dev.com/blogs/images/2019/07/10/origin/EZEDH9181224235518.PNG" style="border-style:solid; border-width:1px; width:360px">

<br/>

<span style="color:#000000">MyBatis 여러 사용법을 공부해보자.

위의 예제는 하나의 쿼리문에 대해 진행하여 기본적인 사용법을 설명하였다.

다음은 여러가지 사용법에 대해서, java코드와 mapper 설정 파일을 나열한다.

<br/>

<em>#INSERT</em>

<span style="color:#2980b9">studentDao.java

public boolean insert(StudentVo student){
	return sqlSession.insert(namespace + ".insert", student) == 1;
}

<br/>

<span style="color:#2980b9">studentMapper.xml

<insert id="insert">
	INSERT INTO TB_SAMP_STUDENT
	VALUES(#{id}, #{name}, #{age}, #{sex})	
</insert>

<br/>

<em>#DELETE</em>

<span style="color:#2980b9">studentDao.java

public boolean delete(int id){
	return sqlSession.delete(namespace + ".delete", id) == 1;
}

<br/>

<span style="color:#2980b9">studentMapper.xml

<delete id="delete" parameterType="Integer">
	DELETE FROM TB_SAMP_STUDENT
	WHERE STNT_ID = #{id}
</delete>

<br/>

<br/>
<em>#IF문</em>

<span style="color:#2980b9">studentDao.java

public List<StudentVo> list(String sex){
	HashMap<String, Object> map = new HashMap<>();
	map.put("sex", sex);
	return sqlSession.selectList(namespace + ".list", map);
}
  • 2 : mybatis가 타입인지 못하여 에러가 발생하는 경우가 있다. 다음과 같이 map형태로 처리하는 편법을 사용하면 해결 할 수 있다.

<br/>

<br/>

<span style="color:#2980b9">studentMapper.xml

<select id="list" parameterType="map" resultType="com.cglee079.sample.model.StudentVo">
	SELECT 
	STNT_ID as 'id',
	STNT_NAME as 'name',	
	STNT_AGE as 'age',
	STNT_SEX as 'sex'
	FROM TB_SAMP_STUDENT	
    <if test="sex != null">
	WHERE STNT_SEX = #{sex}; 
	</if>
</select>

<br/>

0
이전 댓글 보기
등록
TOP