1. resultmap
SQL 매핑 XML 파일은 모든 SQL 문이 배치되는 곳입니다. 일반적으로 해당 인터페이스 클래스의 경로로 정의되는 작업 공간을 정의해야합니다. SQL 문 맵핑 파일을 작성한 후에는 MyBatis 구성 파일 매퍼 태그에 참조해야합니다.
<mapper resource = "com/leming/manager/data/mappers/usermapper.xml"/> <mapper resource = "com/leming/data/mappers/mappers/windentmapper.xml"/> <mapper resource = "com/liming/manager/mappers/classmapper.xml"/>> mapper resource = "com/leming/data/mapper/acll" /> < /mappers>
Java 인터페이스가 XML 파일의 상대 경로에 있으면 MyBatis 구성 파일의 맵퍼에서 선언 할 수 없습니다.
SQL은 XML 파일의 일부 기본 요소를 매핑합니다.
(1). 캐시는 주어진 패턴에 대한 캐시를 구성합니다 (2). Cache-Ref는 다른 패턴 (3)의 캐시를 나타냅니다. resultmap 이것은 가장 복잡하지만 강력한 요소로 결과 세트 (4)에서 객체를로드하는 방법을 설명합니다. SQL 다른 진술 (5)에 의해 다중화 될 수있는 SQL 블록. 맵 삽입 문 (6)을 삽입하십시오. 업데이트 맵 업데이트 문 (7). MAP DELEETE 문 (8)을 삭제합니다. 선택 - 맵 Select 문
1.1 결과 맵
결과 맵은 mybatis에서 가장 중요하고 강력한 요소입니다. JDBC가있는 호출 결과 세트보다 코드의 90%를 절약하거나 JDBC가 지원하지 않는 많은 작업을 수행 할 수 있습니다. 실제로, 상호 작용과 유사한 매핑과 동등한 복잡한 명령문을 작성하려면 수천 줄의 코드가 필요할 수 있습니다. 결과 맵의 목적은 불필요한 결과 매핑이없는 간단한 진술입니다. 더 복잡한 진술은 관계를 설명하기 위해 절대적으로 필요한 진술 이외의 다른 말을 요구하지 않습니다.
결과 맵 속성 : 유형은 Java Entity 클래스입니다. ID는이 결과 맵의 식별자입니다.
해당 결과 맵 매핑을 설정할 수 있습니다.
(1). 생성자는 결과를 인스턴스화 클래스 생성자에게 반영하는 데 사용됩니다.
a) IDARG ID 매개 변수; 글로벌 호출을 용이하게하기 위해 결과 세트를 ID로 표시하십시오.
b) 생성자에 대한 평균 반사
(2). ID ID 결과, 결과 세트를 ID로 표시하여 글로벌 호출을 용이하게합니다.
(3). 결과는 정상적인 결과를 Javabean 속성에 반영합니다
(4). 협회 복잡한 유형의 조합; 다중 결과 합성의 유형
a) 중첩 결과 매핑 몇 가지 결과 맵 중첩 된 연관성 자체, 또한 서로 참조 할 수 있습니다.
(5). 복잡한 유형의 컬렉션
(6). 중첩 결과 매핑 컬렉션은 다른 사람도 참조 할 수 있습니다.
(7). 판별기는 결과 값을 사용하여 사용할 결과 맵을 결정합니다.
a) 일부 기본 값의 결과 맵의 사례 사례 사례
나. 중첩 결과 매핑 케이스 시나리오는 그 자체로 결과 맵이므로 동일한 요소 중 일부를 포함하거나 외부 결과 맵을 참조 할 수도 있습니다.
1.1.1 ID, 결과
ID와 결과는 가장 간단한 매핑이며 ID는 기본 키 매핑입니다. 다른 기본 데이터베이스 테이블 필드에서 엔티티 클래스 속성으로의 결과 맵.
가장 간단한 예 :
<resultmap type = "leming.student.manager.data.model.studentity"id = "StudentResultMap"> <id property = "studentId"column = "student_id"javatype = "String"jdbctype = "varchar"/> <rendat property = "studentname"column = "student_name"jdbctype = "jdbctype ="jdbctey <result property = "studentsex"column = "student_sex"javatype = "int"jdbctype = "integer"/<result property = "studentbirthday"column = "student_birthday"javatype = "date"jdbctype = "date"/> <result property = "studentphoto"column = "student_photo"javatype ""jdbctype = "date"/> jdbctype = "blob"typehandler = "org.apache.ibatis.type.blobtypehandler" /> < /resultmap>
ID 구성 및 결과 명령문 속성의 세부 사항 :
재산 | 설명하다 | |
재산 | Javabean에 매핑되어야하는 속성 이름. | |
열 | 데이터 테이블의 열 이름 또는 레이블 별칭. | |
Javatype | 전체 클래스 이름 또는 유형 별칭. Javabean과 일치하면 Mybatis는 일반적으로 스스로 감지합니다. 그런 다음 해시 맵에 매핑하는 경우 Javatype에서 달성 할 목적을 지정해야합니다. | |
JDBCTYPE | 데이터 테이블에서 지원하는 유형 목록. 이 속성은 삽입, 업데이트 또는 삭제시 빈 허용 열에만 유용합니다. JDBC는 이것을 요구하지만 mybatis는 그렇지 않습니다. JDBC를 직접 인코딩하고 비어있는 열이있는 경우이 항목을 지정하려고합니다. | |
타입 핸들러 | 이 속성을 사용하여 유형 프로세서를 무시하십시오. 이 값은 전체 클래스 이름 또는 유형 별칭 일 수 있습니다. |
<resultmap type = "studententity"id = "StudentResultMap"> <constructor> <idarg javatype = "string"column = "student_id"/> <arg javatype = "string"column = "Student_name"/> <arg javatype = "String"column = "student_sex"/> <arg javatype = "date" "student_birthday" "" ""budin javatype =. </resultmap>
물론, 우리는 학생 엔티티 클래스의 생성자 방법을 정의해야합니다.
Public Studentity (String StudentId, String StudentName, String StudentSex, Date StudentBirthday) {this.studentId = StudentId; this.studentName = StudentName; this.studentSex = StudentSex; this.studentbirthday = Studentbirthday; } 1.1.3 협회
Union 요소는 "일대일"관계를 다루는 데 사용됩니다. 매핑 된 Java Entity 클래스의 속성과 속성의 Javatype (일반적으로 Mybatis는 직접 인식합니다)를 지정해야합니다. 해당 데이터베이스 테이블의 열 이름입니다. 재정의하려면 결과 값을 반환하려면 TypeHandler를 지정해야합니다.
다른 상황에서는 Mybatis에게 노조를로드하는 방법을 알려야합니다. mybatis는 두 가지 방법으로로드 할 수 있습니다.
(1). 선택 : 다른 매핑 SQL 문을 실행하여 Java Entity 유형을 반환합니다. 더 유연합니다.
(2). 결과 맵 : 중첩 결과 맵을 사용하여 조인을 통해 쿼리 결과 세트를 처리하고 Java 엔티티 유형에 매핑합니다.
예를 들어, 수업은 수업 교사에 해당합니다.
먼저, 수업에서 수업 교사의 속성을 정의하십시오.
개인 교사 교사;
1.1.3.1 SELEC를 사용하여 Union을 구현하십시오
예 : 클래스 엔티티 카테고리에는 클래스 교사의 속성이 있습니다. 공동 노력을 통해 클래스 엔티티를 얻을 때, 클래스 교사 엔티티는 동시에 매핑됩니다.
이는 ID에 따라 교사 쿼리를 위해 TeacherMapper.xml 파일에 정의 된 SELECT 문을 직접 재사용 할 수 있습니다. 또한 서면 SQL 문을 수정할 필요가 없으며 ResultMap을 직접 수정하면됩니다.
classmapper.xml 파일의 일부 :
<resultmap type = "classentity"id = "classResultMap"> <id 속성 = "classId"column = "class_id" /> <결과 속성 = "className"councm = "class_name" /> <result property = "classyear"열 = "class_year" /> <Association "column ="el id = "getClassById"ParameterType = "String"resultMap = "classResultMap"> select * from class_tbl ct where ct.class_id = #{classId}; </선택>TeacherMapper.xml 파일의 일부 :
<resultmap type = "Teacherentity"id = "TeacherResultMap"> <id property = "el 열 = "work_date"/> <result property = "workdate"column = "work_date"/> <result property = "professional"column = "professional"/</resultmap> <select id = "getTeacher"parameterType = "String"resultmap = "TheacerEresultMap"> select * from el
1.1.3.2 Union을 달성하기 위해 ResultMap을 사용하십시오
위와 동일한 기능은 클래스를 쿼리하고 수업 교사를 쿼리하는 것입니다. 협회에 결과 맵 (교사의 XML 파일에 정의)을 추가하고 새 SQL을 작성하고 (클래스 테이블 왼쪽 교사 테이블 쿼리)를 작성하고 교사의 선택이 필요하지 않습니다.
classmapper.xml 파일의 내용을 수정하십시오.
<resultmap type = "classentity"id = "classResultMap"> <id 속성 = "classId"column = "class_id" /> <결과 속성 = "className"councm = "class_name" /> <result property = "classyear"열 = "class_year" /> <Association "column ="el id = "getClassAndTeacher"ParameterType = "String"resultMap = "classResultMap"> select * from class_tbl ct left joct on el </선택>
TeacherResultMap의 경우 TeacherMapper.xml 파일의 위의 내용을 참조하십시오.
1.1.4 컬렉션
집계 요소는 "일대일"관계를 다루는 데 사용됩니다. 매핑 Java 엔티티 클래스의 속성, 속성의 Javatype (일반적으로 ArrayList)의 속성을 지정해야합니다. 객체 목록 (Java Entity Class)의 객체 유형; 해당 데이터베이스 테이블의 열 이름;
다른 상황에서는 Mybatis에게 집계를로드하는 방법을 알려야합니다. mybatis는 두 가지 방법으로로드 할 수 있습니다.
(1). 선택 : 다른 매핑 SQL 문을 실행하여 Java Entity 유형을 반환합니다. 더 유연합니다.
(2). 결과 맵 : 중첩 결과 맵을 사용하여 조인을 통해 쿼리 결과 세트를 처리하고 Java 엔티티 유형에 매핑합니다.
예를 들어, 수업에는 여러 학생이 있습니다.
먼저 수업에서 학생 목록 속성을 정의합니다.
개인 목록 <TudlyEntity> 학생 목록;
1.1.4.1 선택을 사용하여 집계를 구현하십시오
사용법은 Union과 매우 유사합니다. 차이점은 이것이 일대일이므로 일반적으로 매핑 된 목록이 나열됩니다. 따라서 Javatype을 ArrayList로 정의해야합니다. 목록의 객체 유형을 정의해야하며 설정 해야하는 선택의 명령문 이름을 정의해야합니다 (여기서 쿼리 학생의 선택 명령문 조건은 외국 키 클래스 id이어야 함).
classmapper.xml 파일의 일부 :
<resultmap type = "classentity"id = "classResultMap"> <id property = "classId"column = "class_id" /> <결과 속성 = "className"councm = "class_name" /> <result property = "classyear"열 = "class_year" /> <Association Property = "Teachine_id"select = "getTeacher" column = "class_id"javatype = "arraylist"oftype = "studententity"select = "getStudentByClassId"/> </resultMap> <select id = "getClassById"parameterType = "String"resultMap = "classResultMap"> select * from class_tbl ct where {classid}}; </선택>StudentMapper.xml 파일의 일부 :
<!-Java 속성, 데이터베이스 테이블 필드 간의 매핑 정의-> <resultmap type = "studententity"id = "StudentResultMap"> <id property = "studentId"column = "Student_id" /> <result property = "studentname"열 = "Student" /> <result propertion = "student_sex" "student_sex"<result property = "student_sex". column = "student_birthday" /> < /resultmap> <!-클래스 ID를 기반으로 한 학생 목록 쿼리-> <select id = "getStudentByClassId"parameterType = "string"resultmap = "StudentResultMap"> <include refid = "selectStudentAll" /> 여기서 st.class_id = #{classid} < /select> 1.1.4.2 결과 맵을 사용하여 집계를 달성하십시오
resultmap을 사용하면 SQL을 다시 작성하고 왼쪽 학생 테이블을 작성해야합니다.
<resultmap type = "classentity"id = "classResultMap"> <id 속성 = "classId"column = "class_id" /<result property = "className"councm = "class_name" /> <result property = "classyear"열 = "class_year" /> <Association Property = "Teachly"column = "el column = "class_id"javatype = "arraylist"oftype = "studententity"resultmap = "StudentResultMap"/> </resultMap> <select id = "getClassAndTeacherstudent"ParameterType = "string"resultMap = "classResultMap"> select * from class_tbl st on ct. ct.teacher_id = tt.teacher_id on ct.class_id = #{classId}; </선택>
TeacherResultMap의 경우 TeacherMapper.xml 파일의 위의 내용을 참조하십시오. StudentMapper.xml 파일의 위 섹션에서 StudentResultMap을 참조하십시오.
1.1. 판별 자 요소는 클래스의 상속 계층을 포함 하여이 상황을 처리하도록 설계되었습니다. 판별자는 Java의 스위치 문처럼 동작하기 때문에 이해하기 쉽습니다.
정의 판별자는 열 및 javatype 속성을 지정합니다. 열은 MyBatis가 비교 값을 찾는 곳입니다. Javatype는 동등한 테스트를 보장하는 데 사용되는 올바른 유형입니다 (문자열은 많은 경우에 유용하지만).
다음 예는 ClassID가 20000001 일 때 ClassID 속성이 매핑된다는 것입니다.
<resultmap type = "leming.student.manager.data.model.studentity"id = "resultMap_studententity_Discriminator"> <id property = "studentId"column = "Student_ID"javatype = "String"jdbctype = "varchar"/> <result property = "studentname"student_name ""javatype = ""javatype " jdbctype = "varchar"/> <result property = "studentsex"column = "winder_sex"javatype = "int"jdbctype = "integer"/> <result property = "studentbirthday"column = "student_birthday"javatype = "date"jdbctype = "date" "student_" "student_" "student_" "student_" javatype = "byte []"jdbctype = "blob"typehandler = "org.apache.ibatis.type.blobtypehandler" /> <result property = "placeid"column = "place_id"javatype = "string"jdbctype = "varchar"/> <theigriminator column = "class_id"javatype = "sting" jdbctype = "varchar"> <case value = "200000001"resulttype = "leming.student.manager.data.model.studententity"> <result property = "classId"column = "class_id"javatype = "string"jdbctype = "varchar"/case> </gentiminator>
2. 추가, 삭제, 수정 및 확인, 매개 변수 및 캐시를 추가하십시오
2.1 선택
선택 요소는 매우 간단합니다. 예를 들어:
<!-id에 따라 학생을 쿼리하십시오-> <select id = "getStudent"parametertype = "string"resultmap = "StudentResultMap"> select St.student_id, St.student_name, St.student_sex, St.student_birthday, student_tbl stec에서 st.student_id = </select} </select}.
이 진술은 'getstudent, 문자열 매개 변수를 가지고 있으며 Studentity 유형의 객체를 반환합니다.
매개 변수 식별은 다음과 같습니다. #{windentId}.
명령문 속성 구성 세부 정보 :
| 재산 | 설명하다 | 가치를 얻으십시오 | 기본 |
| ID | 이 모드에서 고유 식별자는 다른 문장에서 참조 할 수 있습니다. | ||
| ParameterType | 이 문으로 전달 된 매개 변수의 전체 클래스 이름 또는 별칭 | ||
| 결과 유형 | 문은 값 유형의 전체 클래스 이름 또는 별칭을 반환합니다. 컬렉션 인 경우 컬렉션 자체의 클래스 이름이 아닌 컬렉션의 항목의 전체 클래스 이름 또는 별칭이 여기에 채워집니다. (resulttype 및 resultmap을 함께 사용할 수 없습니다) | ||
| 결과 맵 | 참조 된 외부 결과 맵 이름. 결과 세트 매핑은 mybatis에서 가장 강력한 기능입니다. 많은 복잡한 매핑을 쉽게 해결할 수 있습니다. (resulttype 및 resultmap을 함께 사용할 수 없습니다) | ||
| FlushCache | true로 설정되면 문을 호출 할 때마다 캐시가 지워집니다. SELECT 문은 기본적으로 False로 설정됩니다 | 참 | 거짓 | 거짓 |
| Usecache | true로 설정되면 문의 결과 세트가 캐시됩니다. 선택 문은 기본적으로 false로 설정됩니다 | false false 시간 초과는 예외를 던지기 전에 드라이브가 응답을 기다리는 최대 시간을 설정합니다. 기본값은 가치가 없으며 드라이브는 스스로 결정합니다. | 참 | 거짓 | 거짓 |
| 시간 초과 | 예외를 던지기 전에 드라이브가 응답을 기다리는 최대 시간을 설정하십시오. 기본값은 값없이 설정되어야하며 드라이브 자체가 결정됩니다. | 긍정적 인 정수 | 설정되지 않았습니다 |
| 페치 크기 | 값을 설정 한 후 결과 세트 수가이 값에 도달 한 후 드라이브가 반환하기가 흥분됩니다. 기본값이 설정되지 않았으며 드라이브는 스스로 결정됩니다. | 긍정적 인 정수 | 추진 결정 |
| StateGype StateGype | 진술, 준비된 진술, 부름 성명서. 준비된 진술, 부름 가능한 진술 | 성명 준비 호출 가능 | 준비 |
| resultSetType | Forward_only, scroll_sensitive, scroll_insensitive 전달 만, 민감한 대소 문자로 스크롤하는 스크롤 | Forward_only scroll_sensentive scroll_insensitive | 추진 결정 |
2.2 삽입
간단한 삽입 설명 :
<!-삽입 학생-> <insert id = "insertStudent"ParameterType = "Studententity"> Student_tbl에 삽입, 학생_name, student_sex, student_birthday, class_id) value ( #{studentId}, #{indullyname}, #{weenlodsex}, #{{classThday}, #{classnity}) </삽입>Insert는 데이터베이스에서 지원하는 자동 기본 키 정책을 사용하고 usegeneratedkeys = "true"를 설정 한 다음 KeyProperty를 해당 열로 설정하면 완료됩니다. 예를 들어, 위의 Studententity는 자동 생성을 사용하여 ID 열의 기본 키를 생성합니다. SelectKey 요소를 사용할 수도 있습니다. 다음 예제는 MySQL 데이터베이스 NextVal ( 'Student')을 사용자 정의 기능으로 사용하여 키를 생성합니다.
<!-학생 자동 기본 키 삽입-> <insert id = "insertStudEnaUtokey"parameterType = "studententity"> <selectKey keyProperty = "studentId"resultType = "string"order = "prever"> select selectVal ( 'student') </selectkey> instudke in in instudke instudn, student_name, student_birth, _sex) ( #{studentId}, #{elidateName}, #{windentSex}, #{StudentBirthDay}, #{classentity.classId}) </insert>| 재산 | 설명하다 | 가치를 얻으십시오 | 기본 |
| ID | 이 모드에서 고유 식별자는 다른 문장에서 참조 할 수 있습니다. | ||
| ParameterType | 이 문으로 전달 된 매개 변수의 전체 클래스 이름 또는 별칭 | ||
| FlushCache | true로 설정되면 문을 호출 할 때마다 캐시가 지워집니다. SELECT 문은 기본적으로 False로 설정됩니다 | 참 | 거짓 | 거짓 |
| Usecache | true로 설정되면 문의 결과 세트가 캐시됩니다. 선택 문은 기본적으로 false로 설정됩니다 | false false 시간 초과는 예외를 던지기 전에 드라이브가 응답을 기다리는 최대 시간을 설정합니다. 기본값은 가치가 없으며 드라이브는 스스로 결정합니다. | 참 | 거짓 | 거짓 |
| 시간 초과 | 예외를 던지기 전에 드라이브가 응답을 기다리는 최대 시간을 설정하십시오. 기본값은 값없이 설정되어야하며 드라이브 자체가 결정됩니다. | 긍정적 인 정수 | 설정되지 않았습니다 |
| 페치 크기 | 값을 설정 한 후 결과 세트 수가이 값에 도달 한 후 드라이브가 반환하기가 흥분됩니다. 기본값이 설정되지 않았으며 드라이브는 스스로 결정됩니다. | 긍정적 인 정수 | 추진 결정 |
| StateGype StateGype | 진술, 준비된 진술, 부름 성명서. 준비된 진술, 부름 가능한 진술 | 성명 준비 호출 가능 | 준비 |
| usegeneratedkeys | MyBatis에게 JDBC의 getGeneratedKeys 메소드를 사용하여 데이터베이스 (MySQL, SQLServer 등)에서 생성 된 기본 키를 얻도록 지시하십시오. 관계형 데이터베이스에는 자동으로 생성되는 필드가 있습니다). 기본값 : False | 참 | 거짓 | 거짓 |
| keyproperty | mybatis로 설정된 키에 의해 반환 할 값을 getgeneratedkeys로 설정하거나 삽입 문에 selectkey를 사용하십시오. 하위 요소. |
| 재산 | 설명하다 | 가치를 얻으십시오 |
| keyproperty | SelectKey 문에 의해 생성 된 결과에 대해 설정 해야하는 속성. | |
| 결과 유형 | 결과 유형을 생성하십시오. MyBatis는 String 및 Int 유형을 포함한 기본 데이터 유형을 사용할 수 있습니다. | |
| 주문하다 | 전후로 설정할 수 있습니다. 이전으로 설정되면 먼저 기본 키를 선택한 다음 keyproperty를 설정 한 다음 삽입 문을 실행합니다. 이후에 설정되면 먼저 삽입 문을 실행 한 다음 SelectKey 문을 실행합니다.이 명령문은 일반적으로 내부 통화 데이터베이스 (예 : Oracle)의 삽입 문에 포함 된 시퀀스 메커니즘입니다. | 전에 후에 |
| StateGype StateGype | 위와 같이, Mybatis는 진술, 준비 및 부름 성명서 양식을지지하며, 진술, 준비된 상태 및 호출 회계 응답에 해당합니다. | 성명 준비 호출 가능 |
2.3 업데이트, 삭제
간단한 업데이트 :
<!-학생 정보 업데이트-> <업데이트 ID = "updateStudent"ParameterType = "Studentitity"> 업데이트 학생 _tbl set set ehtods elogn_tbl.student_name = #{studentname}, student_tbl.student_sex = #{studentsex}, student_tbl.student_birthday = #{wichingbirday} #{classentity.classId} where where where where white_tbl.student_id = #{StudentId}; </업데이트>간단한 삭제 :
<!-삭제 학생-> <delete id = "deletestudent"parametertype = "Studentitity"> wiching where where where where where where where where where intody} </delete>
문자 속성 구성 세부 사항을 업데이트 및 삭제합니다.
| 재산 | 설명하다 | 가치를 얻으십시오 | 기본 |
| ID | 이 모드에서 고유 식별자는 다른 문장에서 참조 할 수 있습니다. | ||
| ParameterType | 이 문으로 전달 된 매개 변수의 전체 클래스 이름 또는 별칭 | ||
| FlushCache | true로 설정되면 문을 호출 할 때마다 캐시가 지워집니다. SELECT 문은 기본적으로 False로 설정됩니다 | 참 | 거짓 | 거짓 |
| Usecache | true로 설정되면 문의 결과 세트가 캐시됩니다. 선택 문은 기본적으로 false로 설정됩니다 | false false 시간 초과는 예외를 던지기 전에 드라이브가 응답을 기다리는 최대 시간을 설정합니다. 기본값은 가치가 없으며 드라이브는 스스로 결정합니다. | 참 | 거짓 | 거짓 |
| 시간 초과 | 예외를 던지기 전에 드라이브가 응답을 기다리는 최대 시간을 설정하십시오. 기본값은 값없이 설정되어야하며 드라이브 자체가 결정됩니다. | 긍정적 인 정수 | 설정되지 않았습니다 |
| 페치 크기 | 값을 설정 한 후 결과 세트 수가이 값에 도달 한 후 드라이브가 반환하기가 흥분됩니다. 기본값이 설정되지 않았으며 드라이브는 스스로 결정됩니다. | 긍정적 인 정수 | 추진 결정 |
| StateGype StateGype | 진술, 준비된 진술, 부름 성명서. 준비된 진술, 부름 가능한 진술 | 성명 준비 호출 가능 | 준비 |
<!-학생 테이블의 모든 필드를 쿼리하기위한 멀티 플렉스 SQL 문-> <sql id = "selectStudentAll"> select st.student_id, St.student_name, St.student_sex, St.student_birthday, studing_tbl st </sql>의 st.class_id
이러한 방식으로 Select 문에서 직접 참조하고 사용할 수 있습니다. 위의 select 문을 다음과 같이 변경하십시오.
<!-ID에 따라 학생을 쿼리하십시오-> <select id = "getStudent"parameterType = "String"resultMap = "StudentResultMap"> <refid = "selectStudentAll"/> 여기서 St.student_id = #{studentid} </select> 2.5 매개 변수
매개 변수는 쿼리, 수정, 삭제 조건, 삽입, 수정 된 데이터 등과 같은 위의 많은 장소에서 사용되었습니다. MyBatis가 사용할 수있는 기본 데이터 유형 및 Java의 복잡한 데이터 유형.
기본 데이터 유형, 문자열, int, 날짜 등
그러나 기본 데이터 유형을 사용하면 하나의 매개 변수 만 제공 할 수 있으므로 Java Entity 클래스 또는 맵 유형을 매개 변수 유형으로 사용해야합니다. 속성은 #{}를 통해 직접 얻을 수 있습니다.
2.5.1 기본 유형 매개 변수
입학 시간에 따라 학생 목록을 검색하십시오.
<!-입학 시간에 따라 학생 목록을 쿼리합니다 .-> <select id = "getStudentListByDate"parameterType = "date"resultMap = "studentResultMap"> select * from student_tbl st student_tbl st left on class_tbl ct on ct.class_id where {castyear}}; </선택> List <TudlyEntity> StudentList = StudentMapper.GetStudEntListByClassyear (StringUtil.parse ( "2007-9-1")); for (Studententity entityTemp : StudentList) {System.out.println (entityTemp.toString ()); } 2.5.2 Java 엔티티 유형 매개 변수
이름과 성별로 학생 목록을 검색하십시오. 엔티티 클래스를 매개 변수로 사용합니다.
<!-이름과 같은 쿼리 학생 목록, = 성별, 매개 변수 엔티티 유형-> <select id = "getStudEntListwhowsEnentity"parameterType = "winderentity"resultMap = "StudentResultMap"> select * from student_tbl st where St.Student_name (concat ( '%', #{studentname}) 및 '%'), '%'). #{StudentSex} </select> 학생 엔티티 = 신입생 (); Entity.setStudentName ( "li"); Entity.SetStudentSex ( "Male"); 목록 <TudlyEntity> StudentList = StudentMapper.getStudEntListHowsHowsEntity (Entity); for (Studententity entityTemp : StudentList) {System.out.println (entityTemp.toString ()); } 2.5.3map 매개 변수
이름과 성별로 학생 목록을 검색하십시오. 매개 변수로 맵을 사용하십시오.
<!-쿼리 학생 목록, = 성별, 매개 변수 맵 유형-> <select id = "getStudentListWheremap"ParameterType = "map"resultMap = "windentResultMap"> select * from student_tbl st where St.student_sex = #{sex} 및 st.student_sex = {sex} </select> map <string, string> map = new Hashmap <String, String> (); map.put ( "섹스", "여성"); map.put ( "이름", "li"); 목록 <TudlyEntity> StudentList = StudentMapper.GetStudEntListWheremap (MAP); for (Studententity entityTemp : StudentList) {System.out.println (entityTemp.toString ()); } 2.5.4 다중 파라미터 구현
여러 매개 변수를 전달하려면 인터페이스의 매개 변수에 @param 주석을 추가해야합니다. 예를 들어 :
인터페이스 쓰기 :
공개 목록 <TudlyEntity> getStudentListwhereParam (@param (value = "name") 문자열 이름, @param (value = "sex") 문자열 섹스, @param (value = "생일") 날짜 생일, @param (value = "classentity") Classentity classentity);
SQL 쓰기 방법 :
<!-쿼리 학생 목록, 이름, = gender, = class, multi-parameter 메소드-> <select id = "getStudentListwhowsParam"resultMap = "windereResultMap"> select * from student_tbl st <where> <if test = "name! = null and name! = '' '"> st.student_name (concat)) </if> <test = "sex! = null and sex! = ''"> and st.student_sex = #{sex} </if> <test = "생일! = null"> and st.student_birthday = #{생일} </if> <test = "null and classentity.classid! = null 및 classentity. = #{classentity.classId} </if> </where> </select>쿼리 만들기 :
목록 <TudlyEntity> StudentList = StudentMapper.getStudEntListWhereParam ( "," ", StringUtil.Parse ("1985-05-28 "), classMapper.getClassById ("200000002 "); for (Studentity EntityTemp : StudentList) {System.out.println (EntityTemp.tostring (entityTemp.tostring)); 2.5.5 문자열 대체 방법
기본적으로 #{} 구문을 사용하면 MyBatis가 준비된 스테이트 속성을 생성하고 PreparedStatement 매개 변수 (=?)를 사용하여 값을 안전하게 설정합니다. 빠르고 안전하게 노력하고 자주 사용됩니다. 그러나 때로는 변경되지 않은 문자열을 SQL 문으로 직접 대체하고 싶을 수도 있습니다. 예를 들어, 주문의 경우 다음을 사용할 수 있습니다. $ {collectname} weder the $ {columnname}이지만 mybatis는이 문자열을 수정하고 우회하지 않습니다.
참고 : 사용자 입력을 이런 식으로 변경되지 않은 문에 수신하고 적용하는 것은 매우 안전하지 않습니다. 이렇게하면 사용자가 손상된 코드를 이식 할 수 있으므로 필드에 클라이언트가 입력하지 않도록하거나 정당성을 직접 확인해야합니다.
2.6 캐시 캐시
Mybatis에는 강력하고 구성 가능하며 사용자 정의 가능한 캐시 메커니즘이 포함되어 있습니다. Mybatis 3의 캐시 구현은 여러 번 향상되었으며, 이는 강력하고 구성하기 쉽습니다. 기본적으로 캐시가 활성화되지 않습니다. 세션 캐시 외에도 성능을 향상시키고 글로벌 종속성을 해결할 수 있습니다. 레벨 2 캐시를 켜면 SQL 매핑 파일에 간단한 줄만 추가하면됩니다. <cache/>
이 간단한 문장의 기능은 다음과 같습니다.
(1). 매핑 파일의 모든 선택 문은 캐시됩니다.
(2). 매핑 파일의 모든 삽입, 업데이트 및 삭제는 캐시가 지워집니다.
(3). 캐시는 "최근에 사용 된 거의 사용되지 않은"알고리즘을 사용하여 재활용됩니다 (4). 정해진 시간으로 캐시가 지워지지 않습니다.
(5). 각 캐시는 쿼리 결과에 관계없이 1024 목록 또는 객체에 대한 참조를 저장할 수 있습니다.
(6). 캐시는 "읽기/쓰기"캐시로 사용됩니다. 이는 검색된 객체가 공유되지 않으며 발신자에게 안전합니다. 다른 전화는 없을 것입니다 (7). 또는 스레드에 대한 잠재적 수정.
예를 들어, 60 초 안에 한 번 지우려면 FIFO 캐시를 만들고 512 객체 결과 또는 목록 참조를 저장하고 결과를 읽으십시오. 사용하지 않은 스레드에서 수정하면 참조 충돌이 발생할 수 있습니다.
<CACHE EVICTION = "FIFO"FlushInterVal = "60000"size = "512"readOnly = "true"> </cache>
다른 네임 스페이스에서 동일한 캐시 구성 또는 인스턴스를 공유 할 수도 있습니다. 이 경우 Cache-Ref를 사용하여 다른 캐시를 참조 할 수 있습니다.
<CACHE-Ref Namespace = "com.liming.manager.data.studentMapper"/>
캐시 문 속성 구성 세부 사항 :
| 재산 | 설명 | 가치를 얻으십시오 | 기본값 |
| 축출 | 캐싱 정책 : LRU- 최근 최소 사용량 : 지난 기간 동안 사용되지 않은 객체를 제거합니다. FIFI-FIRST-A-OUTS : 대기열의 이전 개체를 꺼내십시오. 소프트 - 소프트 참조 : 소프트 참조 규칙에 따라 쓰레기 수집 메커니즘을 사용하여 물체를 제거하십시오. 약한 참조 : 약한 참조 규칙에 따라 물체를 강제로 제거하기 위해 쓰레기 수집 메커니즘을 사용하십시오. | LRU FIFI 부드러운 약한 | LRU |
| FlushInterval | 합리적인 총 시간을 나타냅니다. 기본값이 설정되지 않았으므로 UnintralVal Clearing을 사용하는 경우 명령문 만 호출하여 확인할 수 있습니다. | 긍정적 인 정수 | 설정되지 않았습니다 |
| 크기 | 캐시 된 물체의 크기 | 긍정적 인 정수 | 1024 |
| 준비 적 | 읽기 전용 캐시는 모든 발신자에게 동일한 인스턴스를 반환합니다. 따라서 그중 어느 것도 수정할 수 없으므로 성능을 크게 향상시킬 수 있습니다. 쓰기 가능한 캐시가 시퀀스를 통과합니다 캐시 된 물체의 사본을 반환합니다. 이것은 느리지 만 더 안전합니다. 따라서 기본값은 False입니다. | 참 | 거짓 | 거짓 |