1. Einführung und Konfiguration von MyBatis+Spring+MySQL
1.1 Einführung in MyBatis
MyBatis ist ein Persistenzschicht -Framework, das SQL, gespeicherte Verfahren und fortgeschrittene Zuordnungen anpassen kann. MyBatis eliminiert den größten Teil des JDBC -Codes, der manuellen Parametereinstellung und des Ergebnisssatzes. MyBatis verwendet nur einfache XML und Annotationen, um grundlegende Datentypen, Kartenschnittstellen und Pojos zu Datenbankdatensätzen zu konfigurieren und zuzuordnen. Im Vergleich zu "One-Stop" -Lösungen wie Hibernate und Apache OJB ist MyBatis eine "halbautomatische" ORM-Implementierung.
Das JAR-Paket, das verwendet werden muss: MyBatis-3.0.2.jar (MyBatis Core-Paket). MyBatis-Spring-1.0.0.jar (kombiniert mit Frühling).
Adresse herunterladen:
http://ibatis.apache.org/tools/ibator
http://code.google.com/p/mybatis/
1.2Mybatis+Spring+MySQL Einfache Konfiguration
1.2.1 Federumgebung bauen
(1) ein Maven -Webprojekt einrichten;
(2) Spring Framework und Konfigurationsdateien hinzufügen;
(3) Fügen Sie Pom.xml die erforderlichen JAR-Pakete (Feder-Framework, Mybatis, MyBatis-Spring, JUNIT usw.) hinzu;
(4) die Konfigurationsdateien von web.xml und Spring ändern;
(5) eine JSP -Seite und den entsprechenden Controller hinzufügen;
(6) Test.
Als Referenz: http://limingnihao.iteye.com/blog/830409. Bauen Sie das SpringMVC -Projekt mit Maven von Eclipse auf
1.2.2 Erstellen von MySQL -Datenbank
Richten Sie eine Datenbank für die Auswahl der Student -Kursauswahl ein.
Tabelle: Schülertabelle, Klassentabelle, Lehrertabelle, Kurstabelle, Student Course Table.
Logische Beziehung: Jeder Schüler hat eine Klasse; Jede Klasse entspricht einem Klassenlehrer; Jeder Lehrer kann nur der Klassenlehrer einer Klasse sein;
Verwenden Sie die folgende SQL, um eine Datenbank zu erstellen, zuerst eine Schülertabelle zu erstellen und Daten (mehr als 2 Elemente) einzufügen.
Für weitere SQL laden Sie die Projektquelldatei in Ressource/SQL herunter.
/* Erstellen Sie eine Datenbank*/ Erstellen Sie die Datenbank student_manager; Verwenden Sie Student_Manager; / ***** Create Student Tabelle *****/ Erstellen Sie Tabelle student_tbl (student_id varchar (255) Primärschlüssel, student_name varchar (10) nicht null, student_sex varchar (10), student_birthday Datum, class_id varchar (255)); /*Schülerdaten einfügen*/ Einfügen in student_tbl (student_id, student_name, student_sex, student_birthday, class_id) Werte (123456, 'xxx', 'weiblich', '1980-08-01', 121546)
Erstellen Sie die Konfigurationsdatei mysql.properties, die zur Verbindung zu MySQL verwendet wird.
jdbc.driverClassname = com.mysql.jdbc.driver jdbc.url = jdbc: mysql: // localhost: 3306/student_manager? user = root & password = limingnihao & useUnicode = true & charakteristisches und charakteristisches und utf-8
1.2.3 Bauen Sie die MyBatis -Umgebung auf
Die Reihenfolge ist lässig und die aktuelle Bestellung ist, weil Sie die schriftlichen Dateien so wenig wie möglich ändern können.
1.2.3.1 Entitätsklasse erstellen: Schülerentität
öffentliche Klasse Studententity implementiert serialisierbare {private statische endgültige lange Serialversionuid = 3096154202413606831L; private Classentity Classentity; Privatdatum StudentBirthday; private String studentid; private String studentName; private String studentSex; public classEntity getClassentity () {return classentity; } public Date getStudentbirthday () {return studentBirthday; } public String getStudentid () {return studentId; } public String getStudentName () {return studentName; } public String getStudentSex () {return studentSex; } public void setClassEntity (classEntity classEntity) {this.classentity = classEntity; } public void setStudentBirthday (Datum studentBirthday) {this.studentBirthday = studentBirthday; } public void setStudentID (String studentID) {this.studentid = studentId; } public void setStudentName (String studentName) {this.studentName = studentName; } public void setStudentSex (String studentSex) {this.studentSex = studentSex; }} 1.2.3.2 Erstellen Sie eine Datenzugriffsschnittstelle
Die entsprechende DAO -Schnittstelle der Schülerklasse: StudentMapper.
public interface studentMapper {public studententity getStudent (String studentID); öffentliche Studententity GetStudentandClass (String StudentID); öffentliche Liste <Stud StudyEntity> getStudentall (); öffentliche void InsertStudent (Studententity Entity); öffentliche Leere Deletests (Studententity Entity); öffentliche void UpdateStudent (Studententity Entity); }1.2.3.3 Erstellen Sie die SQL Mapping -Anweisungsdatei
Schülerklasse SQL Anweisung Datei studentMapper.xml
Ergebnismap -Tag: Zuordnung von Tabellenfeldern und Attributen.
Wählen Sie Tag: Abfrage SQL.
<? <resultMap type = "studententity" id = "studentResultmap"> <id Property = "studentId" column = "student_id"/> <resulting property = "studentName" column = "student_name"/> <resulting Property = "studentSex" column = "student_sex"/> <resultbirtbirthday "columtSex" studentSex the-theday the-the-the-the-the-the-the-the-the-the-the-the-the-the-the-the-theday-studentday "/resultmap> </resultmap> <! -> <select id = "getstudent" parameterType = "String" resultType = "studententity" resultmap = "studentResultmap"> <! [CDATA [SELECT * FROM STUDENT_TBL ST WO St.Student_id = #{studentid}]> </select> <! resultType = "com.manager.data.model.studententity" resultmap = "studentResultmap"> <! [cdata [select * aus student_tbl]]> </select> </mapper> 1.2.3.4 Erstellen Sie MyBatis Mapper -Konfigurationsdatei
Erstellen Sie MyBatis-Konfigurationsdatei in SRC/Main/Ressource: myBatis-config.xml.
TypeAliases Tag: Geben Sie den Alias -A -Alias an. Die Com.Manager.Data.Model.StudentEntity -Klasse kann anstelle von Schülerentzündungen verwendet werden.
Mappers Tag: Laden Sie die SQL Mapping -Anweisung Datei der Entitätsklasse in MyBatis.
<? type = "com.manager.data.model.studententity"/> </typealises> <mappers> <mapper ressourcen = "com/Manager/data/maps/studentMapper.xml"/> </mappers> </configuration>
1.2.3.5 Ändern Sie die Konfigurationsdatei von Spring
Es fügt hauptsächlich die Bean der Produktionsfabrikklasse von SQLSession hinzu: Erfordert die Angabe des Standorts und der Datenquelle des Konfigurationsdatei.
Implementierungsbean entsprechend der Datenzugriffsschnittstelle. Erstellt über MapperFactoryBean. Es ist notwendig, den vollständigen Namen der Schnittstellenklasse und den Verweis auf die SQLSession Factory Bean auszuführen.
<!-Eigenschaftskonfigurationsdatei importieren-> <Context: Property-Placeholder location = "classPath: mysql.properties" /> <bean id = "dataSource"> <Eigenschaft name = "driverClassName" value = "$ {jdbc.driverclassname}" /> < /> < /> < /banl " id = "transactionManager"> <Eigenschaft name = "dataSource" ref = "dataSource" /> < /bean> <bean id = " id = "studentMapper"> <Eigenschaft name = "mapPerInterface" value = "com.manager.data.studentMapper" /> <Eigenschaft name = "sqlSessionFactory" ref = " Sie können die Mapper Bean auch nicht definieren, Anmerkungen verwenden:
Fügen Sie StudentMapper zur Anmerkung hinzu
@Repository @transactional public interface studentMapper {}Die entsprechenden Anforderungen bestehen darin, Scans im Dispatcher-servlet.xml hinzuzufügen:
<bean> <Property name = "AnnotationClass" value = "org.springFramework.stereotype.repository"/> <Eigenschaft name = "Basepackage" value = "com.liming.manager"/> <Eigenschaft name = "
1.2.4 Test StudentMapper
Verwenden Sie SpringMVC -Tests, um einen Testcontroller zu erstellen, Tomcat zu konfigurieren und auf die Index.do -Seite zum Testen zuzugreifen:
@Controller Public Class TestController {@autowired Private studentMapper studentMapper; @RequestMapping (value = "index.do") public void indexPage () {Studententity Entity = studentMapper.getStudent ("10000013"); System.out.println ("Name:" + entity.getStudentName ()); }}Test mit Junit:
@Runwith (value = SpringJunit4ClassRunner.class) @ContextConfiguration (value = "test-servlet.xml") public class studentMapperTest {@Autowired Private ClassMapper ClassMapper; @Autowired Private studentMapper studentMapper; @Transactional public void getStudentTest () {Studententity Entity = studentMapper.getStudent ("10000013"); System.out.println ("" + entity.getstudentid () + entity.getStudentName ()); Liste <Stud StudyEntity> studentList = studentMapper.getstudentall (); für (studententity entityTemp: studentList) {System.out.println (EntityTemp.getstudentName ()); }}} 2. MYBATIS 'Hauptkonfigurationsdatei
Beim Definieren von SQLSessionFactory müssen Sie die MyBatis -Hauptkonfigurationsdatei angeben:
<bean id = "
Zu den Untertingern unter Konfiguration in der MyBatis-Konfiguration gehören:
Konfiguration |.
2.1 Eigenschaften Eigenschaften
Eigenschaftenkonfigurationsdateien beziehen sich auf Java.Properties. Konfigurieren Sie die Eigenschaftenquelle, um den Pfad von .Properties anzugeben, und konfigurieren Sie dann den Namen und den Wert der Eigenschaft unter dem Eigenschaften -Tag. Sie können den entsprechenden Eigenschaftswert in der Datei .Properties ersetzen.
<!-Immobilienersatz-> <Properties Resource = "mysql.properties"> <Property name = "jdbc.driverClassName" value = "com.mysql.jdbc.driver value = "root"/> <Eigenschaft name = "password" value = "limingnihao"/> </properties>
2.2 Einstellungen
Dies ist ein wichtiger Schritt für MyBatis, um die Betriebsprozessdetails zu ändern. Die folgende Tabelle beschreibt diese Einstellungen, Bedeutungen und Standardwerte.
Einstellungen | beschreiben | Zulässige Werte | Standardwert |
Cacheenababled | Alle Caches unter dieser Konfigurationsdatei sind weltweit Ein-/Aus -Einstellungen. | wahr | FALSCH | WAHR |
LazyLoadingNabled | Globale Einstellungen Lazy Loading. Wenn sie auf "False" gesetzt sind, werden alle zugeordneten initialisiert und geladen. | wahr | FALSCH | WAHR |
Aggressive Lade | Wenn Sie auf "True" gesetzt sind, können faule Ladeobjekte von allen faulen Eigenschaften geladen werden. Andernfalls wird jede Eigenschaft nach Bedarf geladen. | wahr | FALSCH | WAHR |
MultipleresultsetSenabled | Ermöglichen und nicht zulassen, dass eine einzelne Anweisung mehrere Datensätze zurückgibt (abhängig von den Treiberanforderungen) | wahr | FALSCH | WAHR |
UsecolumnLabel | Verwenden Sie Spaltenbezeichnungen anstelle von Spaltennamen. Unterschiedliche Laufwerke haben unterschiedliche Ansätze. Siehe die Drive -Dokumentation oder testen Sie sie mit diesen beiden verschiedenen Optionen. | wahr | FALSCH | WAHR |
useGeneratedKeys | Ermöglicht JDBC, Primärschlüssel zu generieren. Der Antriebsunterstützung ist erforderlich. Wenn diese Einstellung auf True gesetzt wird, erzwingt diese Einstellung den generierten Primärschlüssel, einige Laufwerke sind inkompatibel, können jedoch weiterhin ausgeführt werden. | wahr | FALSCH | FALSCH |
Automappingbehavior | Gibt an, ob und wie MyBatis Datentabellenfelder automatisch den Eigenschaften der Objekte abbilden. Teilweise wird nur automatisch einfache, ohne verschachtelte Ergebnisse zugeordnet. Full wird alle komplexen Ergebnisse automatisch zuordnen. | KEINER, TEILWEISE, VOLL | TEILWEISE |
defaultExecutortype | Konfigurieren und festlegen, und der Simple Executor führt andere Anweisungen aus. Der Wiederverwendungspiegel kann die Anweisungen für vorbereitete Anweisungen wiederverwenden, und der Batch -Testamentsvollstrecker kann wiederholte Anweisungen und Stapel -Updates ausführen. | EINFACH WIEDERVERWENDUNG CHARGE | EINFACH |
DefaultStatementTimeout | Legen Sie ein Zeitlimit fest, um festzustellen, wie lange das Laufwerk darauf wartet, dass die Datenbank auf ein Timeout reagiert | Positive Ganzzahl | Nicht gesetzt (NULL) |
<einstellungen> <Einstellung name = "cacheeNabled" value = "true" /> <Einstellung name = "LazyLoadingenabled" value = "true" /> <Einstellung Name = "MultipleresulltsetSenable" value = "true" /> <Einstellungsname = "usecolumnLabel" value "value". /> < /Einstellungen>
2.3 Typealias Typ alias
Typ alias ist die Abkürzung von Java -Typen.
Es ist einfach mit der XML -Konfiguration verknüpft, die als langwieriger Java -Klasse -Name abgekürzt wird. Zum Beispiel:
<typealias> <typealias alias = "userEntity" type = "com.manager.data.model.UserEntity" /> <typealias alias = "studententity" type = "com.manager
Mit dieser Konfiguration kann "Studententity" überall anstelle von "com.Manager.data.model.studententity" verwendet werden.
Für normale Java-Typen gibt es viele eingebaute Alias. Sie sind beide unempfindliche Fall, und aufgrund überlasteter Namen sollten Sie auf die besondere Behandlung der einheimischen Typen achten.
Alias | Die Art der Karte |
_Byte | Byte |
_lang | lang |
_kurz | Kurz |
_int | int |
_ganze Zahl | int |
_doppelt | doppelt |
_schweben | schweben |
_Boolean | boolean |
Saite | Saite |
Byte | Byte |
lang | Lang |
Kurz | Kurz |
int | Ganze Zahl |
ganze Zahl | Ganze Zahl |
doppelt | Doppelt |
schweben | Schweben |
boolean | Boolean |
Datum | Datum |
dezimal | Bigdecimal |
Bigdecimal | Bigdecimal |
Objekt | Objekt |
Karte | Karte |
Hashmap | Hashmap |
Liste | Liste |
ArrayList | ArrayList |
Sammlung | Sammlung |
Iterator | Iterator |
2.4 Typhandler -Griff
Unabhängig davon, ob MyBatis einen Parameter in einer Vorverarbeitungsanweisung festlegt oder einen Wert aus dem Ergebnissatz entnimmt, wird der Typprozessor verwendet, um den erhaltenen Wert in die entsprechende Weise in den Java -Typ umzuwandeln. Die folgende Tabelle beschreibt den Standardtypprozessor.
Geben Sie Prozessor ein | Java -Typen | JDBC -Typ |
BooleanTypeHandler | Boolescher, Boolean | Jeder kompatible Boolesche Wert |
ByTeTypeHandler | Byte, Byte | Jede kompatible Nummer oder Byte -Typ |
ShortypeHandler | Kurz, kurz | Alle kompatiblen digitalen oder Kurzform |
IntegerTypeHandler | Ganzzahl, int | Jede kompatible digitale und ganzzahlige |
LongTypeHandler | Lang, lang | Jedes kompatible digitale oder lange Modell |
FAUTTYPEHANDLER | Schweben, schweben | Jeder kompatible digitale oder einzelne Precision-Schwimmpunkttyp |
DoubleTypeHandler | Doppelt, doppelt | Jeder kompatible digitale oder doppelte Präzisionsschwimmpunkttyp |
BigDecimaltypeHandler | Bigdecimal | Jeder kompatible numerische oder dezimale Dezimalentyp |
StringTypeHandler | Saite | Zeichen- und Varchar -Typen |
CLOBTYPEHANDLER | Saite | Clob- und Longvarchar -Typen |
NstringtypeHandler | Saite | Nvarchar- und NCHAR -Typen |
NCOBTTYPEHANTLER | Saite | NCLOB -Typ |
BytearrayTypeHandler | Byte[] | Jeder kompatible Byte -Stream -Typ |
BlobTypeHandler | Byte[] | Blob- und Langdarmtypen |
DATETypeHandler | Datum (java.util) | Zeitstempeltyp |
DateOnlyTypeHandler | Datum (java.util) | Datumstyp |
TimeOnlyTypeHandler | Datum (java.util) | Zeittyp |
SQLTIMESTAMPTYPEHANDLER | Zeitstempel (Java.sql) | Zeitstempeltyp |
SqldatetypeHandler | Datum (java.sql) | Datumstyp |
SqLtimetypeHandler | Zeit (java.sql) | Zeittyp |
ObjectTypeHandler | Beliebig | Ein anderer oder nicht spezifizierter Typ |
EnumtypeHandler | Aufzählungstyp | VARCHAR - Jeder kompatible Zeichenfolge -Typ, der als Code gespeichert ist (nicht indiziert). |
public class limingstringTypeHandler implementiert typeHandler {@Override public void setParameter (prepedStatement ps, int i, Objektparameter, jdbctype jdbctype) löst SQLEXception {system.out.println ("setParameter - Parameter:" + (String) +, JDBCTYPE: " + (String) +,, JDBCTYPE:" +, Parameter). jdbctype.type_code); ps.SetString (i, ((String) Parameter)); } @Override öffentliches Objekt getResult (Ergebnisset RS, String ColumnName) löst SQLEXception {System.out.println ("getResult - columnName:" + columnName) aus; return Rs.GetString (ColumnName); } @Override öffentliches Objekt getResult (CallABlestatement CS, int columnIndex) löscht sqlexception {System.out.println ("getResult - columnIndex:" + columnIndex) aus; return cs.getString (columnIndex); }}Fügen Sie das TypeHandler -Tag in den Typhandlern in der Konfigurationsdatei hinzu.
<typeHandlers> <typeHandler javatype = "String" jdbctype = "varchar" Handler = "liming.student.Manager.Type.LimingStringtypeHandler"/> </Typehandlers>
2.5 Objektfaktorobjektfabrik
Jedes Mal, wenn MyBatis eine neue Instanz des Ergebnisobjekts erstellt, wird ObjectFactory verwendet. Das Standard -Objektfaktor unterscheidet sich nicht vom Erstellen einer Instanz mit dem Konstruktor der Zielklasse. Wenn bereits Parameter zugeordnet sind, ist es auch möglich, einen Konstruktor mit Parametern zu verwenden.
Wenn Sie den Standardbetrieb von ObjectFactory neu schreiben, können Sie Ihre eigene erstellen, indem Sie org.apache.ibatis.reflection.factory.DefaultObjectFactory erben.
Die ObjectFactory -Schnittstelle ist einfach. Es enthält zwei Methoden zur Erstellung, eine darin, mit dem Standardkonstruktor umzugehen, und das andere ist, mit dem Parameterkonstruktor umzugehen. Letztendlich kann die SetProperties -Methode verwendet werden, um das Objektfaktor zu konfigurieren. Nach der Initialisierung Ihrer ObjectFactory -Instanz werden die im ObjectFactory -Element -Körper definierten Eigenschaften an die Methode SetProperties übergeben.
öffentliche Klasse LimingObjectFactory erweitert defaultObjectFactory {private statische endgültige lange Serialversionuid = -399284318168302833L; @Override öffentliches Objekt erstellen (Klassentyp) {return super.create (type); } @Override öffentliches Objekt erstellen (Klassentyp, Liste <klasse> constructorarGtypes, Liste <Object> constructorargs) {System.out.println ("create - type:" + type.toString ()); return Super.create (Typ, Konstruktorargtypen, Konstruktorargs); } @Override public void setProperties (Eigenschaften Eigenschaften) {system.out.println ("setProperties - Eigenschaften:" + properties.toString () + ", einige Property:" + Properties.getProperty ("smloproperty"); Super.SetProperties (Eigenschaften); }}Fügen Sie der Konfigurationsdatei ObjectFactory -Tag hinzu
<ObjectFactory type = "liming.student.Manager.Configuration.LimingObjectFactory"> <Eigenschaft name = "smloperty" value = "100"/> </ObjectFactory>
2.6 Plugins -Plugin
Mit MyBatis können Sie Anrufe abfangen, die von zugeordneten Aussagen an einem bestimmten Punkt ausgeführt werden. Standardmäßig ermöglicht MyBatis Plugins, Methodenaufrufe abzufangen:
Details zu Methoden in diesen Klassen finden Sie in der Signatur jeder Methode, und ihr Quellcode ist im MyBatis -Verteilungspaket verfügbar. Sie sollten das Verhalten Ihrer übergeordneten Methoden verstehen, vorausgesetzt, Sie tun mehr als nur Aufrufe. Wenn Sie versuchen, eine bestimmte Methode zu ändern oder zu überschreiben, können Sie den Kern von MyBatis brechen. Dies ist eine Klasse und Methode auf niedriger Ebene, und Sie sollten Plugins mit Vorsicht verwenden.
Die Verwendung von Plugins ist die sehr einfache Leistung, die sie bereitstellen. Einfache Implementierung der Interceptor -Schnittstelle und bestimmen Sie die angegebene Signatur, die Sie abfangen möchten.
2.7 Umgebungen
MyBatis kann mit mehreren Umgebungen konfiguriert werden. Auf diese Weise können Sie SQL auf mehrere Datenbanken usw. abbilden.
2.8 Mapper Mapper
Hier ist eine Aussage, die MyBatis mitteilt, wo nach SQL Mapping suchen soll. Sie können die Ressourcenreferenz im Klassenpfad oder Zeichen verwenden, um die genaue URL -Referenz einzugeben.
Zum Beispiel:
<mapper ressource = "com/Manager/data/maps/usermapper.xml"/> <mapper ressource = "com/Manager/data/maps/studentMapper.xml"/> <maper ressourcen = "com/Manager/data/maps/classMapper.xml"/> </mappers>