You will be fine

<Spring> 12. Mybatis

by BFine
반응형

1. Mybatis project settings

  • Java 코드와 SQL문의 결합도가 높다. 이 결합도를 낮추기 위해 설정한다. 

  • Market place에서 Java ORM plugin 설치( XML설정파일 ) -> mybatis Dependency 추가  

  • ORM : Object Relational Mapping -> Java 언어와 DB 언어를 연결 시켜주는 역할

  • Properties -> [ Project Facets -> Java 1.8 수정, Build Path -> Java 1.8 수정 ]

  • XML config 파일을 생성 (※ 패키지 내부에 생성 할 수 없다, container 프로젝트 최상단 설정)

  생성하면 src 아래에 properties 파일과 함께 config파일이 생성된다.


db.properties 파일 [ 커넥션 설정 ]

jdbc.driverClassName=org.mariadb.jdbc.Driver

jdbc.url=jdbc:mariadb://127.0.0.1:3306/mytest

jdbc.username=root

jdbc.password=hr  

  • config 파일은 위의 db를 불러와서 connection을 연결하는 역할을 한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<configuration>
    <properties resource="com/java/mybatiss/db.properties" />    
    <typeAliases>
        <typeAlias type="#package.#modelname" alias="#modelname"></typeAlias>
    </typeAliases<!--mapper에서 사용할 클래스의 alias 설정 -->
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driverClassName}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/java/mybatiss/mybatis-config.xml" />
    </mappers>
</configuration>
cs

  • Mapper.xml도 패키지내에 직접 생성이 불가능하다(생성 후 이동하여 사용)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<mapper namespace="#package.#mapperinterfacename"> //id값 사용할 이름
 <!-- 객체값을  DB에 매핑 -->
 <resultMap type="#modelname" id="YourResultSet"
        <id property="param1" column="columnname1" />
        <result property="param2" column="columnname2" />
        <result property="param3" column="columnname3" />
</resultMap>
 
<select id="getSomething" parameterType="int" resultType="#package.#modelname">
        SELECT
        columnname1,
        columnname2,
        columnname3
        FROM tablename1
        WHERE columnname1 = #{value}
    </select>
    <select id="getAll" resultMap="YourResultSet">
        SELECT * FROM tablename1
    </select>
 
    <insert id="insertSomething" parameterType="#modelname">
        INSERT INTO tablename1 (columnname1, columnname2, columnname3)
        VALUES(#{value1},#{value2},#{value3})
    </insert>
 
    <update id="updateSomething" parameterType="#modelname">
        UPDATE tablename1
        SET
        columnname1=#{param1}
        WHERE
        columnname2 = #{param2}
    </update>
 
    <delete id="deleteSomething" parameterType="int">
        DELETE FROM tablename1 WHERE
        columnname1 = #{param1}
    </delete>
</mapper>
 
cs

  • DB에서 Select 값 가져오기 

1
2
3
4
5
6
7
8
9
10
//session
//factory config.xml 불러옴
//factoryBuilder  (base) 
SqlSessionFactoryBuilder factoryBuilder=new SqlSessionFactoryBuilder();    
SqlSessionFactory factory=
    factoryBuilder.build(Resources.getResourceAsReader("com/java/mybatiss/mybatis-config.xml"));
    SqlSession session=factory.openSession(true/*오토커밋설정*/);
    // session 오픈    
    List<TestVO> list=session.selectList("test.selectTest");//namespace.id값
    for(TestVO v:list){System.out.println(v);}

cs


실행



2. Advenced

  • 매개변수 이용할 수 있다.(※ parameterType 설정 해주어야 한다. )

String param="spring";

List<TestVO> list=session.selectList("test.selectTest", param);

======================================================================

<select id="selectTest" resultType="TestVO" parameterType="string">

SELECT id,name FROM member where id=#{param} // 이름은 꼭 맞출 필요는 없다. </select>

  • 파라미터를 2개 이상 사용할 경우 객체를 만들어서 던지거나 Map,List 등 API를 사용한다.

<API 사용>

List<String> param=new LinkedList<String>();

param.add("spring"); param.add("testid");

=================================================================

<select id="selectTest" resultType="TestVO" parameterType="java.util.List">

SELECT id,name FROM member where id in

<foreach collection="list" item="key" open="(" separator="," close=")" >// colletion에는 list, array, map

         #{key}</foreach>

</select>

************************************************************************************************************

<객체사용>

public class Id {

String id;

String id2;

Id param=new Id("spring","testid");

================================================================

<select id="selectTest" resultType="TestVO" parameterType="com.java.mybatiss.Id">

         SELECT id,name FROM member where id=#{id} or id=#{id2}  // 객체 변수명과 일치시켜야 한다

</select> 


실행




3. Etc

  • ResultMap : 객체의 파라미터의 변수명과 DB의 컬럼명을 연결 시켜주는 역할을 한다.(두개의 이름이 일치하지 않을때 사용 )

1
2
3
4
5
6
7
8
<resultMap type="TestVO" id="rs">
        <result property="id" column="db_id" />
        <result property="name" column="db_name" />
    </resultMap
    
    <select id="selectTest" resultMap="rs" parameterType="com.java.mybatiss.Id">
        SELECT id,name FROM member where id=#{id} or id=#{id2}
    </select>
cs

  • selectKey : select 한 값을 insert할 때 사용하고 싶은 경우에 사용한다.

1
2
3
4
5
6
<insert id="insert" parameterType="TestVO">
    <selectKey keyProperty="seq" order="BEFORE" resultType="string" statementType="STATEMENT">
      select member_seq.nextbal from dual
    </selectKey>
        INSERT INTO member (id) VALUES(#{seq})
    </insert>

cs

  • CDATA : sql문에  xml 태그가 들어가면 xml로 인식하는 문제를 해결해준다.

1
2
3
4
5
<select id="select10" resultType="TestVO">
<![CDATA[
     select id from member 
     where id <10 ]]>     
</select<!-- <태그로 인식 CDATA xml 무시- DB전송그대로 -->
cs


※ if 태그의 경우 test="" 내부에 조건을 입력하는데 파라미터값을 쓰려면 Map으로 설정해주어야 한다.

반응형

'공부(2018~2019) - 스킨변경전 > Spring' 카테고리의 다른 글

<Spring> 13. Mybatis-Spring  (0) 2018.05.18
<Spring> 11. File Upload&Download  (0) 2018.05.15
<Spring> 10. internationalization, Spring JSON  (1) 2018.05.15
<Spring> 9. MVC pattern  (0) 2018.05.09
<Spring> 8. AOP  (0) 2018.05.04

블로그의 정보

57개월 BackEnd

BFine

활동하기