这是可以做到与iBatis的春+(is this possible to do with iBati

2019-09-28 20:30发布

使用具有弹簧支撑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只是为了测试案例...

Answer 1:

可以在接口取出来的照片,仍然有这方面的工作?

别拿出来的接口。 它有一个很好的理由(如代理生成的交易,AOP,嘲笑测试服务等)

你为什么想要把它拿出来? 什么是焦虑导致它适合你?

设计/设置是可以改变的,因此调用DAO简直是(即使需要一个抽象基类)

你为什么叫“新”? 如果你使用Spring,你应该使用App上下文中注入这一点。 如果你所说的“新的”,这不是Spring的控制之下。 这应该是整点。



Answer 2:

该接口有从直接的实现,这一点,在一般情况下,好的做法取决于你脱钩。 它应该不所有的接口做工精细,但它是更好地依赖于抽象而不是实现。

至于测试,以及使用接口,它变得更加容易使用 DAO来测试代码,你可以创建一个“模拟”实现这一点,只是返回虚拟数据和“注入”在你的单元测试这个手动-您客户端代码无法分辨这和真正的DAO所有它所知道的是接口的区别。



Answer 3:

我能想到的1个大原则取出接口将打破......“面向对象”,最重要的是,无力改变方法签名不中断客户端调用你的代码。 这本身就阻止我在我的轨道。 好问题!虽然 在许多订婚,我通常问这个问题。 或者干脆人们想要编程抽象类。 =)



文章来源: is this possible to do with iBatis + spring