Step-by-Step
[7] 구현 - MyBatis 사용 본문
📜이전📜
Spring에서 데이터베이스와 연결하는 대표적인 방법 2가지
1. JPA
- Java Persistence API - ORM(Object Relational Mapping) 표준 기술
- Java의 객체와 관계형 DB를 맵핑하는 방식
- 객체 만들고 필드명 위에 @Column("데이터베이스 필드명") 해주면 데이터베이스에서 알아서 뽑아가고, 건네주는 방식
2. MyBatis
- 개발자가 직접 쿼리문 작성
- SQL쿼리들을 한 구성파일에 구성하여 프로그램 코드와 SQL을 분리할 수 있는 장점 지님
JPA는 안드로이드 스튜디오 구현당시 retrofit2 사용할때 잠깐 편리함을 느꼈지만,
MyBatis를 더 잘 다뤄보고 싶은 마음에 다시 MyBatis 선택
언제나 첫 시작은 설정할 요소들이 많다
build.gradle
implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:3.0.0'
Application.properties
# MySQL 설정
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# DB Source URL
spring.datasource.url=jdbc:mysql://localhost:3306/DB이름
# DB username
spring.datasource.username=DB사용자이름
# DB password
spring.datasource.password=DB비밀번호
#mybatis
mybatis.mapper-locations=mybatis/mapper/*.xml
- dataSource 초기 설정에 해놓은 부분 : https://smile-development.tistory.com/128
- src/main/resources 이하 자신이 Mapper을 저장할 위치 설정
- 나는 이 부분에 설정해서 mybatis/mapper/ *.xml로 설정함
SqlSession
@Configuration
@PropertySource("classpath:/application.properties")
@MapperScan(basePackages="com.webapp.dreamers.mapper",sqlSessionFactoryRef = "SqlSessionFactory")
public class DBConfig {
@Autowired
private ApplicationContext applicationContext;
@Bean
@ConfigurationProperties(prefix="spring.datasource.hikari")
public HikariConfig hikariConfig() {
return new HikariConfig();
}
/*
@Bean(name = "dataSource")
public DataSource dataSource() throws Exception {
DataSource dataSource = new HikariDataSource(hikariConfig());
return dataSource;
}
*/
@Bean(name = "SqlSessionFactory")
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setTypeAliasesPackage("com.webapp.dreamers.domain");
sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources("classpath:mybatis/mapper/*Mapper.xml"));
return sqlSessionFactoryBean.getObject();
}
@Bean(name = "sqlSession")
public SqlSessionTemplate sqlSessionTemplate(@Qualifier("SqlSessionFactory")SqlSessionFactory sqlSessionFactory) {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
- sqlSession : 핵심적인 역할을 하는 클래스로서 SQL 실행 및 트랙잭션 관리를 실행함
- Mapper.xml 인식해서 SQL을 실행시키기 위해 필요한 sqlSession
- 주석처리된 dataSource는 위에 application.properties에 설정해 두었으니 필요없음
- getResource에서 *Mapper.xml로 하면 ~Mapper로 끝나는 xml 파일명만 인식
- 설명참조 : https://byul91oh.tistory.com/232
- 공식문서 : https://mybatis.org/spring/ko/sqlsession.html
Mapper (Interface)
@Mapper
public interface UserMapper {
public void register(UserDTO userDTO);
}
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">
<mapper namespace="com.webapp.dreamers.mapper.UserMapper">
<insert id="register">
INSERT INTO user(user_id, user_name, user_pw) VALUES (#{userid},#{username},#{password})
</insert>
</mapper>
실행
++ 아무것도 보내지 않은 경우
Bad_Request 응답 옴 (이전 글 참조)
'프로젝트 > Dreamers (Blog)' 카테고리의 다른 글
[6] 구현 - 간단히 프로젝트 구조 설정 (0) | 2023.02.18 |
---|---|
[5] 기획 - SQL문 작성 (0) | 2023.02.14 |
[4] 기획 - 플로우 차트 (Flow Chart) (0) | 2023.02.08 |
[3] 기획 - 데이터 모델링 (2) 테이블 작성 & DB Diagram (0) | 2023.01.26 |
[2] 기획 - 데이터 모델링 (1) ERD 다이어그램, 정규화 (0) | 2023.01.25 |
Comments