본문 바로가기
자바웹프로그래밍/mybatis

mybatis 셋팅(setting) 하는법 no spring(일반 메이븐 프로젝트) postgresql myabtis

by 디찌s 2023. 1. 8.
728x90
반응형

 

*도움이 되셨다면 광고 클릭 한번 부탁드립니다. (__)

 

 

 

회사에서 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 을 이용하여 실행을 해보면 잘 동작하는것을 알수있다!

728x90
반응형

댓글