{{Short description|Persistence framework}} {{Infobox software | name = Apache iBATIS | logo = | screenshot = | caption = | developer = Apache Software Foundation | latest release version = | latest release date = | latest preview version = | latest preview date = | operating system = Cross-platform | programming language = Java, .NET, Ruby | genre = Persistence framework | license = Apache License 2.0 | website = {{URL|https://ibatis.apache.org}} }}

'''iBATIS''' is a persistence framework which automates the mapping between SQL databases and objects in Java, .NET, and Ruby on Rails. In Java, the objects are POJOs (Plain Old Java Objects). The mappings are decoupled from the application logic by packaging the SQL statements in XML configuration files. The result is a significant reduction in the amount of code that a developer needs to access a relational database using lower level APIs like JDBC and ODBC.

Other persistence frameworks such as Hibernate allow the creation of an object model (in Java, say) by the user, and create and maintain the relational database automatically. iBATIS takes the reverse approach: the developer starts with a SQL database and iBATIS automates the creation of the Java objects. Both approaches have advantages, and iBATIS is a good choice when the developer does not have full control over the SQL database schema. For example, an application may need to access an existing SQL database used by other software, or access a new database whose schema is not fully under the application developer's control, such as when a specialized database design team has created the schema and carefully optimized it for high performance.

On May 21, 2010 the development team forked the code creating a new project called MyBatis and making new releases there. As a consequence the Apache iBATIS project became inactive and was moved to the Apache Attic in June 2010.

==Usage== For example, assume there is a database table {{mono|'''PRODUCT''' (PROD_ID ''INTEGER'', PROD_DESC ''VARCHAR(64)'')}} and a Java class {{mono|'''com.example.Product''' (id: ''int'', description: ''String'')}}. To read the product record having the key {{mono|'''PROD_ID'''}} into a new {{mono|'''Product'''}} POJO, the following mapping is added into an iBATIS XML mapping file:

<syntaxhighlight lang="xml+velocity"> <select id="getProduct" parameterClass="java.lang.Long" resultClass="com.example.Product"> select PROD_ID as id, PROD_DESC as description from PRODUCT where PROD_ID = #value# </select> </syntaxhighlight>

A new Java '''Product''' object can then be retrieved from the database for product number 123 as follows:

<syntaxhighlight lang="java"> Product resultProduct = (Product) sqlMapClient.queryForObject("getProduct", 123); </syntaxhighlight>

In the mapping file example, <code>#value#</code> refers to the long integer value passed into the query. If the parameter is a Java object, then values from properties on that object can be inserted into the query using a similar <code>#</code> notation. For example, if the parameter class is a <code>com.example.Product</code> which has a property called <code>id</code>, then <code>#value#</code> can be replaced with <code>#id#</code>. The <code>sqlMapClient</code> object is an instance of class <code>com.ibatis.sqlmap.client.SqlMapClient</code>.

==Availability== The founder of iBATIS has [https://web.archive.org/web/20110813174630/http://clintonbegin.blogspot.com/2008/02/clintons-java-5-rant.html publicly stated his dismay with Java 5], but has continued to release new versions of iBATIS for Java. Versions 2.3.1 and 2.3.2 came out in April 2008, and 2.3.3 in July.

The framework is currently available in Java, .NET, and Ruby (RBatis) versions. The [http://code.google.com/p/jbati/ jBati] project is a JavaScript ORM inspired by iBATIS.

The Apache iBator tool is closely related: it connects to your database and uses its metadata to generate iBATIS mapping files and Java classes.

==History== In 2001 a project called iBATIS was started by Clinton Begin. Originally the focus was on the development of cryptographic software solutions. The first product to be released by iBATIS was Secrets,<ref>[https://sourceforge.net/projects/ibatissecrets iBATIS Secrets]</ref> a personal data encryption and signing tool much like PGP. Secrets was written entirely in Java and was released under an open source license.

That year Microsoft published a paper<ref>[http://onjava.com/pub/a/onjava/2001/11/28/catfight.html Cat Fight in a Pet Store: J2EE vs. .NET]</ref> to demonstrate that its recent .NET 1.0 framework was more productive than Java. For that purpose Microsoft built its own version of Sun's Web "Pet Store", a Web project that Sun had used to show Java best practices (Java BluePrints). Microsoft claimed that .NET was 10 times faster and 4 times more productive than Java.

In 2002 Clinton developed an application called JPetStore<ref>{{Cite web |url=http://www.clintonbegin.com/downloads/JPetStore-1-2-0.pdf |title=JPetStore 1.0 |access-date=2013-09-08 |archive-url=https://web.archive.org/web/20131021205735/http://www.clintonbegin.com/downloads/JPetStore-1-2-0.pdf |archive-date=2013-10-21 |url-status=dead }}</ref> to demonstrate that Java could be more productive than .NET and could also do so while achieving a better architecture than was used in the Microsoft implementation.

JPetStore 1.0 had a big impact<ref>[http://www.theserverside.com/news/thread.tss?thread_id=14243 JPetStore 1.0 announcement on TheServerside.com]</ref> and the database layer that Clinton used attracted the attention of the community. Soon, iBATIS Database Layer 1.0 project started, composed of two components: iBATIS DAO and iBATIS SQL Maps.

iBATIS 2.0 was released in June 2004.<ref>[http://www.theserverside.com/news/thread.tss?thread_id=26844 iBATIS 2.0 announcement]</ref> It was a complete redesign while keeping the same features. Clinton donated the iBATIS name and code to Apache Software Foundation and the project stayed in the ASF for six years.

Eventually iBATIS DAO was deprecated, considering that better DAO frameworks were available, such as Spring Framework.

On May 19, 2010 iBATIS 3.0 was published and simultaneously the development team decided to continue the development of the framework at Google Code.<ref>[http://mail-archives.apache.org/mod_mbox/ibatis-user-java/201005.mbox/%3CAANLkTimXoLiHwI-3kbW6It7mH0771xJP4RqT609VKCXC@mail.gmail.com%3E iBATIS Project Team Moving to Google Code]</ref> under a new project called MyBatis.

On June 16, 2010 Apache announced that iBATIS was retired and moved to the Apache Attic.

==See also== *Java Persistence API *Hibernate *EclipseLink *Apache Cayenne *IBM PureQuery *nHydrate *OpenJPA

==References== {{Reflist|colwidth=30em}}

==Bibliography== {{refbegin}} * {{cite book |last = Begin |first = Clinton |title = iBATIS in Action |author2 = Brandon Goodin |author3 = Larry Meadors |publisher = Manning |edition = 1st |date = January 17, 2007 |pages = [https://archive.org/details/ibatisinaction0000begi/page/384 384] |isbn = 978-1-932394-82-5 |url-access = registration |url = https://archive.org/details/ibatisinaction0000begi/page/384 }} * {{cite book |last = Richardson |first = Chris |title = POJOs In Action |publisher = Manning |edition = 1st |date = January 23, 2006 |pages = [https://archive.org/details/pojosinactiondev0000rich/page/456 456] |isbn = 1-932394-58-3 |url-access = registration |url = https://archive.org/details/pojosinactiondev0000rich/page/456 }} {{refend}}

==External links== *{{Official website}}

{{Apache Software Foundation}}

iBATIS Category:Java (programming language) Category:Object–relational mapping Category:Persistence frameworks