Spring
Copyright 2007 SpringSource. Copying, publishing or distributing without express written permission is prohibited.
Topics in this Session
Introduction
Basic Configuration
Parameter Options
Joins
Advanced Usage
Summary
2
Topics in this Session
Introduction
Basic Configuration
Parameter Options
Joins
Advanced Usage
Summary
3
What Is iBATIS? (1)
4
What Is iBATIS? (2)
5
Simple Example
6
Topics in this Session
Introduction
Basic Configuration
Parameter Options
Joins
Advanced Usage
Summary
7
Wiring iBATIS
<sqlMapConfig>
<sqlMap resource="rewards/internal/restaurant/Restaurant.xml"/>
</sqlMapConfig>
8
Data Mapping
9
SqlMap Files
<sqlMap namespace="Restaurant">
<typeAlias alias="restaurant" type="rewards.internal.restaurant.Restaurant"/>
<resultMap id="restaurant-result" class="restaurant">
<result property="number" column="MERCHANT_NUMBER"/>
<result property="name" column="NAME"/>
</resultMap>
<select id="findByMerchantNumber"
resultMap="restaurant-result" parameterClass="string">
select MERCHANT_NUMBER, NAME from T_RESTAURANT
where MERCHANT_NUMBER = #value#
</select>
Substitutes the value passed in
<insert id="insertRestaurant" parameterClass="restaurant">
insert into T_RESTAURANT (MERCHANT_NUMBER, NAME)
values (#number#, #name#)
</insert>
</sqlMap> Bean property names from restaurant
10
SqlMapClientTemplate
11
Wiring Your Objects In Spring
<bean id="sqlMapClient"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="rewards/internal/sqlmap-config.xml"/>
<property name="dataSource" value="dataSource"/>
</bean>
<bean id="restaurantRepository"
class="rewards.internal.IBatisRestaurantRepository">
<constructor-arg ref="sqlMapClient" />
</bean>
12
SqlMapClientDaoSupport
<bean id="sqlMapClient"
class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="rewards/internal/sqlmap-config.xml"/>
<property name="dataSource" value="dataSource"/>
</bean>
<bean id="restaurantRepository"
class="rewards.internal.IBatisRestaurantRepository">
<constructor-arg ref="sqlMapClient" /> configuration looks the same
</bean>
13
Topics in this Session
Introduction
Basic Configuration
Parameter Options
Joins
Advanced Usage
Summary
14
Type Handlers
15
Writing A Type Handler
<sqlMapConfig>
<typeHandler javaType="common.money.MonetaryAmount"
callback="rewards.internal.MonetaryAmountTypeHandlerCallback"/>
...
</sqlMapConfig>
16
Inline Parameter Attributes
17
Stored Procedures
assertEquals("oldval", paramMap.get("aKey"));
sqlMapClientTemplate.update("myProc", paramMap);
assertEquals("newval", paramMap.get("aKey"));
18
Topics in this Session
Introduction
Basic Configuration
Parameter Options
Joins
Advanced Usage
Summary
19
1:1 or N:1 (Lazy)
20
1:1 or N:1 (Eager)
21
1:N (Lazy)
<sqlMap namespace="ProductCategory">
<resultMap id="categoryResult" class="com.ibatis.example.Category">
<result property="id" column="cat_id"/>
<result property="description" column="cat_description"/>
<result property="productList" column="cat_id"
select="getProductsByCategoryId"/>
</resultMap>
22
1:N (Eager)
<sqlMap namespace="ProductCategory">
<resultMap id="categoryResult" class="com.ibatis.example.Category" groupBy="id">
<result property="id" column="cat_id"/>
<result property="description" column="cat_description"/> What to base parent on
<result property="productList" resultMap="ProductCategory.productResult"/>
</resultMap>
Must be java.util.Collection or java.util.List
<resultMap id="productResult" class="com.ibatis.example.Product">
<result property="id" column="prd_id"/>
<result property="description" column="prd_description"/>
Namespace is required
</resultMap>
23
Topics in this Session
Introduction
Basic Configuration
Parameter Options
Joins
Advanced Usage
Summary
24
ResultObjectFactory
25
Dynamic Queries
26
Batching
@Transactional(propagation = REQUIRED)
public void insertAccounts(List<Account> accounts) {
sqlMapClientTemplate.execute(new SqlMapClientCallback() {
public Object doInSqlMapClient(SqlMapExecutor executor)
throws SQLException {
executor.startBatch();
for (Account account : accounts) {
executor.update("insertAccount", account);
}
executor.executeBatch();
}
});
}
27
Oracle RefCursors
CREATE OR REPLACE PACKAGE BODY refs_pck IS
FUNCTION get_restrs RETURN REF_CURSOR_T
IS l_cursor REF_CURSOR_T;
BEGIN
OPEN l_cursor FOR SELECT merchant_number, name FROM t_restaurant;
RETURN l_cursor;
END get_restrs;
END refs_pck;
INSERT INTO t_restaurant VALUES(1,'Applebees');
INSERT INTO t_restaurant VALUES(2,'Chillis');
<sqlMap>
<parameterMap id="output" class="map">
Omitted for slide space
<parameter property="theList" javaType="java.sql.ResultSet"
jdbcType="ORACLECURSOR" mode="OUT" resultMap="restaurant-result" />
</parameterMap>
<procedure id="getRestrs" parameterMap="output">{ ? = call refs_pck.get_restrs }</procedure>
</sqlMap>
28
Topics in this Session
Introduction
Basic Configuration
Parameter Options
Joins
Advanced Usage
Summary
29
Summary
30
Lab
Copyright 2007 SpringSource. Copying, publishing or distributing without express written permission is prohibited.