mybatis对数据库的操作,删除表,新建表,修改表。
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对数据库的操作,删除表,新建表,修改表。相关推荐
- LKDHelper使用LKDBHelper以实体类对象进行数据库的操作,例如新建一个新闻实体类,以这个类来
LKDBHelper以实体类对象进行数据库的操作,例如新建一个新闻实体类, 很早的时候用过,是基于FMDB基础上封装的,现在记录下使用过程,年纪大了容易健忘 哈哈 #import "Base ...
- hbase 修改表名_hbase修改表名 - 张欢19933的个人空间 - OSCHINA - 中文开源技术交流社区...
hbase修改表名 hbase修改表名没有直接的api可以调用,我们如果想要修改表名,可以利用快照的方式. 需要开启快照功能,在hbase-site.xml文件中添加如下配置项: hbase.snap ...
- mysql 表结构关系_mysql 表关系 与 修改表结构
mysql 表关系 与 修改表结构 两张表关系 多对一 以员工和部门举例 多个员工对应一个部门 foreign key 永远是在多的那张表中设置外键 """ 从左边的表思 ...
- MySql数据库命令大全:数据库操作命令,表操作命令,修改表结构命令,数据操作命令,数据查询操作命令
一.数据库操作命令 1.查询当前服务器上所有数据库的命令: show databases; 2.创建一个新数据库的命令: create database 数据库名称; 3.使用或切换数据库的命令: u ...
- mysql根据已有表创建新表_SQL根据现有表新建一张表
SQL根据现有表新建表,新建的这张表结构要跟现有表结构相同,但不要现有表里面的数据! 执行DML语句依据数据库类型而定: SQLITE -----复制表结构及数据到新表 CREATE TABLE TA ...
- Oracl数据库管理方面的资料(查询sga,查看oracle数据库名称sid,查看oracle数据库名称,查看表空间,修改表空间名称,数据库管理,sqlPlus数据显示)
显示Oracle sga相关信息: SQL> show sga Total System Global Area 105978600 bytes Fixed Size 453352 bytes ...
- oracle重新创建表空间,oracle 创建表空间,修改表空间,删除表空间
//创建数据表空间 create tablespace test(表空间名字) logging --datafile 'D:\oracle\product\10.2.0\oradata\mzjx\mz ...
- mysql数据库怎么添加主键约束_mysql修改表时怎么添加主键约束?
mysql中可以通过"ALTER TABLE 表名 ADD PRIMARY KEY(字段名);"语句在修改数据表时添加主键约束:当在修改表时要设置表中某个字段的主键约束时,要确保设 ...
- 新增、修改、删除表字段,修改表名称
一.新增字段 1.查看表结构mysql> desc office; +-------------+-------------+------+-----+---------+----------- ...
最新文章
- 阿里云主机安装开发工具包报错处理
- 页面设计四大基本原则
- 尚硅谷李老师Mysql基础笔记
- 根据经纬度计算范围_高中地理必修一二三思维导图+计算公式全汇总!能用3年...
- Git创建分支并合并到主分支
- 信安教程第二版-第25章移动应用安全需求分析与安全保护工程
- CentOS4.4平台下安装EXTMAIL手记V1.3
- 前端的ajax缓存,解析jquery中的ajax缓存问题
- 面向对象分析与设计阅读笔记一
- tomcat未自动解压war包原因分析
- eWebEditor授权序列号
- 【mysql】---php链接数据库---【巷子】
- 解决steam饥荒联机版(DST Dont Starve Together)启动时error during initialization的方法
- 电力负荷预测三篇综述总结
- Linux服务器集群LVS
- 《疯狂Java讲义》(第5版) 作者李刚(待重新排版)
- Comsol中Absolute Pressure的解释
- ]JPEG图片存储格式及原理
- 50个最精彩的 Photoshop 实例教程【绘图篇】
- 十大Wifi芯片原厂简述
热门文章
- 智能指针的用法shared_ptr
- 火狐浏览器自动跳转到2345网址导航,彻底删除2345网址导航的解决方案
- RealVNC Home版本在Linux中的安装与配置
- 解读手机拍照的各个参数(文档模式)
- 置换贴图(Displacement map),凹凸贴图(Bump map)与法线贴图(Normal map)的区别
- live555使用整理
- 苹果6s上市时间_iPhone 12 销量火爆,苹果紧急加单
- php 多维数组怎么去重,php数组去重的方法
- linux系统增加虚拟内存
- Datatables复选框问题