Spring+Ibatis框架整合学习

最近温习了一下J2EE框架里面的Spring+Ibatis的结合,写了一个DEMO,支持多数据源,主要用于以后学习第三方的分布式事务框架以及Spring本身支持的一些特性。这里只贴出主要代码供大家参考,具体代码请下载附件。
1. 对象 User、Role User.java Role.java
2. Dao层 接口UserRoleBindingDao 实现UserRoleBindingDaoImpl
UserRoleBindingDaoImpl.java
public class UserRoleBindingDaoImpl extends SqlMapClientDaoSupport implements UserRoleBindingDao{

public void bindUserRole(User user, Role role) {
long nextId = (Long)this.getSqlMapClientTemplate().queryForObject("selectId");
Map map = new HashMap();
map.put("id", nextId);
map.put("userId", user.getUserId());
map.put("roleId", role.getRoleId());
this.getSqlMapClientTemplate().insert("bindUserRole", map);

}

}

3. Service层 接口UserRoleBindingService 实现UserRoleBindingServiceImpl
UserRoleBindingServiceImpl.java
public class UserRoleBindingServiceImpl implements UserRoleBindingService{

private UserService userService;
private RoleService roleService;
private UserRoleBindingDao userRoleBindingDao;

public void setUserService(UserService userService) {
this.userService = userService;
}

public void setRoleService(RoleService roleService) {
this.roleService = roleService;
}

public void setUserRoleBindingDao(UserRoleBindingDao userRoleBindingDao) {
this.userRoleBindingDao = userRoleBindingDao;
}

public void bindUserRole(User user, Role role) {
this.userService.saveUser(user);
this.roleService.saveRole(role);
this.userRoleBindingDao.bindUserRole(user, role);
}

}

4. 配置文件
SQL映射文件 userRoleBinding.xml
<sqlMap namespace="role">

<select id="selectId" resultClass="java.lang.Long">
select seq_t_user_role.NEXTVAL FROM DUAL
</select>

<insert id="bindUserRole" parameterClass="map">
insert into t_user_role values (#id#,#userId#,#roleId#)
</insert>


</sqlMap>

所有SQL存取文件 sql-map-config.xml
<sqlMapConfig>
<settings enhancementEnabled="true" maxTransactions="10"
maxRequests="10" maxSessions="20" />
<sqlMap resource="dao/user.xml"/>
<sqlMap resource="dao/role.xml"/>
<sqlMap resource="dao/userRole.xml"/>
</sqlMapConfig>

数据源配置文件 jdbc.properties
  jdbc1.driverClassName=oracle.jdbc.xa.client.OracleXADataSource
jdbc1.url=jdbc:oracle:thin:@localhost:1521:mgodb
jdbc1.username=user
jdbc1.password=user

jdbc2.driverClassName=oracle.jdbc.xa.client.OracleXADataSource
jdbc2.url=jdbc:oracle:thin:@localhost:1521:mgodb
jdbc2.username=role
jdbc2.password=role

Bean配置文件 applicationContext-database.xml
<bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>${jdbc1.driverClassName}</value>
</property>
<property name="url">
<value>${jdbc1.url}</value>
</property>
<property name="username">
<value>${jdbc1.username}</value>
</property>
<property name="password">
<value>${jdbc1.password}</value>
</property>
</bean>

<bean id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName">
<value>${jdbc2.driverClassName}</value>
</property>
<property name="url">
<value>${jdbc2.url}</value>
</property>
<property name="username">
<value>${jdbc2.username}</value>
</property>
<property name="password">
<value>${jdbc2.password}</value>
</property>
</bean>

<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocations">
<list>
<value>classpath:/dao/sql-map-config.xml</value>
</list>
</property>
</bean>

<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath*:jdbc/jdbc.properties</value>
</list>
</property>
</bean>

applicationContext-dao.xml
<bean id="userDao" class="com.mangocity.spring.dao.impl.UserDaoImpl">
<property name="dataSource"><ref bean="dataSource1"/></property>
<property name="sqlMapClient"><ref bean="sqlMapClient"/></property>
</bean>

<bean id="roleDao" class="com.mangocity.spring.dao.impl.RoleDaoImpl">
<property name="dataSource"><ref bean="dataSource2"/></property>
<property name="sqlMapClient"><ref bean="sqlMapClient"/></property>
</bean>

<bean id="userRoleBindingDao" class="com.mangocity.spring.dao.impl.UserRoleBindingDaoImpl">
<property name="dataSource"><ref bean="dataSource1"/></property>
<property name="sqlMapClient"><ref bean="sqlMapClient"/></property>
</bean>

applicationContext-service.xml
<bean id="userService"
class="com.mangocity.spring.service.impl.UserServiceImpl">
<property name="userDao">
<ref bean="userDao" />
</property>
</bean>

<bean id="roleService"
class="com.mangocity.spring.service.impl.RoleServiceImpl">
<property name="roleDao">
<ref bean="roleDao" />
</property>
</bean>

<bean id="userRoleBindingService"
class="com.mangocity.spring.service.impl.UserRoleBindingServiceImpl">
<property name="userService">
<ref bean="userService" />
</property>
<property name="roleService">
<ref bean="roleService" />
</property>
<property name="userRoleBindingDao">
<ref bean="userRoleBindingDao" />
</property>
</bean>

applicationContext-beans.xml
<import resource="applicationContext-service.xml"/>
<import resource="applicationContext-dao.xml"/>
<import resource="applicationContext-database.xml"/>

5. 日志输出组件log4j log4j.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="[%-d{HH:mm:ss}] %p [%t] %c{10}.%M(%L) | %m%n"/>
</layout>
</appender>

<appender name="FILE"
class="org.apache.log4j.DailyRollingFileAppender">

<param name="File" value="/logs/orderstatusServer.log" />
<param name="Append" value="true" />
<!--param name="Threshold" value="info" /-->

<!-- Rollover at midnight each day -->
<param name="DatePattern" value="'.'yyyy-MM-dd" />

<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="[%-d{HH:mm:ss}] %p [%t] %c{5}.%M(%L) | %m%n" />
</layout>
</appender>

<appender name="FILE_Server"
class="org.apache.log4j.DailyRollingFileAppender">

<param name="encoding" value="UTF-8" />
<param name="File" value="logs/orderstatusServer.log" />
<param name="Append" value="true" />
<!--param name="Threshold" value="info" /-->

<!-- Rollover at midnight each day -->
<param name="DatePattern" value="'.'yyyy-MM-dd" />

<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="[%-d{HH:mm:ss}] | %m%n" />
</layout>
</appender>

<!-- Suppress success logging from InteractiveAuthenticationSuccessEvent -->
<logger name="org.acegisecurity">
<level value="ERROR"/>
</logger>

<logger name="com.ibatis">
<level value="ERROR"/>
</logger>

<logger name="org.apache.log4j">
<level value="DEBUG"/>
</logger>

<logger name="org.springframework">
<level value="INFO"/>
</logger>

<logger name="java.sql">
<level value="ERROR"/>
</logger>

<logger name="java.sql.ResultSet">
<level value="ERROR"/>
</logger>

<root>
<level value="INFO"/>
<appender-ref ref="FILE"/>
<appender-ref ref="CONSOLE"/>
</root>

</log4j:configuration>

6. 测试类,Service层进行调用测试 ServiceTest.java
public class ServiceTest extends TestCase{

public UserRoleBindingService service ;

public void setUp(){
ApplicationContext ac = new ClassPathXmlApplicationContext("spring/applicationContext-beans.xml");
this.service = (UserRoleBindingService)ac.getBean("userRoleBindingService");
}

public void testBindingUserRole(){
User user = new User();
user.setUserId(7);
user.setUserName("zwustudy");
Role role = new Role();
role.setRoleId(7);
role.setRoleName("vip1");
service.bindUserRole(user, role);
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值