MyBatis는 일반 SQL 쿼리, 저장 프로 시저 및 고급 매핑을 지원하는 우수한 지속성 계층 프레임 워크입니다. MyBatis는 거의 모든 JDBC 코드 및 매개 변수의 수동 설정을 제거하고 결과 세트를 검색합니다. MyBatis는 단순한 XML 또는 주석을 사용하여 구성 및 원래 매핑을 위해 인터페이스 및 Java의 Pojos (일반 Old Java Objects)를 데이터베이스의 레코드로 맵핑합니다.
Mybatis는 Apache의 오픈 소스 프로젝트입니다. 2010 년 에이 프로젝트는 Apache Software Foundation에서 Google 코드로 이전되었으며 Mybatis로 이름이 바뀌 었습니다.
2013 년 11 월 Github로 마이그레이션, Mybatis의 Github 주소 : https://github.com/mybatis/mybatis-3.
Ibatis라는 용어는 "Internet"과 "Abatis"의 조합에서 유래하며 Java 기반 지속성 계층 프레임 워크입니다. IBATIS는 SQL 맵 및 데이터 액세스 개체 (DAO)를 포함한 지속성 계층 프레임 워크를 제공합니다.
각 mybatis 응용 프로그램은 주로 sqlsessionfactory 인스턴스를 사용하며 sqlsessionfactory 인스턴스는 sqlsessionfactorybuilder를 통해 얻을 수 있습니다. sqlsessionfactorybuilder는 XML 구성 파일 또는 사전 정의 된 구성 클래스의 인스턴스에서 얻을 수 있습니다.
1. 발전기를 사용하여 DAO 레이어, 모델 레이어 및 맵퍼 레이어를 자동으로 생성하십시오.
mybatis 생성기 다운로드 주소 : http://www.mybatis.org/generator/
Mybatis Generator 중국어 소개 : http://generator.sturgeon.mopaas.com/
다음은 Mybatis-Generator-Core-1.3.2.2.Jar 플러그인을 사용하여 JDBC 데이터베이스 연결 패키지를 추가하여 지속성 계층 DAO 패키지, 모델 패키지 및 매퍼 패키지를 자동으로 내 보냅니다.
사용해야하는 Java 패키지는 다음과 같습니다.
Mybatis-Generator-Core-1.3.2.jar,
MySQL-Connector-Java-5.1.34.jar,
OJDBC14-10.2.0.1.0.jar,
sqljdbc4-4.0.jar.
구성 파일 : generator.xml
<? xml version = "1.0"encoding = "utf-8"?> <! doctype generatorconfiguration public "-// mybatis.org//dtd mybatis generator configuration 1.0 // en" "http://mybatis.org/dtd/mybatis-conerator-config_1_0.dtd"> 구성 속성 파일은 구성 파일에 가변 EL 표현식을 소개하는 데 사용됩니다-> <!-CMD에서 실행하면 ClassPath를 찾을 수 없으므로 URL에 전체 경로를 작성해야합니다. resource-> <!-<properties url = "file : /// d :/workspaces/mybatisgen/bin/generatorconfig.properties"/>-> <!-데이터베이스 드라이버 패키지 위치-> <!-SQL Server Data Driver 패키지-> <classPathentry 위치 = "d :/javaproject/generator/ <j.jdc4- 4.. Oracle Data Driver 패키지-> <!-<classPathentry location = "d :/java/m2/repository/com/oracle/ojdbc14/10.2.0.1.0/ojdbc14-10.2.0.1.0.jar"/>-> <!-MySQL 데이터 패키지-> <! 위치 = "d :/javaproject/generator/mysql-connector-java-5.1.34.jar"/>-> <!-여기에 mybatis3-> <!-id : id : 구성해야합니다. 이 맥락의 고유 식별자. 이 값은 일부 오류 메시지에 사용됩니다. DefaultModelType : 생성 모델 유형 정책을 정의하는 데 사용됩니다. 1. 기본 기본 정책, 각 표에 대한 모델 클래스를 생성합니다. 2.FLAT : 모든 테이블에서 모델 클래스를 생성합니다. 이것은 상속 클래스 간의 적절한 관계입니다. TargetRuntime :이 속성은 런타임 대상에서 생성 된 코드를 지정하는 데 사용됩니다. 1. MyBatis3 기본값은 MyBatis 버전 3.0 이상과 호환되는 객체를 생성하고 JSE 5.0 이상 (예 : Java 모델 및 Mapper 인터페이스)을 생성합니다 (예 : Java 모델 및 Mapper 인터페이스). "예제"메소드는이 생성 된 객체의 조항이있는 거의 무한한 역학을 지원합니다. 또한이 생성기가 장착 된 Java 객체는 매개 변수화 된 유형 및 주석을 포함한 많은 JSE 5.0 기능을 지원합니다. 2.ibatis2java2 3.ibatis2java5-> <context id = "mysqltables"targetruntime = "mybatis3"defaultModelType = "컨디셔널"> <!-<plugin type = "org.mybatis.generator.plugins.equalshashcodeplugin"-<!- <! 이 속성은 생성 된 코드에 주석이 포함되어 있는지 여부를 지정하는 데 사용됩니다. true로 설정되면 주석이 생성되지 않습니다. -> <commentGenerator> <property name = "suppressAllComments"value = "true" /> < /commentGenerator> <!-데이터베이스 링크 URL, 사용자 이름, 비밀번호-> <!-mysql 데이터베이스 링크 URL, 사용자 이름, 암호->-<jdbcConnection driver class = "com.mysql.jdbc.driver" ConnectionUrl = "jdbc : mysql : //127.0.0.1 : 3310/test"userId = "test"password = "1234"> </jdbcconnection>-> <!-Oracle Database Link URL, Username, <jdbcconnection driverclass = "oracle.jdbc.driver. ConnectionUrl = "jdbc : oracle : thin :@127.0.0.1 : 1521 : orcl"userId = "test"password = "1234"> </jdbcConnection>-> <!-SQL Server 데이터베이스 링크 URL, 사용자 이름, 암호-> <JDBCConnection. DriverClass = "com.microsoft.sqlserver.jdbc.sqlserverdriver"ConnectionUrl = "jdbc : sqlserver : //127.0.0.1 : 1433; databasename = test"userid = "test"password = "1234"> </jdbcconnection> <! key = "jdbc.url"> jdbc : h2 : tcp : // localhost/test> <eptry key = "jdbc.driver"> org.h2. driver>-> <!-sqlserver2000 <Entry key = "jdbc.url"> jdbc : microsoft : sqlserver : // localhost : 1433; databaseName = [databaseName = [database] </enterd> <eptry key = "jdbc.driver"> com.microsoft.jdbc.sqlserver.sqlserverdriver </entert>-sqlserver2005 key = "jdbc.url"> jdbc : sqlserver : //192.168.0.98 : 1433; databaseName = [database] </enther> <eptry key = "jdbc.driver"> com.microsoft.sqlserver.jdbc.sqlserver <! <! <Entry Key = "jdbc.url"> jdbc : jtds : sqlserver : //192.168.0.102 : 1433/[database]; tds = 8.0; lastupdatecount = true <alty key = "jdbc.driver"> net.sourceforge.jtds.jdbc.driver. PostgreSQL <Entry Key = "jdbc.url"> jdbc : postgresql : // localhost/[database] </enterd> <eptry key = "jdbc.driver"> org.postgresql.driver </enterd>-> <!-sybase <Entry key = "jdbc.url"> jdbc : sybase : tds : localhost : 5007/[database] </enterd> <Entry Key = "jdbc.driver"> com.sybase.jdbc.sybdriver </enterd>-> <!-db2 <Entry key = "jdbc.url"> jdbc : db2 : // localhost : 5000/[database] </enterd> <eptry key = "jdbc.driver"> com.ibm.db2.jdbc.app.db2driver </enterd>-> <!-hsqldb <Entry key = "jdbc.url"> jdbc : hsqldb : mem : mem : generatordb </enterd </enterd </enterd 키 = "jdbc.driver"> org.hsqldb.jdbcdriver </enterd>-> <!-d key = "jdbc.driver"> org.apache.derby.jdbc.clientDriver </Entry>-> <!-Java Type Parser 선택적 구성-> <!-<javatyperesolver type = ""> 유형 특성 : 사용자가 프로모니드 Java 유형 파서를 지정하는 데 사용할 수 있습니다. 이 클래스는 인터페이스 org.mybatis.generator.api를 구현해야합니다. javatyperesolver, 공개 기본 생성자가 있어야합니다. 이 속성은 기본적으로 특수 값을 수용 할 수 있으며 기본 구현이 사용됩니다 (동일한 효과는 유형을 지정하지 않습니다). 이 태그가 지원하는 속성 : ForceBigDecimals : 기본값은 BigDecimal 강제가 모든 소수 및 숫자 필드를 나타내도록 강제할지 여부입니다. • 스케일이 크고 길이가 18보다 큰 경우 BigDecimal 유형이 사용됩니다. • 길이가 10 ~ 18 인 경우 Java 유형 파서는 java.lang.long을 대체합니다. • 길이가 5 ~ 9 인 경우 Java 유형 파서는 java.lang.integer로 교체됩니다. • 길이가 5 미만인 경우 Java Type Parser는 Java.lang.short로 교체됩니다. -> <javatyperesolver> <property name = "ForceBigDecimals"value = "false" /> < /javatyperesolver> <!-vo 객체 생성-> <!-<javamodelgenerator> 요소는 Java 모델에 의해 생성 된 속성을 정의하는 데 사용됩니다. Java 모델 생성기는 기본 키 클래스, 레코드 클래스 및 쿼리 샘플 클래스와 일치하는 테이블을 작성합니다. 이 요소는 필수 자식 요소 <CENTEXT> 요소입니다. 지원되는 속성 : Constructor -Based :이 속성은 MyBatis 생성기가 클래스 생성자를 생성할지 여부를 선택하는 데 사용되며, 이는 값 클래스에서 각 필드를 수락하는 클래스 생성자를 생성합니다. 한편, SQL 결과 맵은 "setter"대신 생성자를 사용하여 각 필드에 내장됩니다. 이 속성은 MyBatis3에만 적용되며 iBatis2에 대해 무시됩니다. 기본값은 False입니다. 불변 : 불변 의이 속성은 MyBatis 생성기가 불변의 모델 클래스를 생성할지 여부를 선택하는 데 사용됩니다. 이는 클래스에 "세터"메소드가없고 생성자가 클래스의 각 필드의 값을 수락 함을 의미합니다. 기본값은 False입니다. TRIMSTRINGS :이 속성은 MyBatis 생성기가 데이터베이스에서 반환 된 빈 공간을 트림하기 위해 코드를 추가하는지 여부를 선택하는 데 사용됩니다. 데이터베이스가 Varchar 필드 대신 문자 필드에 데이터를 저장하는 경우 유용합니다. Mybatis 생성기는 문자 필드를 자르는 코드를 삽입합니다. 기본값은 False입니다. -> <!-엔티티 클래스의 패키지 이름과 위치를 생성합니다. 여기에서 생성 된 엔티티 클래스를 패키지 com.ouc.model-> <javamodelgenerator targetpackage = "com.ouc.model"targetProject = "d :/javaproject/generator/src"> <property name = "enablesubpackages"value = "true"/> <trimstrings "-<true"/> </javamodel " 쿼리에 대한 매핑 객체 생성-> <!-생성 된 SQL 맵 파일의 패키지 이름과 위치를 생성합니다. 여기에서 생성 된 SQL 맵 파일을 패키지 com.ouc.mapping-> <sqlmapgenerator targetpackage = "com.ouc.mapping"targetproject = "d :/javaproject/generator/src"> <property name = "enablesubpackages"value = "true"/> </sqlmapgenerator> <!-클래스 파일 및 구성 파일의 성능. <!- <javaclientgenerator> 요소는 Java 클라이언트 코드 생성기를 정의하는 데 사용되는 속성입니다. Java 클라이언트 생성기는 생성 된 Java 모델 및 XML 매핑 파일을 쉽게 사용할 수 있도록 Java 인터페이스 및 클래스를 설정하는 데 사용됩니다. IBATIS2 대상 환경의 경우, 이러한 생성 된 객체는 DAO 인터페이스 및 구현 클래스의 형태를 채택합니다. MyBatis의 경우 생성 된 객체는 매퍼 인터페이스를 사용합니다. 이 요소는 선택적 자식 요소입니다. 이 요소를 지정하지 않으면 Mybatis Generator (MBG)는 Java 클라이언트 인터페이스 및 클래스를 생성하지 않습니다. 여기서 유형 속성 : TargetRuntime이 MyBatis3 XmlMapper 인 경우 : 생성 된 객체는 Java 인터페이스를 MyBatis 3.X 맵퍼 인프라와 인터페이스합니다. 인터페이스는 생성 된 XML 맵퍼 파일에 따라 다릅니다. 일반적 으로이 xmlmapper가 사용됩니다. -> <!-DAO의 패키지 이름과 위치를 생성합니다. 여기에서 생성 된 DAO 클래스는 com.ouc.dao 패키지 아래에 배치됩니다.> <javaclientgenerator type = "xmlmapper"targetpackage = "com.ouc.dao"targetproject = "d :/javaproject/generator/src"> <property name = "value"/Javaclengator> <! 데이터베이스에서 테이블을 선택합니다. 선택한 테이블은 각 테이블에 대해 다음 객체가 생성됩니다. • MyBatis/Ibatis • 형식화 된 SQL 매핑 파일 • 다음을 포함하여 "모델"테이블을 형성하는 클래스 세트 • 테이블의 기본 키 (테이블에 기본 키가있는 경우). • 테이블의 필드는 기본 키가 아닌 Blob 필드가 아닌 일치합니다. 이 클래스는 기본 키를 확장합니다. • 블로브 필드를 어떤 테이블에 보유하는 클래스 (있는 경우). 이 클래스는 테이블 구성에 따라 첫 두 클래스를 확장합니다. • 클래스가 다른 "예제"메소드 (selectByExample, deleteByExample)에서 클로시가있는 동적을 생성하는 데 사용되는 클래스. • (선택 사항) DAO 인터페이스 및 클래스 테이블 이름 : 지정된 테이블의 이름을 구성해야합니다. DomainObjectName : 생성 된 Javabean 객체의 기본 이름입니다. 지정되지 않으면 MBG는 테이블 이름에 따라 자동으로 생성됩니다. 이 이름 (여기에 지정되었는지 또는 자동으로 생성되는지)는 도메인 클래스 이름과 DAO 클래스의 이름으로 사용됩니다. enableInsert : 삽입 문을 생성할지 여부. 기본값은 true enableseLectByPrimaryKey : 기본 키를 통해 선택 문을 생성할지 여부입니다. 그러한 설정이 있는지 여부에 관계없이 테이블에 기본 키가 없으면 생성되지 않습니다. enableUpdateByPrimaryKey : 기본 키를 통해 업데이트 문을 생성할지 여부. 테이블에 기본 키가없는 경우 속성이 설정되어 있는지 여부에 관계없이 문은 생성되지 않습니다. enabledetetebyprimarykey : 기본 키를 통해 삭제 명령문을 생성할지 여부. 테이블에 기본 키가 없으면이 속성이 설정 되더라도 문은 생성되지 않습니다. enabledeTeTeByExample : 예제 객체를 통해 삭제 명령문을 생성할지 여부. 이 선언은 런타임에 생성 된 다양한 동적 삭제를 만듭니다. enableCountByExample : 예제 객체를 통해 행 수를 계산하기 위해 명령문을 생성할지 여부. 이 진술은 테이블의 행 수와 일치하는 예제를 반환합니다. enableupdatebyexample : 예제 객체를 통해 업데이트 문을 생성할지 여부. 이 진술은 테이블에서 일치하는 레코드를 업데이트합니다. SelectByPrimaryKeyQueryID :이 값은 선택 목록에 추가 되어이 표의 기본 키로 선언을 선택합니다. 런타임 추적 도구에서 DBA의 쿼리를 식별하는 데 사용할 수 있습니다. 사용해야하는 경우 각 쿼리에 대해 MBG를 생성하기 위해 고유 ID를 지정해야합니다. SelectByexampleQuption QueryId :이 값은 선택 목록에 추가 되어이 표의 예제 " '<aluate> as queryId"에 의해 명령문을 선택합니다. 런타임 추적 도구에서 DBA의 쿼리를 식별하는 데 사용할 수 있습니다. 사용해야하는 경우 각 쿼리에 대해 MBG를 생성하기 위해 고유 ID를 지정해야합니다. EnableseLectByExample : 예제를 통해 선택 문을 생성해야합니까? 이 선언은 런타임에 생성 된 다양한 동적 쿼리를 만듭니다. ModelType :이 속성은이 테이블에 대해이 작업을 수행하려면 기본 모델 유형을 무시하는 데 사용됩니다. 지정되지 않으면 MBG는 컨텍스트 기본 모델 유형에 따라 도메인 객체를 생성합니다. 이 모델 유형은 MBG 도메인 클래스가 생성되는 방법을 정의합니다. 일부 모델 유형 MBG는 각 테이블에 대해 단일 도메인 클래스를 생성하고 다른 모델은 테이블의 구조에 따라 다른 클래스 MBG를 생성 할 수 있습니다. ESCAPEWILDCARDS : 와일드 카드 제외. 이것은 검색 열에서 SQL 와일드 카드 ( '_'및 ' %')의 스키마와 테이블 이름을 모두 피해야 함을 의미합니다. 스키마 나 테이블에 SQL 와일드 카드가 포함되어있는 경우 (예 : 테이블 이름이 my_table 인 경우 일부 드라이버는 밑줄 문자를 피해야 함)를 요구하는 일부 드라이버입니다. -> <!-해당 테이블을 생성하려면 (Tablename 및 DomainObjectName을 변경하려면)-> <table tableName = "V_SUPPLEBERTER"domainObjectName = "vsUpplyUser"enableCountByexample = "false"enableUpDateByExample = "false"enabledetebyexample = "false"table = "false" "enabliceLectByexamplick ="false " tableName = "WJ_GATELIST"DomainObjectName = "wjgatelist"enableCountByexample = "false"enableUpdateByexample = "false"enabledeteletebyexample = "false"enableseLectByexample = "false"selectByexampleQueryId = "false"/> </context> </generatorconfiguration>
CMD 명령 줄을 열고 구성 파일이있는 파일로 이동하여 다음 세대 명령문을 실행하십시오.
Java -jar mybatis -generator -core -1.3.2.jar -configfile generator.xml -werwrite
명령이 실행되면 DAO 패키지, 모델 패키지 및 Mapper 패키지 파일이 해당 경로에서 생성되는 것을 알 수 있습니다.
2. MyBatis 프레임 워크 통합
1) MyBatis는 매개 변수 구성을 사용합니다 : SQLMAPCONFIG.XML.
CACHE CONFIGURATION (캐시) : 캐시 닝 : 글로벌 스위치 : 기본값은 참입니다. False로 구성되면 캐시를 지원하기 위해 다른 Mapper XML 파일을 구성하는 것은 쓸모가 없습니다.
② 지연 로딩 :
LazyloadingEnabled : True 사용 게으른 하중을 사용하고, 허위가 게으른로드를 비활성화하고, 기본값은 사실입니다. 비활성화 된 경우 모든 관련 객체가 즉시로드됩니다.
Attressivelazyloading : True가 활성화 될 때, 게으른 하중이 활성화 될 때 물체의 게으른 물체 속성에 액세스하면이 객체의 모든 게으른 물체 속성이 완전히로드됩니다. 거짓. 지연을로드 할 때는 객체 속성을 필요에 따라로드합니다 (즉, 물체의 게으른 물체 속성에 액세스하고 객체의 다른 게으른 물체 속성이로드되지 않습니다). 기본값은 사실입니다.
multipleresultsetSenabled : 단일 명령문이 여러 데이터 세트를 반환하도록 허용하고 허용하지 않습니다 (드라이버 요구 사항에 따라 다름). 기본값은 사실입니다.
④ USECOLUMNLABEL : 열 이름 대신 열 레이블을 사용하십시오. 드라이브는 다른 접근 방식을 가지고 있습니다. 드라이브 문서를 참조 하거나이 두 가지 옵션으로 테스트하십시오.
⑤ usegeneratedkeys : JDBC가 기본 키를 생성 할 수 있습니다. 드라이브 지원이 필요합니다. True로 설정되면이 설정은 생성 된 기본 키를 강제로 강제로, 일부 드라이브는 양립 할 수 없지만 여전히 실행할 수 있습니다.
AutomAppingBehavior : MyBatis가 데이터 테이블 필드 및 객체의 속성을 자동으로 매핑하는지 여부와 방법을 지정합니다. 부분은 중첩 결과없이 자동으로 간단하게 매핑됩니다. 전체는 모든 복잡한 결과를 자동으로 매핑합니다.
defaultexecutoType : 집행자를 구성하고 설정하고 간단한 집행자가 다른 진술을 실행합니다. 재사용 집행자는 준비된 진술서를 재사용 할 수 있으며 배치 집행자는 진술을 반복적으로 실행하고 업데이트를 수행 할 수 있습니다.
defaultStatementTimeout : 데이터베이스가 타임 아웃에 응답 할 때까지 드라이브가 얼마나 오래 기다리는지를 결정하기 위해 시간 제한을 설정합니다.
완전한 sqlmapconfig.xml 구성 파일은 다음과 같습니다.
<? xml version = "1.0"encoding = "utf-8"?> <! doctype configurationpublic "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <congeend> < "value" />> <seting name = "lazyloadingEnabled"value = "true" /> <seting name = "multiplerestsetSenabled"value = "true"value = "true" /> <설정 이름 = "multiplerestsetSenabled"value = "true" /> <setting name = "usecolumnlabel"value = "true" /> <setting name = "usegeratedKeyys ="false ""autond " /> value = "partial" /> <setting name = "defaultexecutople"value = "simple" /> <!-간단한 재사용 배치-> <!-<seting name = "defaultexecutople"value = "batch" />-> <seting name = "defaultStatementTimeout"value = "" /> 이름 = "mapUnderscoretocamelcase"value = "false" /> <setting name = "localCachescope"value = "session" /> <!-<설정 이름 = "jdbctypefornull"value = "기타" />-> <seting name = "jdbctypefornull"value = "null" /> <setting name = "lazyltriggertmeTggertmeTggertmeTgger" value = "Equals, clone, hashcode, tostring"/> </settings> <tontealiases> <!-module-> <faultealias alias = "user"type = "com.ouc.mkhl.platform.authority.model.user"/> <faltealias alias = "roble" type = "com.ouc.mkhl.platform.authority.Model.Role"/> <faiLias alias = "장비"유형 = "com.ouc.mkhl.platform.basedata.model.equipment"/> <invalias alias = "Factory" type = "com.ouc.mkhl.platform.basedata.model.factory"/> </inflealiases> <typehandlers> <typehandler handler = "com.ouc.openplatform.dao.mybatis.serializableTypeHandler"/> </typeHandlers> </configuration>
직렬화 특수 값 처리 : SerializableTypeHandler
package com.ouc.openplatform.dao.mybatis; import java.io.serializable; import java.sql.callablestatement; import java.sql.preparedstatement; import java.sql.resultset; import java.sql.sqlexception; aporg.bateceception org.apache.ibatis.type.jdbctype;/*** @author wuping*/public class serializabletype handler는 Basetypehandler <serializable> {@overridepublic void setnonnullparameter (preperationstatement ps, int i, serializable sqlex) jdbctype jdbctype를 확장합니다. {ps.setObject (i, parameter);}@atrivePublic Serializable getNullablerEsult (resultSet rs, String ColumnName)는 sqlexception {return (Serializable) rs.getObject (columnName);}@attormublic serializable getNullableresult (resultet rs, inf columnex) {sqlexmence rest {}@ (Serializable) rs.getObject (columnIndex);}@atriadepublic serializable getNullableresult (callableStatement cs, int columnIndex)는 sqlexception {return (serializable) cs.getObject (columnIndex);}} 던지기 2) 결과 맵 결과 세트 :
mybatis에서 매핑을 선택하면 resulttype 또는 resultmap과 함께 리턴 유형을 사용할 수 있습니다. resulttype는 리턴 유형을 직접 나타내는 반면 resultMap은 외부 결과 맵에 대한 참조이지만 resultType 및 resultMap은 동시에 존재할 수 없습니다. MyBatis가 매핑을 쿼리하는 경우, 실제로 각 속성 쿼리는 해당 맵에 배치됩니다. 여기서 키는 속성 이름이고 값은 해당 값입니다. 제공된 반환 유형 속성이 resultType 일 때 MyBatis는 맵에서 키 값 쌍을 취해 resultType에 의해 지정된 객체의 해당 속성에 할당됩니다. 실제로 MyBatis의 각 쿼리 맵의 리턴 유형은 결과 맵입니다. 그러나 우리가 제공하는 리턴 유형 속성이 resultType 일 때 myBatis는 resultType에 의해 지정된 객체의 속성에 해당 값을 자동으로 할당합니다. 우리가 제공하는 반환 유형이 resultMap 일 때, 맵은 도메인 모델을 잘 나타내지 못하기 때문에 해당 객체로 더 많은 변환해야합니다. 이는 종종 복잡한 쿼리에서 매우 유용합니다.
예 : userbaseresultmap
<resultMap id = "userBaserESultMap"유형 = "user"> <id column = "id"property = "id"jdbctype = "integer" /> <result column = "username"property = "username"jdbctype = "varchar" /> <result colment = "property"property = "property ="jdbctype = "renge" "<renge" "jdbctype jdbctype = "varchar" /> <result column = "truename"property = "truename"jdbctype = "varchar" /> <result column = "sex"property = "sex"jdbctype = "varchar" /> <result column = "age"propert = "age"jdbctype = "intger" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" " jdbctype = "varchar" /> < /resultmap>
모델 클래스 : 사용자
package com.ouc.mkhl.platform.authority.model; import java.io.serializable; // 사용자 정보 공개 클래스 사용자는 시리얼이즈 가능 {private static final long serialversionuid = 1098321123L; 개인 정수 ID; // 사용자 ID 개인 문자열 사용자 이름; // 사용자 이름 개인 문자열 비밀번호; // 사용자 이름 개인 문자열 이메일; // 전자 메일 개인 문자열 truename; // 실명 개인 문자열 섹스; // 젠더 개인 정수 시대; // 연령 개인 문자열 전화; // 휴대 전화 공개 정수 getId () {return id; } public void setId (정수 ID) {this.id = id; } public String getUserName () {return username; } public void setusername (String username) {this.username = username == null? null : username.trim (); } public String getPassword () {return password; } public void setpassword (문자열 암호) {this.password = password == null? null : password.trim (); } public String getEmail () {반환 이메일; } public void setEmail (문자열 이메일) {this.email = email == null? null : email.trim (); } public String getTrueName () {return truename; } public void settrueName (String truename) {this.truename = truename == null? null : truename.trim (); } public String getSex () {return sex; } public void setSex (문자열 섹스) {this.sex = sex == null? null : sex.trim (); } public integer getage () {return age; } public void setage (정수 시대) {this.age = age; } public String getTelephone () {반환 전화; } public void settelephone (문자열 전화) {this.telephone = 전화 == null? NULL : 전화 .trim (); }} 3) 추가, 삭제, 수정 및 확인 :
(1) 쿼리 선택 :
① ID :이 모드의 고유 식별자는 다른 진술로 참조 할 수 있습니다.
parameterType : 매개 변수의 전체 클래스 이름 또는 별칭 이이 문으로 전달되었습니다.
resultType : 명령문은 값 유형의 전체 클래스 이름 또는 별칭을 반환합니다. 컬렉션 인 경우 컬렉션 자체의 클래스 이름이 아닌 컬렉션의 항목의 전체 클래스 이름 또는 별칭이 여기에 채워집니다. (resulttype 및 resultmap을 함께 사용할 수 없습니다)
④ resultmap : 참조 된 외부 결과 맵 이름. 결과 세트 매핑은 mybatis에서 가장 강력한 기능입니다. 많은 복잡한 매핑을 쉽게 해결할 수 있습니다. (resulttype 및 resultmap을 함께 사용할 수 없습니다)
flushCache : 진정으로 설정되면 문을 호출 할 때마다 캐시가 지워집니다. SELECT 문은 기본적으로 False로 설정됩니다.
⑥ USECACHE : True로 설정되면 문의 결과 세트가 캐시됩니다. SELECT 문은 기본적으로 False로 설정됩니다.
⑦ 시간 초과 : 예외를 던지기 전에 드라이브가 응답을 기다리는 최대 시간을 설정하십시오. 기본값은 값을 설정하지 않는 것이며 드라이브는 자체를 결정합니다.
예 : 모든 사용자 정보 쿼리 : selectusers
<select id = "selectUsers"resultMap = "userBaserESultMap"> id, 사용자 이름, user </select> </select>를 선택하십시오
(2) 삽입 삽입 : SaveUser
여기서 데이터베이스 테이블은 기본 키를 사용하여 자체를 늘리고 기본 키는 ID입니다.
① FetchSize : 값을 설정 한 후 결과 세트 수가이 값에 도달 한 후에 드라이브가 반환되는 것이 흥분됩니다. 기본값은 설정되지 않으며 드라이브 자체에 의해 결정됩니다.
statertype : 문, 준비된 명령문, CallableStatement. 준비된 진술, 부름 가능한 진술.
③ usegeneratedKeys : JDBC의 getGeneratedKeys 메소드를 사용하여 데이터베이스 자체에서 생성 된 기본 키를 얻습니다 (MySQL, SQLServer 및 기타 관계형 데이터베이스에는 자동 생성 될 필드가 있습니다).
keyproperty : mybatis에 의해 getGeneratedKeys로 설정 될 키에 의해 반환 된 값을 식별하거나 삽입 문에 SelectKey 하위 요소를 사용합니다.
<insert id = "saveuser"parametertype = "user"> user에 삽입 (사용자 이름, 비밀번호, 이메일, truename, 섹스, 나이, 전화) 값 ( #{username, jdbctype = varchar}, #{password, jdbctype = varchar}, #{email, jdbctype = varchar}, #{truename, jdbctype = varchar}, #{sex, jdbctype = varchar}, #{age, jdbctype = integer}, #{전화, jdbctype = varchar}) </insert> (3) 업데이트 업데이트 : 동적 업데이트 SQL : UpdateUser
<update id = "updateUser"parameterType = "user"> update us <set> <if test = "username! = null"> username = #{username, jdbctype = varchar}, </if> < "password! = null"> password = #{password, jdbctype = varchar}, </if> <null! #{email, jdbctype = varchar}, </if> <if test = "truename! = null"> truename = #{truename, jdbctype = varchar}, </if> <test = "sex! = null"> sex = #{sex, jdbctype = varchar}, </if test! #{age, jdbctype = integer}, </if> <if test = "전화! = null"> 전화 = #{전화, jdbctype = varchar}, </if> </set> id = #{id, jdbctype = integer} </update> (4) 삭제 삭제 : deleteuser
<delete id = "deleteuser"parametertype = "integer"> ushere id = #{id, jdbctype = integer} </delete>에서 삭제합니다 (5) SQL : SQL 요소는 다른 명령문이 호출 할 재사용 가능한 SQL 문 세그먼트를 정의하는 데 사용됩니다.
<sql id = "userBaseColumnList"> 사용자 이름, 비밀번호, 이메일, 전화, 전화 </sql> <select id = "getUsers"resultMap = "userBaserESultMap"> refid = "userBaseColumnList"/> in User </select>
(6) 매개 변수 : 매개 변수 : MyBatis는 기본 데이터 유형과 Java의 복잡한 데이터 유형을 사용할 수 있습니다.
기본 데이터 유형, 문자열, int, 날짜 등
기본 데이터 유형을 사용하면 하나의 매개 변수 만 제공 할 수 있으므로 Java Entity 클래스 또는 맵 유형을 매개 변수 유형으로 사용해야합니다. 속성은 #{}를 통해 직접 얻을 수 있습니다.
① 기본 데이터 유형 매개 변수 : 문자열
<select id = "getUserByName"resultType = "user"parameterType = "string"> select id, username, userwhere username = #{username, jdbctype = varchar} </select> 자바 코드 :
공개 사용자 getUserByName (문자열 이름); // 사용자 이름을 기반으로 사용자 정보를 얻습니다
Java Java Entity 유형 매개 변수 : 사용자
<insert id = "saveuser"parametertype = "user"> user에 삽입 (사용자 이름, 비밀번호, 이메일, truename, 섹스, 나이, 전화) 값 ( #{username, jdbctype = varchar}, #{password, jdbctype = varchar}, #{email, jdbctype = varchar}, #{truename, jdbctype = varchar}, #{sex, jdbctype = varchar}, #{age, jdbctype = integer}, #{전화, jdbctype = varchar}) </insert> 자바 코드 :
Public Int SaveUser (사용자); // 사용자 정보 삽입
MAP 매개 변수 : MAP <String, Object> RecordMap
<select id = "selectchildgrouptotalnum ="integer "> count (*)에서 count (*)에서 count (*)에서 <trim prefix ="where "prefixoverrides ="및 | 또는 "> in in <foreach collection ="idstr "item ="ids "open ="( "deplicator =", ")"> #{ids}} name! = '' "> 및 이름은 concat (concat ( '%', #{name})), '%') </if> <test ="description! = null 및 description! = '' "> 및 설명과 같은 설명 (concat ( '%', #{descrip}), '%') </if> <if test! = null 및 type! ="> 및 type = = = = = = = = = = = 1 " #{type, jdbctype = integer} </if> <test = "category! = null and categor! = -1"> 및 category = #{category, jdbctype = intger} </if> </trim> </select> 자바 코드 :
// 하위 그룹에서 총 레코드 수를 가져옵니다. public int selectChildGrouptotalNum (map <string, object> recordmap); map <string, object> recordmap = new Hashmap <string, object> (); recordmap.put ( "idstr", group.getchildgroupids (). split ( ",")); recordmap.put ( "name", name); recordmap.put ( "description", description ", recordmap.put ("type ", -1); recordtotmap.put (", -1), -1). groupdao.selectchildgrouptotalnum (레코드 맵); ④ 다중 매개 변수 :
방법 1 : 순서대로 매개 변수를 전달합니다.
<!-매개 변수 이름을 기반으로 한 쿼리 매개 변수-> <select id = "selectsensornobysensorname"resulttype = "integer"usecache = "false"flushcache = "true"> sensorconfig에서 sensorno sensorno를 sensorconfig에서 sensorno로 선택하십시오.
자바 코드 :
// 매개 변수 query idpublic int selectsensornobysensorname (String sensorname, int testunitno, String labcode);
방법 2 : 인터페이스 매개 변수에 @Param 주석을 추가하십시오.
<select id = "selectByUserNameAndVCode"resultMap = "userBaserEsultMap"> use id <trim prefix = "id id trim prefix ="extion <trim prefix = "where"prefixoverrides = "및"> <username! = "username! = '"> 및 username (concat) ('%'),'%') test = "supplierno! = null 및 supplierno! = ''"> 및 concat (concat ( '%', #{supplierno}), '%') </if> = 'test'</trim> 제한 #{startIndex}, #{pagesize} </select> 자바 코드 :
// 사용자 이름 및 V 코드를 기반으로 한 사용자 정보 쿼리 공개 목록 <user> selectByUserNameAndVCode (@param ( "username") 문자열 사용자 이름,@param ( "supplierno") String SupplierNo,@param ( "startIndex") int startIndex, @param ( "pagesize") int pagesize);
4) 동적 SQL 문 :
SelectKey 태그, IF 태그, IF + WHERE, IF + SET의 업데이트 문, IF + TRIM을 대체하는 IF/SET 태그, TRIM SETES SET, FOREAC 태그를 선택합니다. 동적 SQL 문은 mybatis의 가장 유연한 부분이며, 그것들을 잘 사용하는 것이 매우 편리합니다.
예 : SelectTotalNumbyAccountType
<select id = "selectTotalNumbyAccountType"recomtype = "integer"> user <trim prefix = "에서 count (*)를 선택하십시오. NULL 및 USERNAME! = '' "> 및 CONCAT (COCAT ( '%', #{username}), '%') </if> <if test ="supplierno! = null and supplyno! = '' "> 및 supplierno와 같은 concat ( '%', #{supplierno}), '%") <%및'%') <%')와 같은 공급자 truename! = '' "> 및 truename like concat (concat ( '%', #{truename}), '%') </if> 및 AccountType = #{AccountType} </trim> </select>위는 편집자가 소개 한 Mybatis 영구 계층 프레임 워크에 대한 사용 지식의 요약입니다. 나는 그것이 당신에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!