6. The Code Anatomy Code
calls SqlMapClient
loads calls
import java.sql.SQLException;
SQL Maps DataSource
import com.ibatis.sqlmap.client.SqlMapClient;
... Magic
Magic
public class MyDAO
Database
{
private SqlMapClient myDB;
public void frobnicate(MyObject someObject) throws SQLException
{
List<MyClass> list = myDB.queryForList("myQuery");
Foo myFoo = (Foo)myDB.queryForObject("getFooByID", 1337);
myDB.update("myQuery3");
myDB.insert("myQuery4", someObject);
...
}
...
}
7. Any Questions so far?
calls
Code SqlMapClient
insert()
loads update() calls
delete()
query()
SQL Maps javax.sql.DataSource
Queries
Result Maps
Magic
Magic
Database
8. Implicit Mapping
<sqlMap namespace="myNamespace">
<resultMap id="myClass" class="full.package.Class">
<result property="foo" column="col1"/>
<result property="bar" column="col2"/>
...
</resultMap>
...
<!-- ===================================================== -->
<sql id="myQuery" resultClass="full.package.Class">
SELECT col1 as foo, col2 as bar FROM table1
</sql>
...
</sqlMap>
9. Inheritance
Object Oriented Code Relational Database
Fruit fruits
id - int id - mediumint(7), PK
dateBought - long date_bought - int(11)
type - enum('a', 'o')
apples
Apple Orange fruit_id - mediumint(7), FK
worm_count - decimal(4,1)
wormCount - float bioengineered - boolean
oranges
fruit_id - mediumint(7), FK
bioengineered - bool
10. Complex Members
Object Oriented Code Relational Database
Cake cakes
id - int id - mediumint(7), PK
flavor - String flavor - enum('chocolate', ...)
toppings - List<CakeTopping>
cakes_to_toppings
cake_id - mediumint(7), FK
topping_id - mediumint(7), FK
CakeTopping
id - int
name - String cake_toppings
containsHFCS - boolean
id - mediumint(7), PK
name - varchar(20)
contains_hfcs - bool
18. What About Hibernate?
iBATIS Hibernate
• Separation of code and SQL • SQL alongside code
• Simpler configuration and setup*
• Total control over SQL queries • Cross-DB query language (HQL)
• Shallow learning curve • ???
• Handles application complexities • Works very well when data model
better** closely resembles object model**
**No Fluff Just Stuff's Mark Richards' two cents:
http://www.nofluffjuststuff.com/media.jsp?mediaId=27
*Source: http://www.devx.com/Java/Article/31481/0/page/1
19. Who is Using iBatis?
• CNet.com
• MySpace.com
• OfficeMax.com
• JPMorganChase.com
• 1up.com
• PowerSentry.com
(and more)
Source: http://www.ociweb.com/mark/programming/iBATIS.html#WhoUses