*도움이 되셨다면 광고 클릭 한번 부탁드립니다. (__) |
회사에서 spring에서 개발된 일부 내용들이 jar 파일로 배포해야 되는 상황이 생겼다.
그 코드에는 db에 접근하여 데이터를 가져와야 하는 내용들이 있었고, spring에서 사용하는 mybatis를
아래와 같이 일반 jdbc 라이브러리를 사용하여 쿼리를 일일이 수정하기엔 작업시간이 걸릴거 같았다.
그래서 mybatis를 그대로 사용하기로 하였다.
Connection conn = null;
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String id = "hr";
String pw = "java1234";
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(url, id, pw);
return conn;
} catch (Exception e) {
System.out.println("DBUtil.getConnection() : " + e.toString());
}
그럼, 이제 Intellij 에서 mybatis를 적용하는법을 작성할것이다.
일단 intellij 에서 maven 프로젝트를 생성하자
기본적으로 intellij에서는 maven 프로젝트를 아주 깔끔하게 생성시켜주는 편리한 도구이며, 위와같은 next를 클릭만 해주면 메이븐 구조가 잘짜여진 프로젝트가 생성된다.
이제 위 사진처럼 구조가 잘짜여진 maven 프로젝트가 생성되었으면 pom.xml에 2가지의 라이브러리를 불러오자.
<dependencies>
<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.4.1212</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.0.1</version>
</dependency>
</dependencies>
나는 postgresql 를 사용할것이기떄문에 mybatis lib 랑 postgresql lib를 종속시켜줬으며, 각각 자신이 사용한 jdbc에 맞게 라이브러리를 불러오면 된다.
1.mybatis-config setting
public class MyBatisUtil {
private static SqlSessionFactory factory;
static
{
Reader reader = null;
try {
reader = Resources.getResourceAsReader("config/mybatis-config.xml");
} catch (IOException e) {
throw new RuntimeException(e.getMessage());
}
factory = new SqlSessionFactoryBuilder().build(reader);
}
public static SqlSessionFactory getSqlSessionFactory()
{
return factory;
}
}
- MybatisUtil.class -
mybatis 환경 설정하기 위해서 , mybatis-config를 설정해주자 필자는 위에서 언급한 프로젝트 구조에 따라 java>util 에 'MybatisUtil' 를 생성하였다 .
' reader = Resources.getResourceAsReader("config/mybatis-config.xml");'
위 코드에서 resource에 있는 mybatis-config.xml 을 불러오기 위해 mybatis-config.xml도 생성해준다.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource='jdbc.properties'/>
<typeAliases>
<typeAlias type='bean.UserInfoBean' alias='UserInfoBean'></typeAlias>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="org.postgresql.Driver"/>
<property name="url" value="jdbc:postgresql://localhost:5432/ifdb"/>
<property name="username" value="postgres"/>
<property name="password" value="qlalfqjsgh"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mappers/user-mapper.xml"/>
</mappers>
</configuration>
- mybatis-config.xml -
위 mybatis-config.xml 에서 '<typeAliases>' 태그는 vo,dto 등에 대한 object를 설정해주는것이다.
<mapper> 태그는 sql문을 작성한 내용을 곧 배울 mapper interface와 맵핑시켜주는 태그이다!
2.mapper , service ,vo 생성
위에서 이미 언급했듰이, sql문과 mapping할 'mapper', 실제 user를 조회하는 로직을 담고있는 'service' , 조회된 내용을 담을 vo(dto)를 구성해보자.
package bean;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class UserInfoBean {
private String user_id;
private String password;
private String email;
private String phone;
}
- UserInfoBean -
package dao;
import bean.UserInfoBean;
import java.util.List;
public interface UserMapper {
UserInfoBean selectOneManagerInfoByUserId(String user_id);
}
- UserMapper -
package service;
import bean.UserInfoBean;
import dao.UserMapper;
import org.apache.ibatis.session.SqlSession;
import util.MyBatisUtil;
import java.util.List;
public class UserService {
public UserInfoBean selectOneManagerInfoByUserId(String user_id){
SqlSession sqlSession = MyBatisUtil.getSqlSessionFactory().openSession();
try{
UserMapper reportMapper = sqlSession.getMapper(UserMapper.class);
return reportMapper.selectOneManagerInfoByUserId(user_id);
}finally{
sqlSession.close();
}
}
}
- UserService -
위 세개를 원하는 포로젝트 패키지에 생성한후, mapper interface와 맵핑한 sql xml를 생성해주자
필자는 resource>mapper 폴더에 'user-mapper.xml'로 생성하였다.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.UserMapper">
<select id="selectOneManagerInfoByUserId" parameterType="String" resultType="UserInfoBean">
SELECT coalesce(emp_nm,'') as emp_nm,
coalesce(email,'') as email,
coalesce(group_name,'') as group_name
FROM data_user_info
WHERE user_id = #{user_id}
</select>
</mapper>
3.TEST
package service;
import bean.UserInfoBean;
import org.junit.jupiter.api.Test;
class UserServiceTest {
@Test
public void getManagerInfo(){
String userId = "dongwankim";
UserService rs = new UserService();
UserInfoBean result= rs.selectOneManagerInfoByUserId(userId);
System.out.println(result.getEmail());
}
}
이제 println 을 이용하여 실행을 해보면 잘 동작하는것을 알수있다!
'자바웹프로그래밍 > mybatis' 카테고리의 다른 글
Set Multiple Datasource with mybatis on spring(spring 설정을 통해 mybatis 다중 설정 코드) (0) | 2023.02.15 |
---|---|
spring에서 mybatis 연동 완벽 작동! spring mybatis 연동 방법 (0) | 2023.02.02 |
[mybatis] selectKey 사용법 (0) | 2020.04.08 |
댓글