使用具有弹簧支撑ibatis的通常的成语以下。 或者,这就是我正在做的。 请让我知道,如果这是可以做到更好的办法?
豆类XML:
<bean id="DataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="jdbc/some/som1/my/mydb"/>
</bean>
<bean id="SqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:sql-map-config-oracle.xml"/>
<property name="dataSource" ref="DataSource"/>
</bean>
<bean id="myDAO" class="com.reports.MyUserAccessDAO">
<property name="sqlMapClient" ref="SqlMapClient"/>
<property name="dataSource" ref="DataSource"/>
</bean>
接口:
public interface MyUserAccessIface {
public SomeBean getUserReports (String org);
}
DAO:
public class MyUserAccessDAO extends SqlMapClientDaoSupport implements MyUserAccessDAO {
public SomeBean getUserReports (String org)
{
SomeBean bean = new SomeBean();
//code for parameters goes here
getSqlMapClientTemplate().queryForList("namesp.userreport", parm);
//fetch the result from parm and put them in SomeBean
return bean
}
}
调用DAO:
MyUserAccessIface iBatisDAO =
(MyUserAccessIface) ApplicationInitializer.getApplicationContext().getBean("myDAO");
即使这工作得很好,我不理解的接口的需要。
问题
- 可以在接口取出来的照片,仍然有这方面的工作?
可以设计/设置进行改变,以便该呼叫到DAO是简单地(即使需要碱抽象类)
MyUserAccessDAO mydao =新MyUserAccessDAO(); mydao.getUserReports( “嗒嗒”);
我问过的问题沿着这些线路几天回,但挣扎了2天,发现更多的事情出来后,我现在再次问到这个问题。 如果可能的话,请提供你会改变什么代码片段/添加。
这种设计单元测试,因为一切都驻留在容器内不起作用。 如果我得到的工作,那么我会补充说,这个问题以及(对于信息的目的)。
另外,我觉得有人试图使弹簧+ ibatis的工作......这将结束是开始的好地方。
编辑:
就像我上面提到的,我想打电话给我的DAO这样的(或者我很好,沿传递某物作为构造参数):
MyUserAccessDAO mydao = new MyUserAccessDAO(); mydao.getUserReports("blah");
为了实现上述我会下面一行在我的DAO
setSqlMapClient((SqlMapClient)ApplicationInitializer.getApplicationContext().getBean("SqlMapClient"));
还需要知道什么都覆盖到能够编写测试用例这一点。 测试用例将无法访问该容器内任何因此它将依赖于驱动程序的数据源...
因为我违背这里最好的做法......我不介意完全改变我的DAO只是为了测试案例...