<Spring> 12. Mybatis
by BFine1. 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);} |
실행
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