인터페이스 작동에서 프로그래밍
일반적으로 SQL 인터페이스를 매핑하는 클래스를 구축 할 때 일반적으로 다음과 같습니다.
public static void testbasicquery (int id) {sqlsession session = mybatisutils.getSqlsession (); { / * * david.mybatis.demo.ivisitoroperation.basicQuery는 아래 그림의 구성에서 네임 스페이스에 해당해야합니다. mybatisutils.closesession (세션); System.out.println (방문자); } catch (예외 e) {// todo : 핸들 예외}}}<!-여기 네임 스페이스는 당신이 전달한 문자열 매개 변수에 해당합니다-> <mapper 네임 스페이스 = "david.mybatis.demo.ivisitoroperation"> <!-여기 결과 타입은 Indealias Node에 방금 지정된 별칭에 해당합니다 .-> <select id = "Basic Query"parametertype = "int rictustitor". id로 주문 </select> </mapper>
이런 식으로, 실제 개발 프로세스 중에 양쪽의 이름이 실수로 대응하지 않으면 예외가 발생합니다. 이러한 상황을 피하기 위해 인터페이스 방법을 사용하여 해당 작업을 수행 할 수 있습니다. 아래 에서이 기사를 수정하겠습니다.
먼저, 우리는 패키지 이름 David.mybatis.demo 아래에 새로운 ivisitoperation 클래스를 만듭니다. 이는 모든 데이터베이스 메소드의 인터페이스가 다음과 같이 미래에 작동 할 것임을 나타냅니다.
package david.mybatis.demo; import java.util.list; import david.mybatis.model.pagenateargs; import david.mybatis.model.visitor; public interface ivisitoroperation { /** Basic Query* / public visitor basicquery (int id);} public void sessistics interfacece (int void testbasic) = mybatisutils.getSqlSession (); try {ivisitoroperation voperation = session.getMapper (ivisitoroperation.class); 방문자 방문자 = Voperation.basicQuery (ID); mybatisutils.closesession (세션); System.out.println (방문자); } catch (예외 e) {// todo : 핸들 예외}}}이 작업은 완료되므로 수동 쓰기 메소드 이름으로 인해 발생할 수있는 불일치에 대해 걱정할 필요가 없습니다.
CRUD 작동
다음은 단일 테이블 작업을 기반으로 CRUD 및 GetList 작업의 생성을 설명합니다. 일부 테스트 데이터를 만들려면 먼저 추가 메소드를 얻으십시오.
다음과 같이 마지막 ivisitoroperation 인터페이스 클래스에서 추가, 삭제, 업데이트, 쿼리 및 getList 인터페이스 메소드를 계속 추가하십시오.
/** 기본 쿼리*/ 공개 방문자 BasicQuery (int id); /** 방문자 추가*/ public int add (방문자 방문자); /** 방문자 삭제*/ public int delete (int id); /** 업데이트 방문자*/ public int update (방문자 방문자); /** 쿼리 방문자*/ 공개 방문자 쿼리 (int id); / * * 쿼리 방문자 목록 */ public list <visitor> getList ();
해당 CRUD 작업의 경우 삽입, 업데이트, 삭제 및 선택 노드는 각각 visitormapper.xml의 <mapper> 노드 아래에 있습니다. 자세한 구성 세부 정보는 공식 웹 사이트 http://mybatis.github.io/mybatis-3/sqlmap-xml.html을 참조하십시오.
이 예제의 구성은 다음과 같습니다. #{parameter_name}을 사용하여 매개 변수를 전달하고 $ {parameter_name}을 직접 사용할 수도 있습니다.
전자 방식으로 MyBatis는 예를 들어 테이블에 삽입 (#{name}) => 테이블에 삽입 (이름) 값 (?)에 매개 변수화 된 형식으로 변환합니다 (MySQL의 경우).
후자의 방식으로, MyBatis는 테이블 (이름) 값 ($ {name}) => 삽입 ([이름) 값 ([전달 된 값]), AA, AA, 'AA', 여기 'AA'가 있습니다.
<? 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 ="David.dmo.dmo. useGeneratedKeys = "true"는 자체 성장 시퀀스를 사용할지 여부를 의미합니다. keyProperty = "id"는 어떤 열이자가 성장 열인 열을 지정합니다. ParameterType = "Visitator"는 query resultmap과 같은 ivisitorOperation interface 클래스의 정의에서 전달 된 해당 유형을 지정합니다. 맞춤형 반환 유형은 복잡한 유형을 반환하기위한 최상의 선택이며 mybatis에서 가장 강력한 무기이기도합니다.> <insert id = "add"addeitor "use-generatedkeys ="true "keyproperty ="id "> visitater in insert (이름, 이메일, 상태, createime) 값 ( #{status}), #{ #{ #})). </insert> <delete id = "delete"parametertype = "int"> 방문자에서 삭제 된 상태> 0 및 id =#{id} </delete> <업데이트 id = "update"parametertype = "visititor"> update visitor set name =#{name}, email =#{email}, status}#{id =#} 및; </update> <select id = "query"parametertype = "int"resulttype = "visitor"> id =#{id} 및 id =#{id} 및 status </select> <select id = "basicquery"parametertype = "int"resulttype = "visitator"에서 id =#{id}#}##########{idect * select </select id = id = id = "rectations </select </select </select </select <lect <rectatient" < /select> <select> <select> <getList "resultMap ="Visitorrs "> <refid ="getListSql " /> < /select> <resultmap type ="visitor "id ="visitorrs "> <id councm ="id "propert ="id " /> <result column ="propert = "name"/> <result councm = "resitt column ="result column " /> <rendate" /> <lection " /> <lection" /> <ret column " /> <ret column ="result councle = "stration <결과 열 = "CreateTime"property = "CreateTime"/> </resultmap> <sql id = "getListsql"> 선택 * 방문자에서 선택 * 0 </sql> </mapper>여기서 주목해야 할 것은 작동 노드의 ID가 인터페이스 정의의 인터페이스 이름에 해당해야하며 매개 변수 유형도 해당해야한다는 것입니다. 예를 들어 인터페이스는 추가 (방문자 방문자)입니다. 그런 다음 삽입 노드를 구성 할 때 id = "add"및 parametertype = "Visitor"
그렇지 않으면 해당 예외 가보고됩니다. 예를 들어, ID 노드가 인터페이스 이름에 해당하지 않으면 다음 예외가 나타납니다.
vesisormapper.xml 구성 파일에서 목록을 얻을 때는 resultmap을 사용합니다. resultMap을 사용할 때는 자신의 SQL 문 맵을 필드로 지정할 수 있습니다. 때로는 열이 많을 필요가 없기 때문에 맵핑을 구성 할 때 많은 맵을 구성 할 필요가 없거나 열이 별명이되었으므로 MyBaBean의 속성 이름이 일치하는지 여부에 관계없이 resultType = "방문자"를 직접 사용할 필요가 없습니다. 또한 <configuration> 노드에서 <settings> 속성 값을 구성하여 맵핑할지 여부를 제어하여 다음과 같이 Javabean에서 낙타 이름 지정을 맵핑할지 여부를 제어 할 수 있습니다.
<settings> <설정 이름 = "mapUnderscoretocamelcase"value = "false" /> < /settings>
맵퍼를 수정하는 다른 구성의 경우 http://mybatis.github.io/mybatis-3/configuration.html#settings에서 볼 수 있습니다.
방문자의 Mapper 클래스는 다음과 같습니다.
<mapper namepace = "david.mybatis.demo.ivisitoroperation"> <sql id = "getListsql"> visitor_id, 이름, 이메일, 상태, 방문자의 createTime </sql> <select id = "getList"resultmap = "visitorrs"<! 다음은 속성 속성입니다. 그 필드는 엔티티에서 정의하는 속성과 동일해야합니다. 이는 사례에 민감합니다. 그렇지 않으면 기본 세터는 속성에 값을 할당 할 때 해당 속성을 찾지 못합니다. 쿼리 문에 의해 반환 된 결과 집합의 이름에 해당하는 열 속성을 시도 할 수 있습니다. 예를 들어 해당 필드에 별명이 주어지면 id는 visitor_id가됩니다. 해당 열 이름은 -> <resultmap type = "visititor"id = "visitors"> <id column = "visitor_id"property = "id" /> <result column = "name" /> <result column = "email ="email ""resulate = "recult ="result column = "resulate ="statuby "" /< column = "CreateTime"Property = "CreateTime"/> </resultmap> </mapper>
여기에는 노드 <Sql> 노드가 있음을 알 수 있습니다. 이것은 다른 장소에서 재사용을 위해 공개 SQL 문 또는 필드를 추출하는 데 사용됩니다. 다른 자세한 지침은 http://mybatis.github.io/mybatis-3/sqlmap-xml.html을 참조하십시오.
나머지는 지금과 같은 작업입니다. 데모 프로그램에서 Demorun 클래스를 만들어 다양한 테스트 방법을 저장할 수 있습니다.
package david.mybatis.demo; import java.util.arrays; import java.util.list; import org.apache.ibatis.session.sqlsession; import david.mybatis.model.basicqueryargs; import david.mybatis.model.crud_enum; import david.mybatis.model.Channed; david.mybatis.model.pagenateargs; import david.mybatis.model.visitor; import david.mybatis.model.website; public class demorun {public static void testbasicquery (int id) {sqlsession session = mybatisutils.getSqlsession (); { / * * david.mybatis.demo.ivisitoroperation.basicQuery는 아래 그림의 구성에서 네임 스페이스에 해당해야합니다. mybatisutils.closesession (세션); System.out.println (방문자); } catch (예외 e) {// todo : 핸들 예외 e.printstacktrace (); }} public static void testbasicQueryByinterFaceway (int id) {sqlsession session = mybatisutils.getSqlSession (); try {ivisitoroperation voperation = session.getMapper (ivisitoroperation.class); 방문자 방문자 = Voperation.basicQuery (ID); mybatisutils.closesession (세션); System.out.println (방문자); } catch (예외 e) {// todo : 핸들 예외 e.printstacktrace (); }} /** 배치로 방문자 레코드 추가* / public static void addvisitors () {sqlsession session = mybatisutils.getSqlsession (); <visitors> 방문자 = arrays.aslist (new Visitor [] {New Visitor ( "mongodb", "[email protected]"), New Visitor ( "redis", "[email protected]"), New Visitor ( "memcached", "[email protected]"), New Visitor ( "Couchdb", "Couchdb", ""Couchdb ","New Visitor ( "Couchdb") 방문자 ( "hbase", "[email protected]"), 새로운 방문자 ( "bigtable", "[email protected]"), New Visitor ( "Hive", "[email protected]"), New Visitor ( "Mapreduce", "[email protected]"); for (방문자 방문자 : 방문자) {addvisitor (방문자, 세션); } mybatisutils.closesession (세션); mybatisutils.showmessages (crud_enum.list, visitors.size ()); } /** 방문자 정보 추가* / @SuppressWarnings ( "사용되지 않은") 개인 정적 무효 ADDVITOR (방문자 방문자, SQLSESSION 세션) {if (session == null) 세션 = myBatisutils.getSqlSession (); ivisitoroperation voperation = session.getMapper (ivisitorOperation.class); int recordCount = voperation.add (방문자); 세션 .commit (); if (session == null) mybatisutils.closesession (session); mybatisutils.showmessages (crud_enum.add, recordCount); } /** 오버로드 추가 방문자* / public static void addvvisitor (방문자 방문자) {addvisitor (방문자, null); } /** 방문자 정보 삭제* / public static void deletevisitor (int id) {sqlsession session = mybatisutils.getSqlsession (); ivisitoroperation voperation = session.getMapper (ivisitorOperation.class); int recordCount = voperation.Delete (id); 세션 .commit (); mybatisutils.closesession (세션); mybatisutils.showmessages (crud_enum.delete, recordCount); } /** 방문자 정보 업데이트* / public static void updatevisitor (int id) {sqlsession session = mybatisutils.getSqlsession (); ivisitoroperation voperation = session.getMapper (ivisitorOperation.class); 방문자 방문자 = voperation.query (id); System.out.println ( "원래 개체 :" + 방문자); 문자열 이름 = visitor.getName (); if (name.contains ( "updated"))) {visitor.setName (name.substring (0, name.indexof ( "updated"))); } else {visitor.setName (이름 + "업데이트"); } int recordCount = Voperation.update (방문자); 세션 .commit (); mybatisutils.closesession (세션); mybatisutils.showmessages (crud_enum.update, recordCount); System.out.println ( "업데이트 개체 :" + 방문자); } /** 쿼리 방문자 정보* / public static void queryvisitor (int id) {sqlsession session = mybatisutils.getSqlsession (); ivisitoroperation voperation = session.getMapper (ivisitorOperation.class); 방문자 방문자 = voperation.query (id); mybatisutils.closesession (세션); mybatisutils.showmessages (crud_enum.query, 1); System.out.println (방문자); } /** 방문자 목록 쿼리* / public static void queryvisitorlist () {sqlsession session = mybatisutils.getSqlsession (); ivisitoroperation voperation = session.getMapper (ivisitorOperation.class); 목록 <visitor> 방문자 = voperation.getList (); for (방문자 방문자 : 방문자) {System.out.println (방문자); } mybatisutils.closesession (세션); mybatisutils.showmessages (crud_enum.list, visitors.size ()); }} Demorun 클래스는 간단한 단일 테이블 크루드를 실행하고 데모가 완료됩니다.