- package com.taobao.dbunit.dao;
- import java.sql.SQLException;
- import javax.sql.DataSource;
- import org.dbunit.Assertion;
- import org.dbunit.database.DatabaseConnection;
- import org.dbunit.database.IDatabaseConnection;
- import org.dbunit.dataset.DataSetException;
- import org.dbunit.dataset.DefaultDataSet;
- import org.dbunit.dataset.DefaultTable;
- import org.dbunit.dataset.IDataSet;
- import org.dbunit.dataset.xml.FlatXmlDataSet;
- import org.dbunit.operation.DatabaseOperation;
- import org.junit.Assert;
- import org.junit.Before;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.core.io.ClassPathResource;
- import org.springframework.jdbc.datasource.DataSourceUtils;
- import org.springframework.test.context.ContextConfiguration;
- import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
- import org.springframework.test.context.transaction.TransactionConfiguration;
- @ContextConfiguration(locations = { "classpath:testApplicationContext.xml" })
- @TransactionConfiguration(defaultRollback = true)
- public class BaseDaoTest extends AbstractTransactionalJUnit4SpringContextTests {
- @Autowired
- private DataSource dataSource;
- private IDatabaseConnection conn;
- @Before
- public void initDbunit() throws Exception {
- conn = new DatabaseConnection(DataSourceUtils.getConnection(dataSource));
- }
- /**
- * 清空file中包含的表中的数据,并插入file中指定的数据
- *
- * @param file
- * @throws Exception
- */
- protected void setUpDataSet(String file) throws Exception {
- IDataSet dataset = new FlatXmlDataSet(new ClassPathResource(file)
- .getFile());
- DatabaseOperation.CLEAN_INSERT.execute(conn, dataset);
- }
- /**
- * 验证file中包含的表中的数据和数据库中的相应表的数据是否一致
- *
- * @param file
- * @throws Exception
- */
- protected void verifyDataSet(String file) throws Exception {
- IDataSet expected = new FlatXmlDataSet(new ClassPathResource(file)
- .getFile());
- IDataSet dataset = conn.createDataSet();
- for (String tableName : expected.getTableNames()) {
- Assertion.assertEquals(expected.getTable(tableName), dataset
- .getTable(tableName));
- }
- }
- /**
- * 清空指定的表中的数据
- *
- * @param tableName
- * @throws Exception
- */
- protected void clearTable(String tableName) throws Exception {
- DefaultDataSet dataset = new DefaultDataSet();
- dataset.addTable(new DefaultTable(tableName));
- DatabaseOperation.DELETE_ALL.execute(conn, dataset);
- }
- /**
- * 验证指定的表为空
- *
- * @param tableName
- * @throws DataSetException
- * @throws SQLException
- */
- protected void verifyEmpty(String tableName) throws DataSetException,
- SQLException {
- Assert.assertEquals(0, conn.createDataSet().getTable(tableName)
- .getRowCount());
- }
- }
- @Test
- public void updateUser() throws Exception {
- setUpDataSet("com/taobao/dbunit/dao/user001.xml");
- User user = new User();
- user.setNick("user001");
- user.setPassword("password002");
- userDao.update(user);
- verifyDataSet("com/taobao/dbunit/dao/user001_updated.xml");
- }
相关推荐
基于HBase的Dao基类和实现类开发一12.基于HBase的Dao基类和实现类开发二13.项目1-地区销售额-需求分析和架构设计14.项目1-地区销售额-Spout融合Kafka Consumer及线程安全测试15.项目1-地区销售额-Bolt业务逻辑处理一...
在IT行业中,DAO(Data Access Object)模式是一种常见的设计模式,用于封装对数据库的...同时,这也是一个良好的机会,让你了解如何组织和设计可复用的代码,以及如何使用测试驱动开发(TDD)的方法来保证代码质量。
在具体实现时,泛型DAO模板通常会有一个公共的基类,这个基类会包含对SessionFactory和Session的管理。SessionFactory是Hibernate的配置对象,而Session则是与数据库交互的主要接口。基类会提供如`getSession()`和`...
1. **抽象基类**:创建一个通用的DAO基类,包含一些通用的数据库操作,如执行SQL查询、事务管理等。子类可以继承这个基类并覆盖或添加特定的数据库操作。 2. **模板方法设计模式**:利用模板方法模式,将共有的操作...
在SSH项目中,可以创建一个基类`HibernateDAO`,包含如`save()`, `update()`, `delete()`, `getById()`等基本操作,然后其他特定业务的DAO继承自这个基类,以实现通用性和重用性。 3. **设计模式的应用**:通用DAO...
DAO模式的核心思想是创建一个专门负责与数据库交互的接口或抽象类,即DAO接口或基类,然后实现这个接口或继承这个基类来处理具体的数据库操作。这样,当需要修改数据库访问逻辑时,只需要改动DAO实现,而不会影响到...
而`Web_Test`可能是一个Web应用测试目录,里面包含了测试用例或测试配置,用于验证泛型DAO的正确性。 综上所述,泛型DAO是Java开发中一个强大的工具,结合了泛型、源码理解和工具使用,能有效提升数据访问层的代码...
`HibernateTemplate`封装了Hibernate的会话管理,提供了一套便捷的API,而`HibernateDaoSupport`则为DAO实现提供了一个基类,包含了SessionFactory的初始化和关闭。 - **MyBatis**:Spring整合MyBatis时,可以通过...
这是一个通用的DAO基类,通常会包含一些通用的数据库操作方法,如增删改查。GenenicDao会利用Spring的JdbcTemplate或Hibernate的Session接口来执行SQL语句。Spring的JdbcTemplate提供了简单易用的API,用于执行SQL...
DAO模式的核心思想是通过创建一个独立于具体数据库操作的对象(即DAO),来封装对数据库的访问细节,这样可以使得业务代码不直接依赖于具体的数据库API,提高了代码的可测试性和可维护性。 在现代Java应用中,尤其...
- **继承与抽象**:创建一个基类DAO,将共性功能如连接管理、事务处理等抽象出来,子类只负责特定数据表的业务逻辑。 - **模板方法设计模式**:在基类中定义模板方法,子类只提供特定的实现细节。 - **ORM框架**...
此外,还可以考虑创建一个通用的DAO基类,提供共有的功能,如连接池管理。 综上所述,DAO模式是构建企业级应用的重要设计模式,它在数据访问层提供了灵活性、可扩展性和可测试性。"DAO.pdf"文档可能会深入探讨这些...
在本文中,我们看到一个使用 DbUnit 进行 SqlMap(iBATIS 的一部分,用于映射 SQL 查询到 Java 代码)DAO 单元测试的例子。SqlMap 是一个流行的 ORM(Object-Relational Mapping)框架,用于处理 SQL 数据库与 Java ...
此外,Spring的JdbcDaoSupport类可以作为所有基于JDBC的DAO的基类,它提供了与JdbcTemplate的集成。 6. **AOP支持**:Spring的AOP模块可以创建拦截器来增强DAO方法,例如添加日志、性能监控等功能。`spring-aop.jar...
DAO设计模式是软件工程中常见的一个模式,主要用于隔离业务逻辑层与数据存储层的交互。DAO接口定义了对特定数据源的所有操作,而其实现类则负责具体的数据访问细节。通用DAO则是这一模式的扩展,提供了一套适用于多...
在Spring中,我们可以创建一个继承自`org.mybatis.spring.SqlSessionDaoSupport`的DAO基类,然后为每个数据访问对象创建一个具体的实现类。在实现类中,我们可以使用`SqlSessionTemplate`或`SqlSession`来执行...
3. **避免冗余**:尽量减少重复的测试代码,可以通过测试基类或测试辅助类来重用公共逻辑。 4. **可读性**:测试应该清晰易懂,命名要能反映测试的目的,注释要简洁明了。 5. **持续集成**:将单元测试集成到持续...
结合给出的文件,我们可以看到一个完整的DAO层测试方案,从测试类的编写到连接池的配置,再到测试的执行和结果分析。这充分展示了TestNG在软件开发中的重要作用,即确保代码质量,降低维护成本。
在这个例子中,`BaseDao`是一个抽象基类,它使用了泛型T来表示任何类型的实体。构造函数接收实体类的Class对象,用于获取表名。`insert()`方法使用反射调用`execute()`方法执行SQL,这里省略了具体的JDBC操作细节,...
泛型DAO是一个通用的DAO实现,它使用Java的泛型特性,可以适用于任何继承自特定基类或者实现特定接口的数据实体类。这样,我们只需要编写一次DAO的通用实现,然后在需要的地方通过指定具体的类型即可。 下面是一个...