[꼼꼼한 개발자] 꼼코더
[JAVA] - MyBatis란?, 마이바티스란?(예제코드) 간단하고 쉽게 이해하기 본문
🧹 간단 정리
- MyBatis를 사용하면 DB를 쉽게 다룰 수 있다.
- 예시) preparedstatement처럼 쿼리문을 복잡하게 입력하지 않고 실제 쿼리문과 유사하게 작성할 수 있다.
- preparedstatement : "UPDATE users SET name =?, email =? WHERE id =?"
- MyBatis : UPDATE users SET name = #{name}, email = #{email} WHERE id = #{id}
- MyBatis의 또 하나의 장점은 동적 쿼리 작성이 가능하다.
- MyBatis 사용 방법순서 : 의존성 설정 -> DB 설정 -> MyBatis 설정 -> Mapper 인터페이스 작성 -> XML 작성 -> MyBatis 사용
아래글을 보고나면 이해가 훨씬 더 잘 될 것이다! 👀
🐣 MyBatis란?
MyBatis는 자바 개발자들이 데이터베이스를 쉽게 다룰 수 있도록 도와주는
오픈 소스 ORM(Object-Relational Mapping) 프레임워크이다.
🧐 MyBatis의 사용 목적
MyBatis는 데이터베이스 쿼리 <-> 프로그래밍 언어 코드를 분리하여 유지보수성과 생산성을 높이는 것.
😮 MyBatis의 주요 장점
- 유연성: SQL 쿼리를 직접 작성할 수 있으므로 매우 유연하다. 또한, MyBatis는 동적 쿼리를 작성할 수 있다.
- 간결성: MyBatis는 SQL 쿼리와 프로그래밍 언어 코드를 분리하기 때문에 코드가 간결해져 유지보수에 용이
- 성능: MyBatis는 캐시 기능을 제공하여 데이터베이스 연산 속도를 높일 수 있다.
- 다양한 데이터베이스 지원: MyBatis는 다양한 데이터베이스에 대한 지원을 제공합니다.
👍 대표적인 장점 유연성(동적쿼리)
동적 쿼리란, 실행 시점에 조건에 따라 SQL 쿼리를 동적으로 생성하는 것.
이는 데이터베이스의 검색 조건이나 결괏값 등이 동적으로 변화할 때 유용하게 사용된다.
MyBatis에서는 동적 쿼리를 작성하기 위해
<if>, <choose>, <when>, <otherwise>, <foreach> 등의 태그를 사용할 수 있다.
아래는 MyBatis에서 동적 쿼리를 작성하는 예제이다.
getUserList() 메서드 호출 시 name과 email 파라미터가 null이 아니면
해당 조건을 포함하는 SQL 쿼리를 동적으로 생성하여 조회한다.
// xml 파일
<select id="getUserList" resultType="User">
SELECT * FROM users
<where>
<if test="name != null"> // 동적 쿼리
AND name = #{name}
</if>
<if test="email != null"> // 동적 쿼리
AND email = #{email}
</if>
</where>
</select>
👨🏻💻 MyBatis 사용순서와 예제
🫘 1. 스프링 프로젝트 생성 후 필요한 의존성 추가
필요한 의존성
- spring-core
- spring-jdbc
- mybatis
- mybatis-spring
⚙️ 2. 데이터베이스(DB) 설정
MyBatis는 JDBC로 DB 연결을 하기에 DB 연결 정보를 설정해야 한다.
스프링 설정(XML, properties 등)에 DB 연결 정보(DataSource) 등록
<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>
🐣 3. MyBatis 설정
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>
🗺️ 4. MyBatis 매퍼 작성 후 등록
MyBatis Mapper는 DB 쿼리와 <-> 자바 메서드()를 매핑하는 역할
데이터베이스에 접근하기 위한 SQL 쿼리를 작성하고, 이를 실행하는 자바 메서드를 정의한다.
쉽게 말해 "XML에 SQL 쿼리들을 작성할 건데 그 SQL이 연결될 메서드들을 정의할 파일을 만들자!"
예시) "CRUD 쿼리문을 XML에 작성할 예정 이거든? 음.. Insertitems(), Getitems(), modifyitems(), Deleteitems() 메서드가 있는 인터페이스를 만들자 그리고 그 클래스를 Mapper라는 명칭으로 부르자! 어때 쉽지?"
@Mapper // 등록
// 작성
public interface UserMapper {
User getUserById(int id);
void insertUser(User user);
void updateUser(User user);
void deleteUser(int id);
}
🧑🏻💻 5. Mapper 인터페이스와 연결될 XML 작성
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>
🕵🏻 6. 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);
}
// ... 다른 메서드들
}
'간단하고 쉽게 > JAVA' 카테고리의 다른 글
[JAVA] - 자바 컬렉션(Collection)이란? 간단하고 쉽게 이해하기 (0) | 2023.03.21 |
---|---|
[JAVA] - JPA란? 간단하고 쉽게 이해하기(예제코드 완벽정리) (1) | 2023.03.21 |
[JAVA] - 명시적 형변환 연산(Casting), 암묵적 형변환(Promotion) 간단하고 쉽게 이해하기 (0) | 2023.03.16 |
[JAVA] - Optional이란? 간단하고 쉽게 이해하기 (Optional 객체 생성 예제) (2) | 2023.03.09 |
[JAVA] - HashMap, LinkedHashMap, TreeMap, Hashtable 차이점 간단하고 쉽게 이해하기 (0) | 2022.12.22 |