在做测试之前,我们需要对数据进行备份,用DBUnit可以很方便的对数据库中的数据进行备份和恢复。
下面我们来看看如何通过ant脚本命令才实现。
目录结构
- 项目结构图
- 需要用到的jar
- 运行前准备
- 运行与结果
- 源代码
- Ant编译文件
- 数据库脚本
- 参考文档
- 完整项目源代码
项目结构图
需要用到的jar
- commons-logging-1.1.1.jar
- dbunit-2.4.8.jar
- junit-4.9b2.jar
- mysql-connector-java-3.1.12-bin.jar
- slf4j-api-1.6.1.jar
- slf4j-jcl-1.6.1.jar
运行前准备
- 在MySQL的客户端,如Navicat Premium中执行sql文件夹中的dbup.sql文件,创建数据库和表;
- 打开Ant面板,eclipse中,Window -> Show View -> Others,然后输入 ant,选ant,然后点【OK】按钮;
- 将build.xml拖拽到Ant面板;
运行与结果
- 选择Ant面板中的dbunit-ant,点击三角箭头,可以看到不同的target;
- 选择export-all:
执行编译:点击右键,Run As -> Ant Build;
执行结果:导出所有表的数据至xml文件,存放在data/all-data.xml中; - 选择import-all:
执行编译:点击右键,Run As -> Ant Build;
执行结果:导入data/all-data.xml文件中的数据到数据库中; - 选择export-table-student:
执行编译:点击右键,Run As -> Ant Build;
执行结果:导出student表的查询结果及user表的全部数据到data/export-student.xml中; - 选择compare:
执行编译:点击右键,Run As -> Ant Build;
执行结果:比对数据库中的数据与data/init-data.xml文件中的数据。
源代码
Ant编译文件
build.xml
<?xml version="1.0" encoding="UTF-8"?> <project name="dbunit-ant" basedir="." default=""> <property name="db.driver" value="com.mysql.jdbc.Driver" /> <property name="db.url" value="jdbc:mysql://127.0.0.1:3306/dbup?characterEncoding=UTF-8" /> <property name="db.username" value="root" /> <property name="db.password" value="1234" /> <path id="classpath"> <fileset dir="${basedir}/libs/"> <include name="*.jar" /> </fileset> </path> <taskdef name="dbunit" classname="org.dbunit.ant.DbUnitTask" classpathref="classpath" /> <!-- 导出所有数据到xml文件--> <target name="export-all"> <dbunit driver="${db.driver}" url="${db.url}" userid="${db.username}" password="${db.password}" supportBatchStatement="true"> <export format="xml" dest="data/all-data.xml" /> </dbunit> </target> <!-- 导出查询结果和表数据到xml文件--> <target name="export-table-student"> <dbunit driver="${db.driver}" url="${db.url}" userid="${db.username}" password="${db.password}" supportBatchStatement="true"> <export format="xml" dest="data/export-student.xml"> <query name="student" sql="SELECT id, name, sex, birthday FROM STUDENT WHERE id=1" /> <table name="user" /> </export> </dbunit> </target> <!-- 比对数据库中的数据与data/init-data.xml文件中的数据 --> <target name="compare"> <dbunit driver="${db.driver}" url="${db.url}" userid="${db.username}" password="${db.password}" supportBatchStatement="true"> <compare format="xml" src="data/init-data.xml" /> </dbunit> </target> <!-- 导入data/all-data.xml文件中的数据到数据库中 --> <target name="import-all"> <dbunit driver="${db.driver}" url="${db.url}" userid="${db.username}" password="${db.password}" supportBatchStatement="true"> <operation format="xml" type="CLEAN_INSERT" src="data/all-data.xml" /> </dbunit> </target> </project>
数据库脚本
dbup.sql
/*
Navicat MySQL Data Transfer
Source Server : localhost
Source Server Version : 50525
Source Host : localhost:3306
Source Database : dbup
Target Server Type : MYSQL
Target Server Version : 50525
File Encoding : 65001
Date: 2014-10-11 14:27:06
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `role`
-- ----------------------------
DROP TABLE IF EXISTS `role`;
CREATE TABLE `role` (
`id` varchar(20) NOT NULL DEFAULT '',
`roleName` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of role
-- ----------------------------
INSERT INTO `role` VALUES ('1', '管理员');
INSERT INTO `role` VALUES ('2', '普通用户');
-- ----------------------------
-- Table structure for `student`
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`id` varchar(20) NOT NULL DEFAULT '',
`name` varchar(20) DEFAULT NULL,
`sex` varchar(10) DEFAULT NULL,
`birthday` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('1', '2', '3', '4');
-- ----------------------------
-- Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` varchar(20) NOT NULL DEFAULT '',
`name` varchar(20) DEFAULT NULL,
`role_id` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `ref_id` (`role_id`),
CONSTRAINT `ref_id` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('1', '张三', '1');
INSERT INTO `user` VALUES ('2', '李四', '2');
参考文档
完整源代码