ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • day56 - MyBatis(Mybatis, Mybatis 실행 절차)
    KIC/MyBatis 2021. 9. 3. 02:19
    반응형

    [MyBatis]

    - 자바에서 데이터베이스 프로그래밍을 좀 더 쉽게 할 수 있게 도와 주는 개발 프레임 워크이다.

     

    - java beans 객체를 preparedStatement parameters와 ResultMaps로 쉽게 매핑을 할수 있도록 도와준다.

     

    - 이를 통해 database에 접근하기 위한 자바 코드의 양을 줄일 수 있다.

     

    [MyBatis 실행 절차]

    1. 객체를 파라미터로 전달

       -> javaBeans, Map or primitive Wrapper

     

    2. 매핑되는 sql 문장을 수행

       -> sql Maps 프레임워크는 PreparedStatement 인스턴스 생성

       -> 객체로부터 제공되는 값들을 파라미터로 세팅

     

    3. SQL 문장을 수행하고 ResultSet으로부터 결과 객체를 생성.

       -> Update의 경우에는 영향을 받은 rows 수가 반환된다.

       -> 쿼리의 경우 하나 혹은 여러 객체들이 반환된다.

     

     

     

     

     

     

    [mybatis 태그들]

    - 여기서 comment는 클래스를 의미한다.

     

    - 기존 jsp 에서는 VALUE(?, ?, ? ... ) 이런식으로 ? 를 써줬지만

    - mybatis에서는 comment라는 클래스를 parameterType으로 지정해 주고 comment 클래스 안에 부합하는 변수들이 존재한다면 getUserId와 같은 것들을 끌어와 VALUE() 안에 있는 변수들과 자동적으로 대응시켜준다.

     

     

     

     

    [변수 설정]

    - 만약 DB에서 설정한 컬럼 명과 setter getter에서 설정한 프로퍼티 이름이 다를 경우에는 resultMap으로 설정할 수는 있지만 웬만하면 컬럼명과 setter/getter 프로퍼티 명은 같게 해주는 것이 무조건 좋다.

     

     

    [MemberMapper1.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="member">
    	<select id="count" resultType="int">
    		select count(*) from member2
    	</select>
    	
    	<select id="list" resultType="member">
    		select * from member2
    	</select>
    	
    	<select id="selectId" parameterType="string" resultType="member">
    		select * from member2 where id = #{value}
    	</select>
    	
    	<select id="selectName" parameterType="string" resultType="member">
    		select * from member2 where name like '%${value}%'
    	</select>
    	
    	<select id="selectNameGender" parameterType="map" resultType="member">
    		select * from member2 where name like '%${name}%' and gender = #{gender}
    	</select>
    
    
    
    </mapper>

     

     

    [main1.java]

    package main;
    
    import java.io.IOException;
    import java.io.Reader;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    
    public class Main1 {
    
    	public static void main(String[] args) { 
    		initMybatis();
    	}
    
    	public static SqlSessionFactory initMybatis() { 
    		SqlSessionFactory sqlMap = null;
    	
    		Reader reader = null;
    		
    		try {
    		
    		reader =  Resources.getResourceAsReader("mapperXML/mybatis-config.xml"); 
    		sqlMap = new SqlSessionFactoryBuilder ().build(reader);
    		System.out.println("ok config"); 
    		} catch (IOException e) {
    		
    			// TODO Auto-generated catch block. 
    			e.printStackTrace();
    		}
    		return sqlMap;
    	}
    }

     

     

    [main2MemberXML.java]

    package main;
    
    import java.lang.reflect.Member;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    
    public class Main2MemberXML {
    	private final static String NS ="member.";
    	
    	public static void main(String[] args) {
    		SqlSessionFactory sqlmap = Main1.initMybatis();
    		SqlSession session = sqlmap.openSession();
    		
    		// 하나 받아오기
    		int x = session.selectOne(NS + "count");
    		System.out.println("count: "+ x);
    		
    		// 리스트 받아오기
    		List<Member> li = session.selectList(NS + "count");
    		for(Member m : li) {
    			System.out.println(m);
    		}
    		
    		Member member = session.selectOne(NS + "selectId");
    		System.out.println(member);
    		
    		li = session.selectList(NS + "selectName" , "2");
    		for(Member m : li) {
    			System.out.println(m);
    		}
    		
    		Map map = new HashMap();
    		map.put("name", "4"); // 이름에 4가 들어간 사람을 추출하기 위함
    		map.put("gender", "1");
    		li = session.selectList(NS + "selectNameGender" , map);
    		
    		for(Member m : li) {
    			System.out.println(m);
    		}
    	}
    }
    300x250

    댓글

Designed by Tistory.