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}" +"</foreach >" +"</script>")int insertData(List<PlatformContract> list);

7…在这之后就是要往数据库里面写数据吧。

@ApiOperation("远程调用")@PostMapping("/getInfo")public void getContractInformation() {//获取数据String receiveData = HttpGetDataInterface.httpGetDataByPostWithJsonParam("", ServiceInterface.getServiceUrl(Constants.MANAGER_PLATFORM_CONTRACT_INFO), 30000);//空判断if (!StringUtils.isEmpty(receiveData)) {JSONArray jsonArray = JSONObject.parseArray(receiveData);//空判断//判断数据库是否有备份表(如果存在就删除)int isExist = managerPlatMapper.isExistTable("tableBack");if (isExist > 0) {//存在就删除managerPlatMapper.deleteTable("tableBack");}//判断是否有合用户表(如果有就修改有就修改名字)int existTable = managerPlatMapper.isExistTable("newtable");if (existTable > 0) {//修改表名managerPlatMapper.renameTestTableName(newtable,tableBack);}//创建新的用户表managerPlatMapper.createMainTable("newtable");LinkedList<PlatformContract> save = new LinkedList<>();//数据插入限制(每一千条数据插入一次)int insertLimit = 1000;//对接收的数据做处理for (int i = 0; i < jsonArray.size(); i++) {String string = JSONObject.toJSONString(jsonArray.get(i));JSONObject getContinues = JSONObject.parseObject(string);String continues = (String) getContinues.get("continue");//将json对象转化为数组PlatformContract platformContract = JSONObject.parseObject(string, PlatformContract.class);platformContract.setContinues(continues);save.add(platformContract);if (insertLimit == save.size() || i == jsonArray.size() - 1) {//插入数据managerPlatMapper.insertData(save);//移除数据(获取下一次数据进行处理)save.clear();}}}}

8.通过httpClient远程调用数据

 String receiveData = HttpGetDataInterface.httpGetDataByPostWithJsonParam("", ServiceInterface.getServiceUrl(Constants.MANAGER_PLATFORM_CONTRACT_INFO), 30000);

调用工具

/*** @Author luobo* @Date 2021/8/2 15:45* @description 根据http调用三方接口的通方法*/
public class HttpGetDataInterface {private static final Logger logger = LoggerFactory.getLogger(HttpGetDataInterface.class);private static final String APP_KEY="X-APP-KEY";private static final String APP_KEY_VALUE="1525dcvf5685";private static final String APP_ID="X-APP-ID";private static final String APP_ID_VALUE="xasfadfde";/*** 根据url获取数据post* @param jsonParams http请求参数* @param url        http请求的url* @param timeOut    请求超时时间*/public static String httpGetDataByPostWithJsonParam(String jsonParams, String url, int timeOut) {Assert.notNull(jsonParams, "jsonParams can not be null");CloseableHttpClient closeableHttpClient = HttpClients.createDefault();HttpPost httpPost = new HttpPost(url);//设置超时时间httpPost.setConfig(setTimeOutConfig(timeOut));httpPost.setHeader("Content-Type", "application/json");httpPost.setHeader(APP_KEY,APP_KEY_VALUE);httpPost.setHeader(APP_ID,APP_ID_VALUE);CloseableHttpResponse execute = null;try {StringEntity entity = new StringEntity(jsonParams, "utf-8");entity.setContentEncoding("utf-8");entity.setContentType("application/json");httpPost.setEntity(entity);//执行postexecute = closeableHttpClient.execute(httpPost);String receiveData = "";if (null != execute && !"".equals(execute)) {if (execute.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {HttpEntity httpEntity = execute.getEntity();receiveData = EntityUtils.toString(httpEntity);} else {logger.info("请求出错!状态码为{}", execute.getStatusLine().getStatusCode());}}return receiveData;} catch (ClientProtocolException e) {e.printStackTrace();return "协议异常";} catch (ParseException e) {e.printStackTrace();return "解析异常";} catch (IOException e) {e.printStackTrace();return "传输异常";} finally {try {if (execute != null) {execute.close();}if (closeableHttpClient != null) {closeableHttpClient.close();}} catch (IOException e) {e.printStackTrace();}}}
}

好啦结束啦!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

mybatis对数据库的操作,删除表,新建表,修改表。相关推荐

  1. LKDHelper使用LKDBHelper以实体类对象进行数据库的操作,例如新建一个新闻实体类,以这个类来

    LKDBHelper以实体类对象进行数据库的操作,例如新建一个新闻实体类, 很早的时候用过,是基于FMDB基础上封装的,现在记录下使用过程,年纪大了容易健忘 哈哈 #import "Base ...

  2. hbase 修改表名_hbase修改表名 - 张欢19933的个人空间 - OSCHINA - 中文开源技术交流社区...

    hbase修改表名 hbase修改表名没有直接的api可以调用,我们如果想要修改表名,可以利用快照的方式. 需要开启快照功能,在hbase-site.xml文件中添加如下配置项: hbase.snap ...

  3. mysql 表结构关系_mysql 表关系 与 修改表结构

    mysql 表关系 与 修改表结构 两张表关系 多对一 以员工和部门举例 多个员工对应一个部门 foreign key 永远是在多的那张表中设置外键 """ 从左边的表思 ...

  4. MySql数据库命令大全:数据库操作命令,表操作命令,修改表结构命令,数据操作命令,数据查询操作命令

    一.数据库操作命令 1.查询当前服务器上所有数据库的命令: show databases; 2.创建一个新数据库的命令: create database 数据库名称; 3.使用或切换数据库的命令: u ...

  5. mysql根据已有表创建新表_SQL根据现有表新建一张表

    SQL根据现有表新建表,新建的这张表结构要跟现有表结构相同,但不要现有表里面的数据! 执行DML语句依据数据库类型而定: SQLITE -----复制表结构及数据到新表 CREATE TABLE TA ...

  6. Oracl数据库管理方面的资料(查询sga,查看oracle数据库名称sid,查看oracle数据库名称,查看表空间,修改表空间名称,数据库管理,sqlPlus数据显示)

    显示Oracle sga相关信息: SQL> show sga Total System Global Area 105978600 bytes Fixed Size 453352 bytes ...

  7. oracle重新创建表空间,oracle 创建表空间,修改表空间,删除表空间

    //创建数据表空间 create tablespace test(表空间名字) logging --datafile 'D:\oracle\product\10.2.0\oradata\mzjx\mz ...

  8. mysql数据库怎么添加主键约束_mysql修改表时怎么添加主键约束?

    mysql中可以通过"ALTER TABLE 表名 ADD PRIMARY KEY(字段名);"语句在修改数据表时添加主键约束:当在修改表时要设置表中某个字段的主键约束时,要确保设 ...

  9. 新增、修改、删除表字段,修改表名称

    一.新增字段 1.查看表结构mysql> desc office; +-------------+-------------+------+-----+---------+----------- ...

最新文章

  1. 阿里云主机安装开发工具包报错处理
  2. 页面设计四大基本原则
  3. 尚硅谷李老师Mysql基础笔记
  4. 根据经纬度计算范围_高中地理必修一二三思维导图+计算公式全汇总!能用3年...
  5. Git创建分支并合并到主分支
  6. 信安教程第二版-第25章移动应用安全需求分析与安全保护工程
  7. CentOS4.4平台下安装EXTMAIL手记V1.3
  8. 前端的ajax缓存,解析jquery中的ajax缓存问题
  9. 面向对象分析与设计阅读笔记一
  10. tomcat未自动解压war包原因分析
  11. eWebEditor授权序列号
  12. 【mysql】---php链接数据库---【巷子】
  13. 解决steam饥荒联机版(DST Dont Starve Together)启动时error during initialization的方法
  14. 电力负荷预测三篇综述总结
  15. Linux服务器集群LVS
  16. 《疯狂Java讲义》(第5版) 作者李刚(待重新排版)
  17. Comsol中Absolute Pressure的解释
  18. ]JPEG图片存储格式及原理
  19. 50个最精彩的 Photoshop 实例教程【绘图篇】
  20. 十大Wifi芯片原厂简述

热门文章

  1. 智能指针的用法shared_ptr
  2. 火狐浏览器自动跳转到2345网址导航,彻底删除2345网址导航的解决方案
  3. RealVNC Home版本在Linux中的安装与配置
  4. 解读手机拍照的各个参数(文档模式)
  5. 置换贴图(Displacement map),凹凸贴图(Bump map)与法线贴图(Normal map)的区别
  6. live555使用整理
  7. 苹果6s上市时间_iPhone 12 销量火爆,苹果紧急加单
  8. php 多维数组怎么去重,php数组去重的方法
  9. linux系统增加虚拟内存
  10. Datatables复选框问题