mybatis 소개
Mybatis는 Java 기반 데이터 지속성 계층/객체 관계 매핑 (ORM) 프레임 워크 인 Ibatis에 의해 선행되었습니다.
MyBatis는 JDBC의 캡슐화로, 개발자가 드라이버 등록, 매개 변수 설정, 연결/문 생성, 구문 분석 결과 세트 등과 같은 JDBC 절차 코드를 처리하기 위해 너무 많은 노력을 기울이지 않고 SQL 자체에만 초점을 맞출 수 있도록합니다. XML/Annotation, Executes SQL 및 MAPS의 실행 결과를 기반으로 한 MyBatis 구성 명령문.
Mybatis는 맞춤형 SQL, 저장 프로 시저 및 고급 매핑을 지원하는 일류 지속성 프레임 워크입니다. MyBatis는 매개 변수의 거의 모든 JDBC 코드 및 수동 설정 및 결과 검색을 제거합니다. MyBatis는 구성 및 맵 프리미티브, 맵 인터페이스 및 Java Pojos (일반 Old Java 객체)에 데이터베이스 레코드에 간단한 XML 또는 주석을 사용할 수 있습니다.
Mybatis 프로젝트 주소/온라인 문서.
먼저 Mybatis를 만나십시오
mybatis를 사용하면 pom.xml에 다음의 종속성을 추가해야합니다.
<code> <ceptency> <groupId> org.mybatis </groupId> <artifactid> mybatis </artifactid> <bersion> 3.3.0 </version> </depectency> <prectionency> <groupid> mysql </groupid> <atifactid> mysql-connector-java </artifactid> 5.1.36 </version>
선택하다
mybatis/mybatis-configuration.xml 구성
MyBatis의 글로벌 구성 파일로서 MyBatis의 실행 환경 정보 (예 : 데이터 소스/맵퍼 파일 등)로 구성됩니다.
<code> <code> <!-{cke_protected} {c}%3c!%2d%2d%3fxml%20version%3d%221.0%22%20 encoding%3d%22utf-8%22%20%3f%2d%2d%3e-> <nenturalments defaults = "<환경 id = "Development"> <!-{CKE_Protected} {C}%3C!%2d%2d%20%E9%85%8d%e7%BD%AEJDBC%e4%BA%8B%E5%8A%A1%e7%AE%A1%e7%90%86%2d%2D%3E- / / TransActionManger 유형 = "jdbc"> <!-{cke_protected} {c}%3c!%2d%2d%20%e9%85%8d%e7%bd%ae%e6%95%b0%e6%8d ae%e6%ba%90%2d%2d%3e-> <datasource ""pooleded "" "" "" "" "". value = "com.mysql.jdbc.driver"> <property name = "url"value = "jdbc : mysql : // host : port/db? aricationencoding = utf-8"> <property name = "username"> <property name = "password" value = "password"> </property> </property> </property> </dataSource> </transactionManager> </환경> </환경> <!-{c ke_protected} {c}%3c!%2d%2d%20%e5%8a%a0%a0%e8%bd%bdmapper%e6%98%a0%e5%b0%84%e6%96%87%e4%bb%b6%20%2d%2d%3e-> <mapper resource = "mybatis/mapper/userdao.xml"> </mapper> </mappers> </configuration> </code>userdao 쓰기 (Mapper지도)
MyBatis의 가장 핵심 부분은 데이터베이스를 작동하는 SQL 문으로 구성됩니다.
<code> <code> <code> <!-{cke_protected} {c}%3c!%2d%2d%3fxml%20version%3d%221.0%22%20 encoding%3d%22utf-8%22%20%3f%2d%2d%3e-> <mapper namespace = "namespper weerbyid" "namespper namespace" parametertype = "java.lang.integer"resulttype = "com.fq.domain.user"> select * ind = #{select> <select> <select id = "selectUserByName"ParameterType = "java.lang.string"resultType = "com.fq.domain.user"> select * select * '%$ {value}%'; </select> </mapper> </code> </code> 속성 설명
SQL 문을 분리하는 데 사용되는 네임 스페이스 네임 스페이스
ParameterType SQL 입력 매핑 유형을 정의하고 MyBatis는 입력 객체에서 OGNL을 통해 매개 변수를 얻어 SQL 문으로 전달합니다.
resultType SQL 출력 매핑 유형을 정의합니다. MyBatis는 SQL 쿼리 결과의 레코드 행을 resultType에서 지정된 유형에 매핑합니다.
Mapper 매핑 파일 이름에는 userdao.xml/usermapper.xml/user.xml 및 기타 양식이 포함됩니다. 그것들은 일반적으로 mybatis-configuration.xml과 동일한 수준의 Mapper 디렉토리에 저장됩니다. 주요 기능은 SQL 문과 매핑 사이의 관계를 정의하는 것이므로 일반적으로 Mapper 매핑 파일이라고합니다.
PO 클래스를 정의하십시오
PO 클래스의 주요 기능은 SQL (입력/출력) 매핑이며 일반적으로 데이터베이스 테이블에 해당합니다.
<code> <code> <code> <code>/*** @author jifang*@since 15/12/31 2:27 pm.*/public class user {private Integer ID; private string 이름; private String password; public user ()} public user (정수 ID, 문자열 이름, 문자열 암호) {this.id = id. {return id;} public void setId (정수 ID) {this.id = id;} public string getName () {return name;} public void setName (문자열 이름) {this.name = name;} public void setpassword (} public void setpassword (string password) {this.password = retep; "user {" + "id =" + id + ", name = '" + name +'/'' + ", password = ' + password +'/'' + '}';}} </code> </code> </code> </code>userdao (Java Object)
SQLSESSION을 받고 SQL 문을 실행하고 매핑 결과를 얻으십시오.
<code> <code> <code> <code> <code> <code> <code>/*** @author jifang*@Since 16/2/24 6:15 PM.*/public class userDao {private sqlsessionActory factory; @be-forepublic void setup () throws ioexception {string resource {mybatis/mybatis/mybatis/mybatis/mybatis/mybatis/mybatis/mybatis/mybatis/mybatis/mybatis/mybatis/mybatis/mybatis/mybatis/mybatis/mybatis/mybatis/mybatis. sqlsessionfactoryBuilder (). build (resources.getResourceAsStream (resource));}@testpublic void selectUserByid () {try (sqlsession session = factory.opensession ()) {user user = session.selectone ( "namespace.selectuserByid", 1); system.out.out.out.out.out.out.out.out.out.out.println (user); selectUserByName () {try (sqlsession session = factory.opensession ()) {list <user> user = session.selectlist ( "namespace.selectuserByName", "Student"); for (user user : user) {system.out.println (user);}}}}} </user> </code> </code> </code> </code> </code>끼워 넣다
매퍼
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <insert id = "insertUser"parameterType = "com.fq.domain.user"> user (이름, 비밀번호) 값 ( #{name}, #{password}); </insert> </code> </code> </code>userdao
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> @testpublic void InsertUser () {try (sqlsession session = factory.opensession ()) {user user = new user (); user.setname ( "new_name1"); user.setpassword ( "new_password"); session.insert ( "namespace.insertuser", session.commit ();}} </code> </code> </code> </code> </code> 자동 증가 기본 키에 의해 반환됩니다
Mapper 파일을 수정하고 추가하면 MySQL의 자동 증가 기본 키 (즉, 데이터가 삽입 될 때 생성 된 ID)를 반환 할 수 있습니다.
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <insertuser "parametertype ="com.fq.domain.user "> <selectkey keyproperty ="id "order ="resulttype = "java.lang.lang last_insert_id (); </selectkey> user에 삽입 (이름, 암호) 값 ( #{name}, #{password}); </insert> </code> </code> </code> </code> </code>userdao
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> @testpublic void InsertUser () {try (sqlsession session = factory.opensession ()) {system.out.println (session); new user (new_name, ", "new_password"); session.insert ( "namespace.insertuser", user); // autoincrement 1 차 키 세션 (); system.out.println (user.getid ());}} </code> </code> </code> </code> </code> </code> </code>이 기능은 usegeneratedkeys/keyproperty 속성을 통해 완료 될 수 있습니다. 자세한 내용은 mybatis 문서를 참조하십시오.
업데이트
매퍼
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <Update id = "updateUserById"ParameterType = "com.fq.domain.user"> 업데이트 사용자 세트 이름 = #{{password} id = 여기서 id = #{id}; </update> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>userdao
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> @TestPublic void updateUserById () {try (sqlsession session = factory.opensession (true)) "feiqing", "iCy5YQXZB1UWSWCVLSNLCA ==");}} </code> </code> </code> </code> </code> </code> </code> </code>삭제
매퍼
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <delete id = "deleteuserbyid"parametertype = "java.lang.integer"> id = #{id}; </delete> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>userdao
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> @TestPublic void deleteuserByid () {try (sqlsession session = factory.opensession (true)). {session.delete ( "namespace.deleteuserByid", 51615);}} </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>요약
#{}/$ {}
#{} : 자리 표시자를 나타내고, 준비된 자리 표시 자에게 값을 설정하는 것을 구현하고 ( #{}는 자리 표시자를 나타냅니다. #{}는 간단한 유형 또는 PO 속성 값을받을 수 있습니다. ParameterType가 단일 간단한 유형 값을 전송하면 #{}는 #{} 곱슬 브레이스에서 값 또는 기타 이름 일 수 있습니다. $ {}는 SQL 문자열을 스플 라이스하는 데 사용될 수 있습니다. PARAMETERTYPE 컨텐츠는 JDBC 유형 변환없이 SQL로 스 플라이싱 할 수 있습니다. $ {}는 간단한 유형 또는 PO 속성 값을받는 데 사용될 수 있습니다. ParameterType가 단일 간단한 유형 값을 전송하면 $ {}는 $ {} 곱슬 브레이스에서만 가치를 평가할 수 있습니다.
$ {}은 SQL 주입을 방해 할 수 없지만 때로는 $ {}가 매우 편리합니다 (예 : 정렬, 열 이름을 매개 변수를 통해 SQL로 전달해야하며 $ {column}의 순서가 사용되며 #{}는이 기능을 구현하는 데 사용될 수 없습니다 (세부 사항에 대한 준비된 계산서에서 JDBC 기본 토론 참조).
sqlsession
데이터베이스를 작동하는 방법을 제공합니다 (예 : Selectone/SelectList). 그러나 SQLSESSION은 스레드 inSecure이므로 사용하기에 로컬 변수로 정의하는 것이 가장 좋습니다.
mybatis의 장점 (JDBC와 비교)
SQL은 Java 코드로 작성되어 유지 관리가 어렵습니다. Mybatis는 Mapper에 SQL을 작성하고 XML은 Java 코드와 분리됩니다. 매개 변수를 SQL 문으로 전달하는 것은 복잡합니다 (예 : 조건이 다른 SQL, SQL 데이터 유형은 Java와 다릅니다). Mybatis는 ParameterType를 통해 Java 객체를 자동으로 SQL 문에 매핑합니다. 결과 세트 구문 분석은 번거 롭습니다 (SQL 변경은 코드 변경으로 이어지고 SQL 데이터 유형은 Java와 다릅니다). MyBatis는 SQL 실행 결과를 resultType를 통해 자동으로 Java 객체로 매핑합니다.
첨부 파일 : POM.XML에 로그 시스템 구현 (logback/log4J)을 추가하여 프로그램을 디버깅 할 때 로그 정보가 인쇄되어 오류를 쉽게 확인할 수 있도록하는 것이 가장 좋습니다. 예를 들어 로그백을 가져옵니다.
pom.xml
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <pelection> <groupid> ch.qos.logb ACK </groupId> logback-classic </artifactid> <버전> 1.1.2 </version> </dectientency> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>
logback.xml
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <configuration> <property name = "logroot"value "/data/logs"> <속성 이름 = ""패턴 "" " value = " %d {hh : mm : ss.sss} [ %스레드] %-5level %logger {0} - %msg %n"> <appender name = "stdout"> <comoder> <패턴> $ {pattern} </pattern> </encoder> </appender> <appender 이름 = "file"> <RollingPolicy> <FilenAmePattern> $ {logroot}/Common-Server.%D {yyyy-mm-dd} .log </filenamepattern> <maxhistory> 7 </maxhistory> </rollingpolicy> <coder> {pattern} </pattern} </applender> level = "Debug"> <Appender-Ref ref = "stdout"> <Appender-Ref ref = "file"> </appender-Ref> </appender-Ref> </appender-ref> </root> </property> </property> </property> </configuration> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>MyBatis 로그에 대한 다른 자세한 내용은 MyBatis 문서 로그 섹션을 참조하십시오.
DAO 개발
Mybatis, Original DAO 개발 및 Mapper 매핑 DAO 개발을 사용하여 DAO를 개발하는 두 가지 방법이 있습니다.
원래 DAO 개발 원래 DAO 개발은 개발자가 ID를 기반으로 사용자 정보 쿼리와 같은 DAO 인터페이스 및 DAO 구현을 작성해야합니다.
Mapper (이전과 동일)
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <코드> <code> <code> <code> <code> <code> <code> <code> <Code> <Select ID = "SelectUserById"ParameterType = "Java.lang.lang.lang.lang.lang.lang. resulttype = "com.fq.domain.user"> select * select * id = #{id}; id = #{id}; </select> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> userdao 인터페이스
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code>/*** @author jifang* @user uniesta 16/222/22/22/22/22/22/22/22/22/22/22/22/22/22/22/22/22/22/22/22/22/ SelectUserById (정수 ID)는 예외를 발생시킵니다.} </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>
userdao 구현
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> public class us userdaoimpl invempl invempl invemply vistion“code> <code> <code> <code> <code> <code> <code> <code> Factory; public userdaoimpl (sqlsessionfactory factory) {this.factory = factory;}@atriadepublic user selectUserByid (Integer ID)는 예외 {sqlsession session = factory.opensession (); user user = session.selectone ( "namespace.seleamectuserByid", id); close (); Close (); 사용자;}} </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> 고객
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> vublic classe> <@tet voir OriginalClient ()는 예외를 {userdao dao = new userDaoimpl (새로운 sqlsessionfactoryBuilder () 빌드 (classLoader.getSystemResourceasStream ( "myBatis/myBatis-configuration.xml")); user user = dao.selectuserByid (1); system.out.println (user);}} </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>원래 DAO 개발 문제 :
1) DAO 구현 방법 본문에는 많은 절차 코드가 있습니다.
2) SQLSESSION 메소드 (SELECT/Insert/Update)를 호출하려면 코드 유지 보수에 도움이되지 않는 하드 코딩 된 명령문의 ID를 지정해야합니다.
매퍼 매핑 개발
Mapper 매핑 개발 방법은 DAO 인터페이스 만 작성하면 필요하며 MyBatis는 Mapper 파일의 인터페이스 정의 및 SQL 문을 기반으로 인터페이스 구현을 동적으로 만듭니다.
매퍼
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <!-? xml version = "1.0"encoding = "utf-8"? namespace = "com.fq.mybatis.userdao"> <select id = "selectUserById"parameterType = "java.lang.integer"resultType = "com.fq.domain.user"> select * id = id = #{id}; </select> </mapper> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>참고 : 현재 네임 스페이스는 userDAO 인터페이스의 자격을 갖춘 이름과 동일해야합니다.
userdao 인터페이스는 이전과 동일하지만 userdaoimpl 클라이언트는 더 이상 사용되지 않습니다.
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> @Author Jifange* @since* @since pm.*/public class myBatisClient {private sqlsession session; private sqlsessionfactory factory; @beforepublic void setup () {factory = new sqlsessionfactoryBuilder (). build (classLoader.getSystemPeSourceAsStream ( "myBatis/myBatis-configuration.xml")) factory.opensession ();}@testpublic void mappperclient ()는 예외를 {userdao dao = session.getmapper (userdao.class); user user = dao.selectuserbyid (1); system.out.out.out.oug. {session.close ();}} </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>매퍼 매핑 개발 방법은 다음 사양을 따라야합니다.
Mapper 파일의 네임 스페이스는 DAO 인터페이스의 자격을 갖춘 이름과 동일합니다. Mapper 파일의 문의 ID는 DAO 인터페이스의 메소드 이름과 동일합니다. Mapper 파일에있는 문의 ParameterType/resultType는 DAO 메소드의 매개 변수/resultType와 동일합니다.
맵퍼 매핑
Mapper 매핑 파일 (예 : UserDao.xml)의 주요 기능은 SQL 문 (각 SQL은 문입니다)을 정의하는 것입니다.
Mybatis는 공식적으로 Mapper 매핑 방법을 사용하여 DAO를 개발할 것을 권장하므로 향후 원래 DAO의 개발에 대해 너무 많이 소개하지 않을 것입니다.
입력 매핑
여러 공식 매개 변수
간단한 유형을 통과하는 이전의 예는 사용되었으므로 여기에서 반복하지 않을 것입니다. 여러 공식 매개 변수를 전달 해야하는 경우 ParameterType 매개 변수가 더 이상 필요하지 않습니다.
매퍼
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <Code> <Code> <Uppanding ID "> id id =" "Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> #{1}, password = #{2} where id = #{0}; </update> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>userdao
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <code> <code> UpdateUserById (정수 ID, 문자열 이름, 문자열 암호) 예외; </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>
들어오는 PO
myBatis는 OGNL 표현식을 사용하여 객체 속성 값을 구문 분석합니다.
매퍼
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <Select id = "selectUserByNamePassword"ParameterType = "com.fq.domain.user"resulttype = "com.fq.domain.user"> select *from userwhere name = #{name} 및 password = #{password}; </select> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>userdao
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> selectUserByNamePassword (사용자 사용자)가 던져집니다 예외; </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>
매퍼
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <co de> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <select id = "selectUserBymap"ParameterType = "java.util.map"resulttype = "com.fq.domain.user"> select *from userwhere name = #{name} 및 password = #{password}; </select> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>#{} 곱슬 괄호에서지도의 해당 키.
userdao
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> <Code> selectUserBymap (map <string, object = ""> map) 던지기 예외; </string,> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>
출력 매핑
출력 간단한 유형
매퍼
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <co de> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <select id = "selectUserCount"ParameterType = "java.lang.string"resulttype = "java.lang.integer"> 사용자 어디에서나 사용자 이름에서 count (*)를 선택하십시오 '%$ {value}%'; </select> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code > </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>userdao
<code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <code> <Code> <Code> <Code> <code> intustount 예외; </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code> </code>
간단한 유형을 반환하려면 쿼리 결과에 한 행의 레코드 만 가지야하며 첫 번째 필드의 값이 마침내 출력 유형으로 변환되어야합니다.
출력 PO 객체/목록
이전에 두 가지 유형의 출력이 시연되었습니다 (SelectUserById/SelectUserByName은 당시 원래 DAO 개발 방법을 사용했지만 Mapper 정의 양식은 비슷했습니다).
단일 PO 객체를 출력 할 때 맵퍼에 정의 된 결과 유형은 맵퍼에 정의 된 결과 유형과 동일합니다. SQL 쿼리 결과는 단일 데이터로 보장되어야하며 내부적으로 SelectOne 메소드를 사용하여 호출됩니다. 출력 PO 목록은 쿼리 결과가 다중 일 수 있음을 나타내며 SelectList 메소드를 사용하여 내부적으로 호출되며 인터페이스 리턴 값은 목록/세트로 호스팅 할 수 있습니다.
출력 맵
출력 PO 객체는 대신 필드 이름을 키로, 필드 값을 값으로 사용하는 대신 맵 출력을 사용하는 데 사용할 수 있습니다.
매퍼
<code> <select id = "selectUserLikEname"resultType = "java.util.map"> select *from userwhere 이름 '%$ {value}%'; </select> </code>userdao
<code> <code> list <map <string, object = "">> selectuserlikename (문자열 이름)은 예외를 던집니다. </map <string,> </code> </code>
결과 맵
resultType는 쿼리 결과를 PO에 매핑 할 수 있지만 전제는 PO 속성 이름과 SQL 필드 이름이 동일해야한다는 것입니다. 일관성이없는 경우 해당 매핑은 resultmap을 통해 이루어질 수 있습니다.
매퍼
<code> <code> <code> <resultmap id = "usermap"type = "com.fq.domain.user"> <id column = "user_id"속성 = "user_id"property = "id"> <result column = "user_name"property = "name"> <result column = "user_password"property = "password"> </result> </resultmap> <select id = "selectusbyname" parametertype = "java.lang.string"resultmap = "usermap"> selectId user_id, name user_name, password user_passwordfrom userwhere name = #{name}; </select> </code> </code> </code>userdao 인터페이스는 이전과 동일합니다.