[SpringFramework] 스프링부트 마이바티스 연동(Springboot MyBatis)
by 개발자 우디나중에 다시 헤메지 않도록 예시 파일로 작성해둔다.
구체적인 설정은 그때 그때 개발환경에 맞게
pom.xml
의존성 객체 추가
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
mybatis-config.xml
mapper가 스캔할 경로들 미리 설정
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright 2015-2016 the original author or authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<package name="com.test.board.front.model"/>
<package name="com.test.board.admin.model"/>
</typeAliases>
<mappers>
<!-- FRONT -->
<mapper resource="mybatis/sql/front/BoardMapper.xml"/>
<mapper resource="mybatis/sql/front/UserMapper.xml"/>
<mapper resource="mybatis/sql/front/QnAMapper.xml"/>
<!-- ADMIN -->
<mapper resource="mybatis/sql/admin/AdminUserMapper.xml"/>
<mapper resource="mybatis/sql/admin/AuthMapper.xml"/>
</mappers>
</configuration>
application.properties
DB Connection을 위한 환경 설정
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.url=jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8&serverTimezone=UTC
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=0000
mybatis.config-location=classpath:mybatis-config.xml
spring.servlet.multipart.maxFileSize=5MB
spring.servlet.multipart.maxRequestSize=5MB
image.root.path=/images
image.default.path=/default
AdminUserMapper.java
인터페이스를 @Mapper로 등록
@Mapper
public interface AdminUserMapper {
AdminUser login(AdminUser param);
int doubleCheck(String id);
int join(AdminUser user);
List<AdminUser> adminUserList(AdminUser param);
AdminUser detail(int pk);
int deleteAdmin(AdminUser adminUser);
int updateAdmin(AdminUser adminUser);
}
AdminUserMapper.xml
<mapper namespace=""> : 매우 중요! 패키지명 반드시 정확히 일치해야 함.
<?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.test.board.admin.mapper.AdminUserMapper">
<select id="adminUserList" parameterType="AdminUser" resultType="AdminUser">
SELECT pk, id, name, date_format(joinDate,'%Y-%m-%d %H:%i:%s') as joinDate,
del, date_format(delDate,'%Y-%m-%d %H:%i:%s') as delDate
FROM AdminUser
WHERE 1=1
<if test="id != null and id != ''">
AND id LIKE CONCAT('%', #{id}, '%')
</if>
<if test="startDt != null and startDt != ''">
<if test="endDt != null and endDt != ''">
AND date_format(joinDate,'%Y-%m-%d') BETWEEN #{startDt} AND #{endDt}
</if>
</if>
ORDER BY joinDate desc
</select>
<select id="detail" parameterType="int" resultType="AdminUser">
SELECT pk, id, name, date_format(joinDate,'%Y-%m-%d %H:%i:%s') as joinDate,
del, date_format(delDate,'%Y-%m-%d %H:%i:%s') as delDate
FROM AdminUser
WHERE pk = ${pk}
</select>
<select id="login" parameterType="AdminUser" resultType="AdminUser">
SELECT
pk, id, password, del
FROM AdminUser
WHERE id = #{id}
</select>
<select id="doubleCheck" parameterType="String" resultType="int">
SELECT count(pk)
FROM AdminUser
WHERE id = #{id}
</select>
<insert id="join" parameterType="AdminUser" useGeneratedKeys="true" keyProperty="pk" keyColumn="pk">
INSERT INTO AdminUser (
id,
password,
name,
del,
joinDate
)
VALUES(
#{id},
#{password},
#{name},
'N',
now()
)
</insert>
<update id="deleteAdmin" parameterType="AdminUser">
UPDATE
AdminUser
SET
del='Y',
delDate = NOW()
WHERE 1=1
<if test="adminPks != null">
AND pk IN
<foreach item="item" index="index" open="(" close=")" collection="adminPks">
<if test="index != null and index != ''">,</if> #{item}
</foreach>
</if>
</update>
<update id="updateAdmin" parameterType="AdminUser">
UPDATE
AdminUser
SET
name=#{name}
<if test="password != null and password != ''">
, password = #{password}
</if>
WHERE pk = #{pk}
</update>
</mapper>
블로그의 정보
우디의 개발스터디
개발자 우디