자바 개발자들이 데이터베이스를 쉽게 다룰 수 있도록 도와주는 오픈 소스 ORM(Object-Relational Mapping) 프레임워크
데이터베이스 쿼리 <-> 프로그래밍 언어 코드를 분리하여 유지보수성
과 생산성
을 높인다.
필요한 의존성
MyBatis는 JDBC로 DB 연결을 하기에 DB 연결 정보를 설정해야 한다.
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/> // mysql 드라이버
<property name="url" value="jdbc:mysql://localhost:3306/mydatabase"/> // mysql 사용
<property name="username" value="username"/> // 아이디
<property name="password" value="password"/> // 비밀번호
</bean>
MyBatis XML 설정파일 생성 후 필요한 설정 추가
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:mybatis-config.xml"/>
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSessionFactory"/>
</bean>
MyBatis Mapper는 DB 쿼리와 <-> 자바 메서드()를 매핑하는 역할
데이터베이스에 접근하기 위한 SQL 쿼리를 작성하고, 이를 실행하는 자바 메서드를 정의한다.
➡️ 쉽게 말해 "XML에 SQL 쿼리들을 작성할 건데 그 SQL이 연결될 메서드들을 정의할 파일을 만들자!"
@Mapper // 등록
// 작성
public interface UserMapper {
User getUserById(int id);
void insertUser(User user);
void updateUser(User user);
void deleteUser(int id);
}
Mapper 속 메서드() 별로 SQL 쿼리문 작성
<!-- user_mapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<select id="getUserById" parameterType="int" resultType="com.example.model.User">
SELECT * FROM users WHERE id = #{id}
</select>
<insert id="insertUser" parameterType="com.example.model.User">
INSERT INTO users (name, email) VALUES (#{name}, #{email})
</insert>
<!-- 다른 메서드들에 대한 쿼리도 추가할 수 있다 -->
</mapper>
Mapper 인터페이스를 스프링 Bean으로 등록하고 주입받아 사용
@Service
public class UserService {
private final UserMapper userMapper;
public UserService(UserMapper userMapper) {
this.userMapper = userMapper;
}
// 유저 조회
public User getUserById(int id) {
return userMapper.getUserById(id);
}
// 유저 등록
public void insertUser(User user) {
userMapper.insertUser(user);
}
// ... 다른 메서드들
}
🦄 출처:
https://ccomccomhan.tistory.com/130 [[꼼꼼한 개발자] 꼼코더:티스토리]