Ibatis,Spring整合(注解方式注入)
applicationContext.xml
<?
xml version="1.0" encoding="UTF-8"
?>
<
beans
xmlns
="http://www.springframework.org/schema/beans"
xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p
="http://www.springframework.org/schema/p"
xmlns:context
="http://www.springframework.org/schema/context"
xmlns:aop
="http://www.springframework.org/schema/aop"
xmlns:tx
="http://www.springframework.org/schema/tx"
xsi:schemaLocation
="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd"
>
<!--
自动扫描Bean
-->
<
context:component-scan
base-package
="com.tq365"
/>
<!--
强制使用CGLIB代理
-->
<
aop:aspectj-autoproxy
proxy-target-class
="true"
/>
<!--
DataSource数据源
-->
<
bean
id
="dataSource"
class
="org.apache.commons.dbcp.BasicDataSource"
destroy-method
="close"
>
<
property
name
="driverClassName"
>
<
value
>
com.mysql.jdbc.Driver
</
value
>
</
property
>
<
property
name
="url"
>
<
value
>
jdbc:mysql://localhost:3306/ibatisorm
</
value
>
</
property
>
<
property
name
="username"
>
<
value
>
root
</
value
>
</
property
>
<
property
name
="password"
>
<
value
>
root
</
value
>
</
property
>
</
bean
>
<!--
Spring iBatis SqlMapClient
-->
<
bean
id
="sqlMapClient"
class
="org.springframework.orm.ibatis.SqlMapClientFactoryBean"
>
<
property
name
="configLocation"
value
="WEB-INF/sqlmap-config.xml"
/>
<
property
name
="dataSource"
ref
="dataSource"
/>
</
bean
>
<!--
事务管理DataSourceTransactionManager
-->
<
bean
id
="txManager"
class
="org.springframework.jdbc.datasource.DataSourceTransactionManager"
>
<
property
name
="dataSource"
ref
="dataSource"
/>
</
bean
>
<!--
启动spring注解功能
-->
<
tx:annotation-driven
transaction-manager
="txManager"
/>
<
aop:config
>
<
aop:pointcut
id
="baseServiceMethods"
expression
="execution(* com.tq365.samples.ibatis.dao.*.*(..))"
/>
<
aop:advisor
advice-ref
="txAdvice"
pointcut-ref
="baseServiceMethods"
/>
</
aop:config
>
<
aop:aspectj-autoproxy
/>
<
tx:advice
id
="txAdvice"
transaction-manager
="txManager"
>
<
tx:attributes
>
<
tx:method
name
="select*"
read-only
="true"
propagation
="REQUIRED"
/>
<
tx:method
name
="find*"
read-only
="true"
propagation
="REQUIRED"
/>
<
tx:method
name
="save*"
propagation
="REQUIRED"
isolation
="REPEATABLE_READ"
/>
<
tx:method
name
="update*"
propagation
="REQUIRED"
isolation
="REPEATABLE_READ"
/>
<!--
<tx:method name="add*" propagation="REQUIRED" isolation="REPEATABLE_READ" />
-->
<
tx:method
name
="delete*"
propagation
="REQUIRED"
isolation
="REPEATABLE_READ"
/>
</
tx:attributes
>
</
tx:advice
>
</
beans
>
sqlmap-config.xml
<?
xml version="1.0" encoding="UTF-8"
?>
<!
DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"
>
<
sqlMapConfig
>
<
sqlMap
resource
="com/tq365/sqlMap/User.xml"
/>
</
sqlMapConfig
>
User.xml
<?
xml version="1.0" encoding="UTF-8"
?>
<!
DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-2.dtd"
>
<
sqlMap
namespace
="User"
>
<
typeAlias
alias
="User"
type
="com.tq365.samples.ibatis.model.User"
/>
<
resultMap
id
="UserResult"
class
="User"
>
<
result
property
="id"
column
="id"
/>
<
result
property
="username"
column
="username"
/>
<
result
property
="address"
column
="address"
/>
<
result
property
="userpwd"
column
="userpwd"
/>
</
resultMap
>
<
insert
id
="addUser"
>
insert user(
username,
userpwd,
address
)
values(
#username#,
#userpwd#,
#address#
)
</
insert
>
<
select
id
="findUser"
resultMap
="UserResult"
>
select * from user WHERE username=#username# and userpwd=#userpwd#
</
select
>
<
select
id
="findUserById"
resultMap
="UserResult"
>
select * from user WHERE id=#id#
</
select
>
<!--
User表内记录总条数
-->
<
select
id
="getTotalCount"
resultClass
="int"
>
select count(*) from user
</
select
>
<
select
id
="findAllPageUser"
resultMap
="UserResult"
>
select * from user limit #start#,5
</
select
>
</
sqlMap
>
UserDAO.java接口
package
com.tq365.samples.ibatis.dao;
import
org.springframework.stereotype.Repository;
import
com.tq365.samples.ibatis.model.User;
import
com.tq365.sqmples.util.Pages;
/**
* UserDAO 接口
*/
@Repository
public
interface
UserDAO {
/**
* 通过ID查询
*
@param
id
*
@return
*/
public
User findUserById(
int
id);
/**
* 通过ID删除
*
@param
id
*/
public
void
deleteUserById(
int
id);
public
void
addUser(User user);
/**
* 查询指定的User对象
*
@param
user
*
@return
*/
public
User findUser(User user);
/**
* 通过用户名分页查询
*
@param
username
*
@return
*/
public
Pages
<
User
>
findUsersByUsername(String username,
int
pageNo);
/**
* 所有User对象分页
*
@param
pageNo
*
@return
*/
public
Pages
<
User
>
findAllPageUser(
int
pageNo);
}
BaseDao.java
package
com.tq365.samples.ibatis.dao;
import
javax.annotation.PostConstruct;
import
javax.annotation.Resource;
import
org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import
com.ibatis.sqlmap.client.SqlMapClient;
/**
* BaseDao,Dao需继承此Dao
*
@author
archie2010
* since 2011-3-3 下午02:52:36
*/
public
class
BaseDao
extends
SqlMapClientDaoSupport{
@Resource(name
=
"
sqlMapClient
"
)
private
SqlMapClient sqlMapClient;
@PostConstruct
public
void
initSqlMapClient(){
super
.setSqlMapClient(sqlMapClient);
}
}
@PostConstruct注解
在方法上加上注解@PostConstruct,这个方法就会在Bean初始化之后被Spring容器执行(注:Bean初始化包括,实例化Bean,并装配Bean的属性(依赖注入))。它的一个典型的应用场景是,当你需要往Bean里注入一个其父类中定义的属性,而你又无法复写父类的属性或属性的 setter方法时
UserDAOimpl.java
package
com.tq365.samples.ibatis.dao;
import
java.util.ArrayList;
import
java.util.HashMap;
import
java.util.List;
import
java.util.Map;
import
org.springframework.stereotype.Component;
import
com.tq365.samples.ibatis.model.User;
import
com.tq365.sqmples.util.Pages;
/**
* UserDAO接口实现类
*
@author
archie2010
* since 2011-3-3 下午02:54:57
*/
@Component(
"
userDAO
"
)
public
class
UserDAOimpl
extends
BaseDao
implements
UserDAO{
public
User findUserById(
int
id){
return
(User) getSqlMapClientTemplate().queryForObject(
"
findUserById
"
, id);
}
/**
* 添加User
*/
public
void
addUser(User user) {
getSqlMapClientTemplate().insert(
"
addUser
"
, user);
}
/**
* 删除User
*/
public
void
deleteUserById(
int
id) {
getSqlMapClientTemplate().delete(
"
deleteUserById
"
, id);
}
/**
* 查找User
*/
public
User findUser(User user) {
return
(User) getSqlMapClientTemplate().queryForObject(
"
findUser
"
, user);
}
public
int
getTotalCountByUsername(String username){
return
(Integer) getSqlMapClientTemplate().queryForObject(
"
getTotalCountByUsername
"
, username);
}
/**
* User分页
*/
@SuppressWarnings(
"
unchecked
"
)
public
Pages
<
User
>
findUsersByUsername(String username,
int
pageNo) {
Pages
<
User
>
pages
=
new
Pages
<
User
>
(getTotalCountByUsername(username));
pages.setPageSize(
5
);
List
<
User
>
userList
=
new
ArrayList
<
User
>
();
Map
<
String, Object
>
map
=
new
HashMap
<
String, Object
>
();
map.put(
"
username
"
, username);
map.put(
"
start
"
, pages.getStart(pageNo));
userList
=
(List
<
User
>
) getSqlMapClientTemplate().queryForObject(
"
findUsersByUsername
"
, map);
pages.setPageList(userList);
return
pages;
}
/**
* 查询所有记录
*
@return
*/
public
int
getTotalCount(){
return
(Integer) getSqlMapClientTemplate().queryForObject(
"
getTotalCount
"
);
}
@SuppressWarnings(
"
unchecked
"
)
public
Pages
<
User
>
findAllPageUser(
int
pageNo){
Pages
<
User
>
pages
=
new
Pages
<
User
>
(getTotalCount());
pages.setPageSize(
5
);
List
<
User
>
userList
=
new
ArrayList
<
User
>
();
userList
=
(List
<
User
>
) getSqlMapClientTemplate().queryForList(
"
findAllPageUser
"
, pages.getStart(pageNo));
pages.setPageList(userList);
return
pages;
}
}
本文详细介绍Ibatis与Spring框架的整合过程,包括配置文件设置、DAO层接口及实现类编写等步骤。通过示例展示了如何利用注解进行Bean的管理,以及如何配置事务管理器来确保数据操作的一致性和隔离性。
1528

被折叠的 条评论
为什么被折叠?



