Professional Documents
Culture Documents
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.