<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=MyBatis</id>
	<title>MyBatis - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=MyBatis"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=MyBatis&amp;action=history"/>
	<updated>2026-06-03T08:41:57Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=MyBatis&amp;diff=1723726&amp;oldid=prev</id>
		<title>imported&gt;Christof46: /* MyBatis Generator */</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=MyBatis&amp;diff=1723726&amp;oldid=prev"/>
		<updated>2022-08-07T18:25:14Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;MyBatis Generator&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Infobox Software&lt;br /&gt;
| Name                              = MyBatis&lt;br /&gt;
| Logo                              = &lt;br /&gt;
| Hersteller                        = [[Apache Software Foundation]]&lt;br /&gt;
| AktuelleVersion                   = &amp;lt;!-- Wikidata --&amp;gt;&lt;br /&gt;
| AktuelleVersionFreigabeDatum      = &amp;lt;!-- Wikidata --&amp;gt;&lt;br /&gt;
| Betriebssystem                    = [[plattformübergreifend]]&lt;br /&gt;
| Programmiersprache                = [[Java (Programmiersprache)|Java]] und [[.Net-Framework]]&lt;br /&gt;
| Kategorie                         = [[Persistenz (Informatik)|Persistenz]]-[[Framework]]&lt;br /&gt;
| Lizenz                            = [[Apache License]] 2.0&lt;br /&gt;
| Website                           = [http://www.mybatis.org/ mybatis.org]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;MyBatis&amp;#039;&amp;#039;&amp;#039; (früher &amp;#039;&amp;#039;&amp;#039;iBATIS&amp;#039;&amp;#039;&amp;#039; zusammengesetzt aus „internet“ und {{enS|&amp;#039;&amp;#039;abatis&amp;#039;&amp;#039;}} ‚[[Verhau]]‘) ist ein [[Open Source|Open-Source]]-[[Persistenz (Informatik)|Persistenz]]-[[Framework]] für [[Java (Programmiersprache)|Java]] und das [[.Net-Framework]]. Für [[Ruby (Programmiersprache)|Ruby]] und [[Ruby on Rails]] ist eine portierte Version namens &amp;#039;&amp;#039;&amp;#039;RBatis&amp;#039;&amp;#039;&amp;#039; verfügbar.&amp;lt;ref&amp;gt;[http://ibatis.apache.org/docs/ruby/ RDoc Dokumentation für RBatis]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Hauptaufgabe von MyBatis ist die Trennung von Datenbankzugriffscode vom restlichen Applikationscode. Dafür werden der Applikation [[Data Access Object|Data-Access-Objects]] (kurz DAOs) zur Verfügung gestellt und die SQL-Statements in XML-Dateien, sogenannte SQL-Maps, ausgelagert. Damit wird die Zuordnung von Tabellen zu Klassen von der Geschäftslogik entkoppelt.&lt;br /&gt;
&lt;br /&gt;
MyBatis ist kein [[Object-Relational-Mapping]]-Framework (kurz ORM), die Abbildung zwischen objektorientierten Klassen und relationalen Tabellen muss von den Entwicklern selbst vorgenommen werden, ebenso das Schreiben der SQL-Statements für die Abfragen. Somit ist auch die automatische Erstellung eines Datenbankschemas aus der Klassenhierarchie nicht möglich.&lt;br /&gt;
&lt;br /&gt;
== Geschichte ==&lt;br /&gt;
[[Datei:Ibatis.jpg|mini|ibatis-Logo]]&lt;br /&gt;
Das iBATIS-Projekt wurde von Clinton Begin im Jahre 2001 gegründet. Das ursprüngliche Ziel des Projektes war die Entwicklung von kryptographischer Software, was auch ausschlaggebend für den Teil „batis“ im Projektnamen verantwortlich ist („batis“ steht für „abatis“ – engl. für „[[Verhau]]“, eine militärische Verteidigungsanlage). Die erste von MyBatis fertiggestellte Software war „Secrets“, ein [[Open Source|Open-Source]]-[[Verschlüsselung]]s- und [[Elektronische Signatur|Signierungstool]] in Java.&lt;br /&gt;
&lt;br /&gt;
Anfang 2002 erschien ein [[Microsoft]]-Artikel, der behauptete .NET wäre 10-mal schneller und 4-mal produktiver als J2EE. Das veranlasste das iBATIS-Projekt die Beispielapplikation „JPetStore“ (erste Version 1. Juli 2002) zu schreiben und damit die Behauptungen des Artikels zu widerlegen. Der dabei verwendete Persistenzlayer, die SQL-Maps und Data-Access-Objects, erregte das Aufsehen der Open-Source-Community. Daraus entstand das iBATIS-Framework, das einfach die Zusammenfassung der beiden Teile darstellt.&amp;lt;ref&amp;gt;[http://www.clintonbegin.com/downloads/JPetStore-1-2-0.pdf Clinton Begin – Implementing the Microsoft® .NET Pet Shop using Java] (PDF; 220&amp;amp;nbsp;kB)&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Im Laufe des Jahres 2010 zog iBATIS von der [[Apache Software Foundation]] nach Google Code um. Dieser Umzug wurde mit der Verfügbarkeit neuer Technologien im Bereich [[Soziales Netzwerk (Internet)|Soziale Netzwerke]], [[Versionsverwaltung]] und [[Open Source]] Infrastruktur begründet.&amp;lt;ref&amp;gt;[http://ibatis.apache.org/ Ankündigung zum Umstieg auf Google Code auf der iBATIS Homepage]&amp;lt;/ref&amp;gt; Dabei wurde auch iBATIS in MyBatis umbenannt. Das Projekt steht aber weiterhin unter der [[Apache-Lizenz]].&lt;br /&gt;
&lt;br /&gt;
Heute ist MyBatis nur mehr das Persistenzframework, weiterhin bestehend aus den beiden Hauptbestandteilen SQL-Maps und Data-Access-Objects. JPetStore fungiert dabei als das offizielle Beispiel für den typischen Gebrauch von MyBatis.&amp;lt;ref&amp;gt;[http://ibatis.apache.org/about.html iBATIS Geschichte] auf der iBATIS-Website&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das Framework gibt es derzeit in unterschiedlichen Versionen für die Programmiersprachen Java und .NET. Für Ruby gibt es eine Portierung namens RBatis. Das jBati-Projekt, ein ORM-Mapper für [[JavaScript]] ist von MyBatis inspiriert.&amp;lt;ref&amp;gt;[http://code.google.com/p/jbati/ JBati Homepage]&amp;lt;/ref&amp;gt; Das Apache-Projekt iBator bietet ein Tool für MyBatis – es generiert aus Datenbanken die iBATIS-Mapping-Files.&amp;lt;ref&amp;gt;[http://ibatis.apache.org/ibator.html Ibator Seite] auf der iBATIS Site&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Funktionalität ==&lt;br /&gt;
Die Hauptfunktionalität von MyBatis ist die Trennung von Datenbankzugriffscode vom restlichen Applikationscode. Die wichtigsten Komponenten dafür sind die Data-Access-Objects, über die die Applikation mit dem Persistenzlayer kommuniziert, sowie die SQL-Maps, die die Datenbankzugriffe entkoppeln.&lt;br /&gt;
&lt;br /&gt;
Wie die meisten Persistenzframeworks bietet MyBatis noch eine Reihe von über die reine Persistenz hinausgehenden Funktionen. Das sind z.&amp;amp;nbsp;B. die Unterstützung für [[Transaktion (Informatik)|Transaktionen]], sowohl lokale als auch globale (d.&amp;amp;nbsp;h. datenbankübergreifende) über [[Java Transaction API|JTA]] und diverse Performanceoptimierungen wie &amp;#039;&amp;#039;lazy loading&amp;#039;&amp;#039;, &amp;#039;&amp;#039;join fetching&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;caching&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== MyBatis Generator ==&lt;br /&gt;
MyBatis beinhaltet einen Code Generator „MyBatis Generator“. MyBatis Generator fragt die Datenbank Tabellen ab und generiert „MyBatis artifacts“ mit denen CRUD Operationen (Create, Retrieve, Update, Delete) durchgeführt werden können.&amp;lt;ref&amp;gt;[http://mybatis.org/generator/ MyBatis Generator]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ein [[Eclipse (IDE)|Eclipse]] plugin ist verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Beispiel ==&lt;br /&gt;
Es sei eine Tabelle KUNDE gegeben, die mit folgender SQL-Anweisung erstellt worden ist:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
CREATE TABLE KUNDE (&lt;br /&gt;
  K_ID   INTEGER NOT NULL PRIMARY KEY,&lt;br /&gt;
  K_NAME VARCHAR(128),&lt;br /&gt;
  K_STR  VARCHAR(128),&lt;br /&gt;
  K_ORT  VARCHAR(128),&lt;br /&gt;
  K_PLZ  INTEGER)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Des Weiteren existiert folgendes [[Plain Old Java Object|POJO]]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
package beispiel;&lt;br /&gt;
&lt;br /&gt;
public class Kunde {&lt;br /&gt;
  private int id;&lt;br /&gt;
  private String name;&lt;br /&gt;
  private String ort;&lt;br /&gt;
  private String strasse;&lt;br /&gt;
  private int plz;&lt;br /&gt;
&lt;br /&gt;
  //Getter- und Setter-Methoden folgen&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um eine Abfrage ausführen zu können, muss eine XML-Deskriptordatei vorhanden sein:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;select id=&amp;quot;getKunde&amp;quot; parameterClass=&amp;quot;java.lang.Integer&amp;quot; resultClass=&amp;quot;beispiel.Kunde&amp;quot;&amp;gt;&lt;br /&gt;
    SELECT K_ID AS id,&lt;br /&gt;
      K_NAME AS name,&lt;br /&gt;
      K_STR AS strasse,&lt;br /&gt;
      K_ORT AS ort,&lt;br /&gt;
      K_PLZ AS plz&lt;br /&gt;
    FROM KUNDE&lt;br /&gt;
    WHERE K_ID = #value#&lt;br /&gt;
  &amp;lt;/select&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die Angabe &amp;lt;code&amp;gt;#value#&amp;lt;/code&amp;gt; bezieht sich auf den Integer-Wert, der bei der Abfrage mitgegeben werden muss. Als Parameter kann auch ein Objekt oder eine Map verwendet werden, wobei deren Attribute durch die &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;-Notation genauso eingebunden werden können.&lt;br /&gt;
&lt;br /&gt;
Die Abfrage wird in Java wie folgt geschrieben:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
  SqlMapClient sqlMap = SqlMapClientBuilder.buildSqlMapClient(Resources.getResourceAsReader(&amp;quot;path-to-my-sqlMapConfig.xml&amp;quot;));&lt;br /&gt;
  Kunde kunde = (Kunde) sqlMap.queryForObject(&amp;quot;getKunde&amp;quot;, 1);&lt;br /&gt;
  System.out.println(kunde);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ohne MyBatis müsste man um funktional dasselbe zu bewirken in Java den folgenden Code schreiben:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
   Connection conn = null;&lt;br /&gt;
   PreparedStatement ps = null;&lt;br /&gt;
   ResultSet rs = null;&lt;br /&gt;
   String sql = &amp;quot;SELECT K_ID AS id, K_NAME AS name, K_STR AS strasse, K_ORT AS ort, K_PLZ AS plz FROM KUNDE WHERE K_ID = ?&amp;quot;;&lt;br /&gt;
   Kunde kunde;&lt;br /&gt;
   conn = dataSource.getConnection();&lt;br /&gt;
   ps = conn.preparedStatement(sql);&lt;br /&gt;
   ps.setInt(1, id);&lt;br /&gt;
   rs = ps.executeQuery();&lt;br /&gt;
   rs.next();&lt;br /&gt;
   kunde = new Kunde();&lt;br /&gt;
   kunde.setId(rs.getInt(&amp;quot;id&amp;quot;));&lt;br /&gt;
   kunde.setName(rs.getString(&amp;quot;name&amp;quot;));&lt;br /&gt;
   kunde.setStrasse(rs.getString(&amp;quot;strasse&amp;quot;));&lt;br /&gt;
   kunde.setOrt(rs.getString(&amp;quot;ort&amp;quot;));&lt;br /&gt;
   kunde.setPlz(rs.getString(&amp;quot;plz&amp;quot;));&lt;br /&gt;
   rs.close();&lt;br /&gt;
   conn.close();&lt;br /&gt;
   System.out.println(kunde);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dieser Code wäre nicht nur wesentlich länger, komplexer, fehleranfälliger und schlechter wartbar, sondern wäre auch weniger performant, da hier noch keine der bei MyBatis eingebauten Performanceoptimierungen, wie beispielsweise [[Connection Pool]]ing, realisiert wurden.&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Java Data Objects]]&lt;br /&gt;
* [[Jakarta Persistence API]]&lt;br /&gt;
* [[Enterprise JavaBeans#Version 3.0|EJB 3.0 Persistierung]]&lt;br /&gt;
* [[Spring (Framework)]]&lt;br /&gt;
* [[Serialisierung]]&lt;br /&gt;
* [[Hibernate (Framework)]]&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* {{Literatur&lt;br /&gt;
   |Autor=Begin Clinton, Brandon Goodin, Larry Meadors&lt;br /&gt;
   |Titel=iBATIS in Action&lt;br /&gt;
   |Verlag=Manning&lt;br /&gt;
   |Ort=Greenwich&lt;br /&gt;
   |Jahr=2007&lt;br /&gt;
   |ISBN=1-932394-82-6&lt;br /&gt;
   |Seiten=384&lt;br /&gt;
   |Online=[http://www.manning.com/begin/ manning.com]}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.mybatis.org/ MyBatis Projektseite]&lt;br /&gt;
* [http://svn.apache.org/repos/asf/ibatis/java/ibatis-3/trunk/doc/en/iBATIS-3-User-Guide.pdf iBATIS 3.0 User Guide] (PDF; 617 kB; englisch)&lt;br /&gt;
* [http://ibatis.apache.org/ibator Das Ibator Subprojekt]&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Persistenzframework]]&lt;br /&gt;
[[Kategorie:Freie Software]]&lt;br /&gt;
[[Kategorie:Java-Bibliothek]]&lt;br /&gt;
[[Kategorie:Apache-Projekt]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Christof46</name></author>
	</entry>
</feed>