ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • mybatis 셋팅(setting) 하는법 no spring(일반 메이븐 프로젝트) postgresql myabtis
    자바웹프로그래밍/mybatis 2023. 1. 8. 09:35
    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
    반응형
Designed by Tistory.