Mybatis : 자바 오브젝트와 sql문 사이의 자동 Mapping 기능을 지원하는 Persistence 프레임워크의 SQL Mapper
- sql을 별도 파일로 분리해서 관리 가능
마이바티스 대체 : JPA, Hibernate (ORM)
- 환경 설정:
Intellij, Springboot 2.3.1, Maven, Java8
PostgreSQL 12 버전, Mybatis 3.5.5
- Step:
[PostgreSQL DB 테이블 생성]
- 테스트에 사용할 임의의 테이블 생성
create table post(
id varchar(255) primary key NOT NULL,
user_nm varchar(255),
pwd varchar(255)
);
[DatabaseConfig 설정]
- DataSource : Connection Pool을 구현하기 위한 스펙을 정해놓은 인터페이스, DB연동을 위해 사용하는 객체
- sqlSession : sql문을 호출해주는 객체로, 이 객체를 통해 우리가 정의한 sql문으로 접근 가능
- sqlSessionFactory : sqlSession을 만드는 역할
- classpath : src/main/resources 매핑
@Configuration
@MapperScan(basePackages = "org.example.mapper") # mapper.xml 파일들이 바라볼 기본 패키지 위치 지정
@EnableTransactionManagement
public class DatabaseConfig {
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
sessionFactory.setMapperLocations(resolver.getResources("mapper/*.xml"));
return sessionFactory.getObject();
}
@Bean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) throws Exception {
final SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
return sqlSessionTemplate;
}
}
[application.properties 작성]
- PostgreSQL 설정 작성
## DB setting
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
spring.datasource.username=
spring.datasource.password=
[domain 작성]
- Entity 및 DTO
@Getter
@Setter
@NoArgsConstructor(force = true)
public class Post {
private String id;
private String user_nm;
private String password;
@Builder
public Post(String id, String user_nm, String password) {
this.id = id;
this.user_nm = user_nm;
this.password = password;
}
}
[Mapper 작성]
- insert문 수행 / 테이블에 있는 모든 데이터 조회 / 특정 컬럼 or 한 줄 조회
public interface PostMapper {
public List<Post> getAll() throws Exception;
public Post getOne() throws Exception;
public void insertPost(Post post) throws Exception;
}
[XML 작성]
- 테이블 컬럼 : pwd
- 코드 : password
- 둘 간의 매핑 : resultMap 사용
<?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="org.example.mapper.PostMapper">
<resultMap id="PostResult" type="org.example.dto.Post">
<result column="id" property="id"/>
<result column="user_nm" property="user_nm"/>
<result column="pwd" property="password"/>
</resultMap>
<select id="getAll" resultType="org.example.dto.Post">
select * from public.post;
</select>
<select id="getOne" resultType="org.example.dto.Post">
select * from public.post limit 1;
</select>
<insert id="postInsert" parameterType="org.example.dto.Post">
insert into post
values
(#{id},#{user_nm},#{password})
</insert>
</mapper>
[Controller 작성]
- 데이터 조회 관련
@RequiredArgsConstructor
@RestController
public class PostController {
@Autowired
private PostMapper postMapper;
@RequestMapping(value = "all", method = RequestMethod.GET)
public List<Post> getPostAll() throws Exception {
return postMapper.getAll();
}
@RequestMapping(value = "one", method = RequestMethod.GET)
public Post getPostOne() throws Exception {
return postMapper.getOne();
}
@GetMapping(path = "/all2")
public String getPost1() throws Exception {
return String.format("%s %s", postMapper.getAll(), LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
}
}
[Junit 테스트]
- insert 관련
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = Application.class)
@WebAppConfiguration
public class PostTest {
@Autowired
private PostMapper postMapper;
@Test
public void testMapper() throws Exception {
Post post = Post.builder().id("test").user_nm("test").password("test").build();
postMapper.insertPost(post);
}
'Computer Science > Java' 카테고리의 다른 글
# 전자정부 프레임워크 세부 적용 규칙 - Intellij + SpringBoot 적용 (0) | 2020.11.01 |
---|---|
[intelliJ] 전자정부 프레임워크 구축(세팅)하기 (0) | 2020.10.14 |
[eclipse]전자정부 표준프레임워크 개발환경 구축하기 (0) | 2020.10.14 |
# 스프링 이벤트 캐치 - PostgreSQL Logical Replication Streaming (0) | 2020.09.15 |
# Live templates(주석 자동완성) + File & Code template (0) | 2020.07.14 |