首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring jdbctemplate

Spring jdbctemplate
EN

Stack Overflow用户
提问于 2013-01-01 11:31:31
回答 2查看 2.2K关注 0票数 0

我是Spring MVC和JDBCTemplate的新手,在这方面非常需要帮助。

代码语言:javascript
复制
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://" />
    <property name="username" value="user" />
    <property name="password" value="pwd" />
</bean>

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>

在我的DAOImpl类中,我有以下代码:

代码语言:javascript
复制
@Repository
public class ABCDAOImpl implements ABCDAO
{

    private String INSERT_SQL = null;
    private JdbcTemplate jdbcTemplate;

    @Autowired
    public void setDataSource(DataSource dataSource)
    {
        this.jdbcTemplate = new JdbcTemplate( dataSource );
    }

    @Override
    public boolean insertDataInDataBase(final Object obj)
    {
        boolean insertSuccessful = false;

        INSERT_SQL = "INSERT INTO XXX " +
                "(AA, BB, CC, DD, EE, " +
                "FF, GG, HH, II) VALUES (?,?,?,?,?,?,?,?,?)";

    KeyHolder keyHolder = new GeneratedKeyHolder();
    jdbcTemplate.update(new PreparedStatementCreator() 
            {public PreparedStatement createPreparedStatement(Connection connection) 
                           throws SQLException
                {
                  PreparedStatement ps = null;
                  ps = connection.prepareStatement(INSERT_SQL);
                  ps.setString(1, xx);
                  ps.setString(2, xx);
                  ps.setString(3, xx);
                      ps.setString(4, xx);
                  ps.setString(5, xx);
                  ps.setString(6, xx;
                  ps.setString(7, xx);
                  ps.setString(8, xx);
                  ps.setString(9, xx);
                  return ps;
                  }}, keyHolder);

        return insertSuccessful;    
    }
}

测试类:

代码语言:javascript
复制
  import static org.junit.Assert.assertTrue;
    import org.junit.Before;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = {"classpath:applicationContext.xml"})
    public class ABCDAOImplTest
    {
    private Object object = new Object();
    private ABCDAOImpl abcDAOImpl;

    @Before
    public void setup()
    {
        object.setAllVaribles();
        abcDAOImpl = new ABCDAOImpl();
    }

    @Test
    public void testRepositoryInsert()
    {
        System.out.println(abcDAOImpl.insertDataInDataBase(object));
        assertTrue(abcDAOImpl.insertDataInDataBase(object));
    }

}

然后,我使用PreparedStatementCreator使用jdbcTemplate执行一条insert语句。

现在,我正在尝试测试(没有模拟,我只是为了测试而硬编码这些值。)当我运行这个测试时,它告诉我jdbcTemplate为空。是我的代码有问题,还是我测试它的方式有问题?任何帮助都将不胜感激。

新年快乐:)

现在我得到了另一个异常:“加载ApplicationContext失败。”

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-01 13:02:59

最明显的答案是,您的测试没有调用setDataSource()方法,也没有执行任何其他会导致创建JdbcTemplate的操作。但是,您还没有展示足够的代码来让人指出问题所在。

更新:在你的测试中,你说的是abcDAOImpl = new ABCDAOImpl();,仅此而已。您希望如何注入JdbcTemplate/DataSource?它不会通过魔法实现的。你要么手动完成所有的连接,要么让Spring将DAO注入到你的测试中。为此,只需添加一个如下所示的字段:

代码语言:javascript
复制
@Autowired
private ABCDAO abcDao;
票数 1
EN

Stack Overflow用户

发布于 2013-01-01 13:18:02

代码语言:javascript
复制
<import resource="classpath:applicationContext.xml" />
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14107655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档