코딩

[Spring] MyBatis Spring 연동하기 본문

카테고리 없음

[Spring] MyBatis Spring 연동하기

ssooyn_n 2022. 4. 22. 11:13

pom.xml

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
	<dependency>
    	<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>3.5.9</version>
	</dependency>

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis-spring</artifactId>
		<version>2.0.7</version>
	</dependency>
    
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-jdbc</artifactId>
		<version>${org.springframework-version}</version>
	</dependency>

mybatis, mybatis-spring : mybatis 연동

spring-jdbc : jdbc처리

root-context.xml

<!--DataSource를 등록한다-->
<bean id="dataSource"
	class="org.apache.commons.dbcp2.BasicDataSource">
	<property name="driverClassName"
		value="com.mysql.cj.jdbc.Driver"></property>
	<property name="url"
		value="jdbc:mysql://localhost:3306/DB이름?serverTimezone=UTC"></property>
	<property name="username" value="DB아이디입력"></property>
	<property name="password" value="DB패스워드입력"></property>
</bean>

<!-- MyBatis를 사용하기 위한 sqlSessionFactory를 등록한다. -->
<bean id="sqlSessionFactory"
	class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource" />
	<!-- mapper xml 파일의 경로를 ant 표현식의 형태로 사용한다. -->
	<property name="mapperLocations"
		value="classpath:mappers/*.xml" />
	<!-- mapper에서 사용할 DTO들의 기본 패키지를 등록한다. -->
	<property name="typeAliasesPackage" value="dto클래스 경로"></property>
</bean>

<!-- mybatis에서 제공하는 scan 태그를 통해 repository interface들의 위치를 지정한다. -->
	<mybatis-spring:scan base-package="repository클래스 경로" />

resources/mapper에 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">
<!-- name space는 UserRepo의 fully qualified name으로 설정한다. -->
<mapper namespace="DB구현하는 repository클래스 경로">

	<!-- 사용자 정보를 저장한다. id는 repo클래스의 메소드 이름과 일치시킨다. -->
	<insert id="insert" parameterType="user">
		INSERT INTO users
		VALUES(#{id}, #{password}, #{name}, #{email}, #{age})
	</insert>
	
	<!-- 사용자 정보를 삭제한다. -->
	<delete id="delete" parameterType="string">
		DELETE FROM users
		WHERE id = #{id}
	</delete>
	
	<!-- 사용자 정보를 수정한다. -->
	<update id="update" parameterType="user">
		UPDATE users
		SET password = #{password} , name = #{name} , email = #{email}, age = #{age}
		WHERE id = #{id}
	</update>
	
	<!-- 사용자를 id로 검색하여 조회한다. id는 repo클래스의 메소드 이름과 일치시킨다. -->
	<select id="searchById" parameterType="string"
		resultType="user">
		SELECT *
		FROM users WHERE id = #{id}
	</select>

	<!-- 사용자 이름으로 검색하여 조회한다. id는 repo클래스의 메소드 이름과 일치시킨다. -->
	<select id="searchByName" parameterType="user"
		resultType="user">
		SELECT *
		FROM users WHERE name LIKE
		CONCAT('%',#{name},'%')
	</select>

	<!-- 모든 사용자 정보를 검색한다. id는 repo클래스의 메소드 이름과 일치시킨다. -->
	<select id="selectAll" resultType="user">
		SELECT * FROM users
	</select>
</mapper>

PrameterType: 들어올 파라미터의 변수타입 소문자로 써주어도 상관없다

ResultType: 리턴되는 변수타입 만약에 List<UserDto> 타입을 반환해주고 싶으면 userdto라고만 써도된다.

Comments