1. MyBatis+Spring+MySQL의 소개 및 구성
1.1 Mybatis 소개
MyBatis는 SQL, 저장 프로 시저 및 고급 매핑을 사용자 정의 할 수있는 지속성 계층 프레임 워크입니다. MyBatis는 대부분의 JDBC 코드, 수동 매개 변수 설정 및 결과 세트 검색을 제거합니다. MyBatis는 간단한 XML 및 주석 만 사용하여 기본 데이터 유형, 맵 인터페이스 및 POJOS에 데이터베이스 레코드를 구성하고 매핑합니다. Mybatis는 Hibernate 및 Apache OJB와 같은 "원 스톱"ORM 솔루션과 비교하여 "반자동"ORM 구현입니다.
사용해야하는 JAR 패키지 : Mybatis-3.0.2.jar (Mybatis Core 패키지). Mybatis-Spring-1.0.0.jar (봄과 결합).
주소 다운로드 :
http://ibatis.apache.org/tools/ibator
http://code.google.com/p/mybatis/
1.2MyBatis+Spring+MySQL 간단한 구성
1.2.1 스프링 환경 구축
(1) Maven 웹 프로젝트를 수립합니다.
(2) 스프링 프레임 워크 및 구성 파일을 추가합니다.
(3) POM.XML에 필요한 JAR 패키지 (스프링 프레임 워크, Mybatis, Mybatis-Spring, Junit 등)를 추가하십시오.
(4) Web.xml 및 Spring의 구성 파일을 변경합니다.
(5) JSP 페이지와 해당 컨트롤러를 추가합니다.
(6) 테스트.
참조 : http://limingnihao.iteye.com/blog/830409. Eclipse에서 Maven을 사용하여 SpringMVC 프로젝트를 구축하십시오
1.2.2 MySQL 데이터베이스 설정
학생 과정 선택 관리 데이터베이스를 설정하십시오.
표 : 학생 테이블, 수업 테이블, 교사 테이블, 코스 테이블, 학생 코스 테이블.
논리적 관계 : 각 학생에는 수업이 있습니다. 각 수업은 수업 교사에 해당합니다. 각 교사는 한 수업의 수업 교사 일 수 있습니다.
다음 SQL을 사용하여 데이터베이스를 작성하고 먼저 학생 테이블을 만들고 데이터 (2 개 이상의 항목)를 삽입하십시오.
더 많은 SQL을 보려면 Project Source 파일을 Resource/SQL로 다운로드하십시오.
/* 데이터베이스 생성*/ 데이터베이스 생성 학생 학생 _Manager; Student_Manager를 사용합니다. / ***** 학생 테이블 만들기 *****/ 테이블 생성 학생 varchar (255) 기본 키, 학생 varchar (10) null, student_sex varchar (10), Student_birthday 날짜, class_id varchar (255)); /*학생 데이터 삽입*/ intodent_tbl에 삽입, 학생 삽입, 학생_name, Student_Sex, Student_Birthday, class_id) 값 (123456, 'xxx', 'female', '1980-08-01', 121546)
MySQL에 연결하는 데 사용되는 구성 파일 MySQL.Properties를 만듭니다.
jdbc.driverclassname = com.mysql.jdbc.driver jdbc.url = jdbc : mysql : // localhost : 3306/student_manager? user = root & password = limingnihao & useUnicode = true & caracterEncoding = utf-8
1.2.3 Mybatis 환경 구축
순서는 캐주얼하고 현재 순서는 필기 파일을 최대한 적게 수정할 수 있기 때문입니다.
1.2.3.1 엔티티 클래스 생성 : 학생
공공 계급 학생 중단은 직렬화 가능 {Private STATIC Final Long SerialversionUID = 3096154202413606831L; 개인 계급 분류; 개인 데이트 학생 비틀 데이; 개인 문자열 학생; 개인 문자열 학생 이름; 개인 문자열 StudentSex; 공개 classentity getClassentity () {return classentity; } 공개 날짜 getStudentBirthday () {return StudentBirthday; } public String getStudentId () {return studentId; } public String getStudentName () {return StudentName; } public String getStudentSex () {retud StudentSex; } public void setclassentity (classentity classentity) {this.classentity = classentity; } public void setStudentBirthday (Date StudentBirthday) {this.studentBirthday = StudentBirthday; } public void setStudentId (String StudentId) {this.studentId = windentId; } public void setStudentName (String StudentName) {this.studentName = StudentName; } public void setStudentSex (String StudentSex) {this.studentSex = StudentSex; }} 1.2.3.2 데이터 액세스 인터페이스를 만듭니다
학생 클래스의 해당 DAO 인터페이스 : StudentMapper.
공개 인터페이스 학생 - 학생 {public studentity getstudent (String StudentId); 공공 학생 getStudentAndClass (String StudentId); 공개 목록 <TudlyEntity> getStudEntall (); 공공 공간 삽입물 (학생 엔티티); 공공 무효 Deletestudent (Studentity Entity); 공개 void updateStudent (Studentity Entity); }1.2.3.3 SQL 매핑 명령문 파일을 만듭니다
학생 클래스 SQL 명세서 파일 StudentMapper.xml
결과 맵 태그 : 테이블 필드 및 속성의 매핑.
태그 : 쿼리 SQL을 선택하십시오.
<? xml version = "1.0"alcoding = "utf-8"?> <! doctype mapper public "-// mybatis.org//dtd Mapper 3.0 // en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd "> <mapper namper.dat.data.data.data.data.data.data.data.data.data.data.data.data.data.data.data.data.data.data.data.data.data.data.data.data.data.data.data. type = "studentity"id = "windereResultMap"> <id property = "studentId"column = "student_id"/> <result property = "studentname"column = "student_name"/> <result property = "studentsex"열 = "Student_sex"/<result property = "Studentbirthday"열 = "Student_birthday"/> </resultmap> <! id = "getStudent"ParameterType = "String"resultType = "Studententity"resultMap = "StudentResultMap"> <! resulttype = "com.manager.data.model.studententity"resultmap = "windentresultmap"> <!
1.2.3.4 MyBatis Mapper 구성 파일 생성
src/main/resource : mybatis-config.xml에서 mybatis 구성 파일을 만듭니다.
변형기 태그 : 별명에 클래스 A 분류를 제공합니다. com.manager.data.model.studententity 클래스는 Studententity 대신 사용할 수 있습니다.
매핑 기 태그 : mybatis의 엔티티 클래스 파일로드 SQL 매핑 명령문 파일.
<? xml version = "1.0"encoding = "utf-8"?> <! doctype configuration public "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd "> configuration> <typealias ="typealias " type = "com.manager.data.model.studententity"/> </inflealiases> <mappers> <mapper resource = "com/manager/data/maps/studentmapper.xml"/> </mappers> </configuration>
1.2.3.5 Spring의 구성 파일을 수정합니다
주로 생산 공장 클래스의 SQLSESSION : SQLSESSIONFACTORYBEAN (MyBatis.Spring 패키지)의 Bean을 추가합니다. 구성 파일 위치 및 데이터 소스를 지정해야합니다.
구현 Bean 데이터 액세스 인터페이스에 해당합니다. MapPerfactoryBean을 통해 만들어졌습니다. 인터페이스 클래스의 전체 이름과 sqlsession factory bean에 대한 참조를 실행해야합니다.
<! -Property Configuration 파일-> <Context : Property-Placeholder Location = "ClassPath : MySQL.Properties" /> <Bean ID = "DataSource"> <속성 이름 = "DriverClassName"value = "$ {jdbc.driverClassName}" /> <속성 이름 = "value" "$}"$} "$}" id = "transactionManager"> <property name = "dataSource"ref = "dataSource" /> < /bean> <bean id = "sqlsessionFactory"> <property name = "configlocation"value = "classPath : myBatis-config.xml" /> <property name = "dataSource"ref = "dataSource" /< /bean> < /bean> < /bean> < /bean> < /bean> < /bean> < /bean. id = "StudentMapper"> <property name = "mapperInterface"value = "com.manager.data.studentMapper" /> <속성 이름 = "sqlsessionFactory"ref = "sqlsessionFactory" /> < /bean> Mapper Bean을 정의 할 수없고 주석을 사용 할 수 있습니다.
주석에 StudentMapper를 추가하십시오
@Repository @Transactional Public Interface StudentMapper {}해당 요구는 Dispatcher-Servlet.xml에 스캔을 추가하는 것입니다.
<ean> <property name = "annotationClass"value = "org.springframework.stereotype.repository"/> <property name = "basepackage"value = "com.liming.manager"/> <속성 이름 = "sqlsession actory"ref = "sqlsessionCactory"/>
1.2.4 테스트 스튜던트 모퍼
SpringMVC 테스트를 사용하여 TestController를 작성하고 Tomcat을 구성하며 테스트를 위해 Index.do 페이지에 액세스하십시오.
@Controller Public Class TestController {@autowired 사립 학생 Mapper StudentMapper; @requestmapping (value = "index.do") public void indexpage () {Studententity entity = StudentMapper.getStudent ( "10000013"); System.out.println ( "이름 :" + entity.getStudentName ()); }}Junit과 테스트 :
@runwith (value = springjunit4classrunner.class) @contextConfiguration (value = "test-servlet.xml") public class studentmappertest {@autowired private classmapper classMapper; @autowired 사립 학생 Mapper Studentmapper; @transactional public void getStudentTest () {Studententity Entity = StudentMapper.GetStudent ( "10000013"); System.out.println ( "" + entity.getStudentId () + entity.getStudentName ()); 목록 <TudlyEntity> StudentList = StudentMapper.getStudEntall (); for (Studententity entityTemp : StudentList) {System.out.println (entityTemp.getStudentName ()); }}} 2. MyBatis의 기본 구성 파일
sqlsessionFactory를 정의 할 때는 MyBatis 기본 구성 파일을 지정해야합니다.
<bean id = "sqlsessionfactory"> <property name = "configlocation"value = "classpath : mybatis-config.xml" /> <속성 이름 = "dataSource"ref = "DataSource" /< /bean>
MyBatis 구성의 구성하에있는 하위 태그는 다음과 같습니다.
구성 |-속성 |-설정 | --- 변형기 | --- TypeHandlers | --- ObjectFactory | --- 플러그인 | --- 환경 | --- 환경 | --- | ----- | --- TransactionManager | ---- | ---- | __ DataSource | __ 매핑 기.
2.1 속성 속성
속성 구성 파일은 java.properties와 관련이 있습니다. 속성 자원을 구성하여 .properties의 경로를 지정한 다음 속성 태그에서 속성의 이름과 값을 구성하십시오. .properties 파일의 해당 속성 값을 교체 할 수 있습니다.
<!-속성 교체-> <속성 resource = "mysql.properties"> <property name = "jdbc.driverclassName"value = "com.mysql.jdbc.driver"/> <property name = "jdbc.url"value = "jdbc : // localhost : 3306/student_manager"/>. 값 = "루트"/> <속성 이름 = "비밀번호"value = "limingnihao"/> </properties>
2.2 설정
이것은 MyBatis가 작동 프로세스 세부 사항을 수정하는 중요한 단계입니다. 다음 표는 이러한 설정, 의미 및 기본값을 설명합니다.
설정 | 설명하다 | 허용 값 | 기본값 |
캐시 닝 | 이 구성 파일의 모든 캐시는 전 세계적으로 켜기/끄기 설정입니다. | 참 | 거짓 | 진실 |
LazyloadingEnabled | 글로벌 설정 게으른 하중. 'false'로 설정되면 관련된 모든 것이 초기화되고로드됩니다. | 참 | 거짓 | 진실 |
공격적 인 생물 로딩 | 'true'로 설정되면 게으른 로딩 객체는 모든 게으른 특성에 의해로드 될 수 있습니다. 그렇지 않으면 각 속성은 필요에 따라로드됩니다. | 참 | 거짓 | 진실 |
multipleresultsetSenabled | 하나의 명령문이 여러 데이터 세트를 반환하도록 허용하고 허용하지 마십시오 (드라이버 요구 사항에 따라 다름) | 참 | 거짓 | 진실 |
usecolumnlabel | 열 이름 대신 열 레이블을 사용하십시오. 드라이브는 다른 접근 방식을 가지고 있습니다. 드라이브 문서를 참조 하거나이 두 가지 옵션으로 테스트하십시오. | 참 | 거짓 | 진실 |
usegeneratedkeys | JDBC가 기본 키를 생성 할 수 있습니다. 드라이브 지원이 필요합니다. True로 설정되면이 설정은 생성 된 기본 키를 강제로 강제로, 일부 드라이브는 양립 할 수 없지만 여전히 실행할 수 있습니다. | 참 | 거짓 | 거짓 |
자동 캡처 브레이드 | MyBatis가 데이터 테이블 필드를 객체의 속성에 자동으로 매핑하는지 여부와 방법을 지정합니다. 부분은 중첩 결과없이 자동으로 간단하게 매핑됩니다. 전체는 모든 복잡한 결과를 자동으로 매핑합니다. | 없음, 부분, 가득한 | 부분적 |
defaultexecutortype | 집행자를 구성하고 설정하고 간단한 집행자는 다른 진술을 실행합니다. 재사용 집행자는 준비된 진술서 진술서를 재사용 할 수 있으며 배치 집행자는 진술을 반복적으로 실행하고 업데이트 할 수 있습니다. | 단순한 재사용 일괄 | 단순한 |
DefaultStatementTimeout | 데이터베이스가 시간 초과에 응답 할 때까지 드라이브가 얼마나 오래 기다리는지를 결정하기 위해 시간 제한을 설정하십시오. | 긍정적 인 정수 | 설정되지 않았습니다 (널) |
<settings> <setting name = "cacheenabled"value = "true" /> <setting name = "lazyloadingEnabled"value = "true" /> <설정 이름 = "multiplerestsetsetSenabled"value = "true" /> <setting name = "usecolumnlabel"value = "true" /> <setting name = "usegeneratedKeyys ="false ""false ". </설정>
2.3 변형 유형 별칭
유형 별칭은 Java 유형의 약어입니다.
XML 구성과 관련이 있으며 긴 Java 클래스 이름으로 축약됩니다. 예를 들어:
<faintealias> <faintealias alias = "userentity"type = "com.manager.data.model.userentity" /> <faiLias alias = "Studentity"type = "com.manager.data.model.studEntity" /<invalias alias = "classentity"type "com.manager.data.model.classentity" />.
이 구성을 사용하면 "com.manager.data.model.studententity"대신 "Studententity"는 어디에서나 사용할 수 있습니다.
일반적인 Java 유형의 경우 많은 내장 유형 별명이 있습니다. 그것들은 사례에 민감하지 않으며, 과부하 된 이름으로 인해 기본 유형의 특수 처리에주의를 기울여야합니다.
별명 | 지도 유형 |
_바이트 | 바이트 |
_긴 | 긴 |
_짧은 | 짧은 |
_int | int |
_정수 | int |
_더블 | 더블 |
_뜨다 | 뜨다 |
_boolean | 부울 |
끈 | 끈 |
바이트 | 바이트 |
긴 | 긴 |
짧은 | 짧은 |
int | 정수 |
정수 | 정수 |
더블 | 더블 |
뜨다 | 뜨다 |
부울 | 부울 |
날짜 | 날짜 |
소수 | Bigdecimal |
Bigdecimal | Bigdecimal |
물체 | 물체 |
지도 | 지도 |
해시 맵 | 해시 맵 |
목록 | 목록 |
배열 목록 | 배열 목록 |
수집 | 수집 |
반복자 | 반복자 |
2.4 타입 핸들러 유형 핸들
mybatis가 전처리 명령문에서 매개 변수를 설정하든 결과 세트에서 값을 가져 오든 유형 프로세서는 획득 된 값을 적절한 방식으로 Java 유형으로 변환하는 데 사용됩니다. 다음 표는 기본 유형 프로세서를 설명합니다.
유형 프로세서 | 자바 유형 | JDBC 유형 |
부울 타이프 핸들러 | 부울, 부울 | 호환 가능한 부울 가치 |
바이트 타입 핸들러 | 바이트, 바이트 | 호환 가능한 숫자 또는 바이트 유형 |
Shorttypehandler | 짧고 짧습니다 | 호환되는 디지털 또는 짧은 형태 |
integertypehandler | 정수, int | 호환되는 디지털 및 정수 |
Longtypehandler | 길고 길다 | 호환되는 디지털 또는 긴 모델 |
floattypehandler | 플로트, 플로트 | 호환 가능한 디지털 또는 단일 차량 부동 소수점 유형 |
DoubleTypeHandler | 이중, 이중 | 호환되는 디지털 또는 이중 정밀 부동 소수점 유형 |
BigDecimaltyPehandler | Bigdecimal | 호환되는 숫자 또는 소수점 소수점 유형 |
StringTypehandler | 끈 | char 및 varchar 유형 |
Clobtypehandler | 끈 | 클로브 및 장수 유형 |
nstringtypehandler | 끈 | NVARCHAR 및 NCHAR 유형 |
nclobtypehandler | 끈 | nclob 유형 |
Bytearraytypehandler | 바이트[] | 호환 가능한 바이트 스트림 유형 |
Blobtypehandler | 바이트[] | Blob 및 Longvarbinary 유형 |
DateTypeHandler | 날짜 (java.util) | 타임 스탬프 유형 |
dateonlytypehandler | 날짜 (java.util) | 날짜 유형 |
TimeOnlyPehandler | 날짜 (java.util) | 시간 유형 |
sqltimestamptypehandler | 타임 스탬프 (java.sql) | 타임 스탬프 유형 |
SQLDATETYPE HANDLER | 날짜 (java.sql) | 날짜 유형 |
sqltimeTypeHandler | 시간 (java.sql) | 시간 유형 |
ObjectTypehandler | 어느 | 기타 또는 지정되지 않은 유형 |
Enumtepehandler | 열거 유형 | VARCHAR- 모든 호환 문자열 유형은 코드로 저장 (색인화되지 않음). |
public class limingstringtypehandler는 typehandler를 구현합니다 {@override public void setparameter (propublestement ps, int i, 객체 매개 변수, jdbctype jdbctype) sqlexception {system.out.println ( "setparameter -parameter :" + (String) 파라미터) + ", jdbctype :" + " jdbctype.type_code); ps.SetString (i, (string) 매개 변수)); } @override public object getResult (resultet rs, String columnname)는 sqlexception {system.out.println ( "getResult -ColumnName :" + columnName); Rs.GetString (columnName)을 반환합니다. } @override public object getResult (CallableStatement CS, int collectIndex)는 sqlexception {system.out.println ( "getResult -ColumnIndex :" + columnIndex); 반환 cs.getString (columnIndex); }}구성 파일의 TypeHandlers에 TypeHandler 태그를 추가하십시오.
<typehandlers> <typehandler javatype = "string"jdbctype = "varchar"handler = "liming.student.manager.type.limingstringtypehandler"/> </typehandlers>
2.5 ObjectFactory 객체 공장
mybatis가 결과 객체의 새로운 인스턴스를 생성 할 때마다 ObjectFactory가 사용됩니다. 기본 ObjectFactory는 대상 클래스의 생성자를 사용하여 인스턴스를 만드는 것과 다르지 않습니다. 이미 매핑 된 매개 변수가있는 경우 매개 변수가있는 생성자를 사용할 수도 있습니다.
ObjectFactory의 기본 작업을 다시 작성하면 org.apache.ibatis.reflection.fefortory.defaultObjectFactory를 상속하여 직접 만들 수 있습니다.
ObjectFactory 인터페이스는 간단합니다. 여기에는 생성을위한 두 가지 방법이 포함되어 있습니다. 하나는 기본 생성자를 처리하고 다른 하나는 매개 변수 생성자를 처리하는 것입니다. 궁극적으로 SetProperties 메소드를 사용하여 ObjectFactory를 구성 할 수 있습니다. ObjectFactory 인스턴스를 초기화하면 ObjectFactory 요소 본체에 정의 된 속성이 SetProperties 메소드로 전달됩니다.
공개 클래스 LimingObjectFactory 확장 기본 공장 Factory {private static final long serialversionuid = -399284318168302833L; @override public object create (클래스 유형) {return super.create (type); } @override public Object Create (클래스 유형, 목록 <class> constructorArgtypes, list <bood> constructorArgs) {System.out.println ( "create -type :" + type.toString ()); return super.create (유형, ConstructorArgtypes, constructorargs); } @override public void setProperties (속성 속성) {system.out.println ( "setProperties- 속성 :" + properties.tostring () + ", someproperty :" + properties.getProperty ( "someproperty")); super.setProperties (속성); }}구성 파일에 ObjectFactory 태그를 추가하십시오
<ObjectFactory type = "liming.student.manager.configuration.limingObjectFactory"> <속성 이름 = "someproperty"value = "100"/> </objectFactory>
2.6 플러그인 플러그인
MyBatis를 사용하면 특정 지점에서 매핑 된 문으로 실행 된 통화를 가로 채 릴 수 있습니다. 기본적으로 MyBatis는 플러그인이 메소드 호출을 가로 채도록 허용합니다.
이 클래스의 방법에 대한 세부 사항은 각 방법의 서명을 살펴보면 찾을 수 있으며 소스 코드는 MyBatis 배포 패키지에서 사용할 수 있습니다. 통화를 모니터링하는 것보다 더 많은 것을하고 있다고 가정 할 때 우선적 인 방법의 동작을 이해해야합니다. 주어진 방법을 수정하거나 재정의하려고하면 mybatis의 핵심을 깨뜨릴 수 있습니다. 이것은 낮은 수준의 클래스와 방법이며, 플러그인을주의해서 사용해야합니다.
플러그인을 사용하는 것은 그들이 제공하는 매우 간단한 힘입니다. 인터셉터 인터페이스의 간단한 구현 및 가로 채기 위해 지정된 서명을 결정하십시오.
2.7 환경
MyBatis는 여러 환경으로 구성 할 수 있습니다. 이것은 여러 데이터베이스 등에 해당하기 위해 SQL을 매핑하는 데 도움이 될 수 있습니다.
2.8 Mapper Mapper
다음은 Mybatis에게 SQL 매핑을 찾을 위치를 알려주는 진술입니다. 클래스 경로에서 리소스 참조를 사용하거나 문자를 사용하여 정확한 URL 참조를 입력 할 수 있습니다.
예를 들어:
<mapper resource = "com/manager/data/maps/usermapper.xml"/> <mapper resource = "com/manager/data/maps/windentmapper.xml"/> <mapper resource = "com/manager/data/maps/classmapper.xml"/> </mappers>