mybatis对数据库操作
事情是这样的,今天一不小心接到一个这样的需求,调用远程接口获取数据,每周定时更新全部数据,这不挺好整的嘛!!!!!!!!!
但是,更新之前需要把之前的那个表的数据做备份,把新获取的数据重新创建一张表,插入到新新建的这张表中,后续更新的话就需要把之前备份的那张表删除,把当前的表备份,在次创建新表存数据。我懵逼了。不过下来想想也还好啦。。。。。
假设表结构是这样的
newTable(创建的新表,存取当天获取的新数据)–>tableBack(备份表,上次获取数据)
就这样搞。
实操:哈哈哈哈哈
1.首先是接口层哈,在获取数据后你首先得判断数据库是否存在备份表吧,那就来判断下吧。
/**
* 查询表是否存在tableBack
* */
@Select("select count(*) from information_schema.TABLES where table_name=#{tableName}")
int isExistTable(@Param("tableName")String tableName);//tableName=tableBack
2.如果存在的话是不是要删除呢?对吧
/**
* 删除表(不能防止sql注入)
* */
@Update("DROP TABLE IF EXISTS ${tableName}")
int deleteTable(@Param("tableName")String tableName);
注意哦!mybatis中的 #{} 和 ${} 的区别哦,#{}可以进行SQL的预编译,但是 ${}是不行的呢。
此处要进行删除表的操作就得使用第二个拿到传入表名,因为使用#{}进行操作会报错的。
3.接下来是不是得判断有没有newtable吧!看下面
/**
* 查询表是否存在newtable
* */
@Select("select count(*) from information_schema.TABLES where table_name=#{tableName}")
int isExistTable(@Param("tableName")String tableName);//tableName=newtable
4.如果有的话是不是得把newtable的表名修改成tableBack,没问题吧!
/**
* 通用但是不能防止sql注入
* */
@Update("ALTER TABLE ${tableName} RENAME TO ${newTableName}")
void renameTestTableName(String tableName,String newTableName);
//参数tableName=newtable,newTableName=tableBack
5.修改名字后,是不是数据库就只存在一张表叫做tableBack呢。现在我们就要创建一张表叫做newtable吧!
@Update("CREATE TABLE ${tableName} (\n" +
" `id` varchar(36) NOT NULL COMMENT 'uuid',\n" +
" `name` varchar(255) DEFAULT NULL COMMENT '名字',\n" +
" `age` varchar(255) DEFAULT NULL COMMENT '年龄',\n" +
" `sex` varchar(255) DEFAULT NULL COMMENT '公母',\n" +
" PRIMARY KEY (`id`)\n" +
") ENGINE=InnoDB DEFAULT CHARSET=utf8;")
int createMainTable(String tableName);// tableName=newtable
6.向数据库插入数据
@Insert("<script>" +
"insert into(name,age,sex) " +
"values" +
"<foreach collection =\"list\" item=\"ll\" separator =\",\">\n" +
"(#{ll.name},#{ll.age),#{ll.sex}" &