Java代码查询数据生成update更新sql
一、查询数据库数据
@Autowired
private DataMapper dataMapper;
@Test
public void exportData(){
//处理开始时间
long startTime = System.currentTimeMillis();
//1.根据条件分页查询mysql符合条件的数据
//1.1获取查询总数量数量
//1.2DataQo构建查询数据的入参
final long count = dataMapper.count(DataQo.builder().status(0).personCoune(0).build());
//2.1定义每次查询数量
final int sizePer = 10000;
//2.2计算需要查询的次数(向上取整,15.3次==16次)
int totalNumber = (int)Math.ceil(new BigDecimal(count).divide(new BigDecimal(sizePer)).doubleValue());
//3.循环遍历查询数据
for (int i = 1; i <= totalNumber; i++) {
//3.1计算分页每次开始的条数
final Integer offset = sizePer*(i-1);
//3.2查询数据库数据
List dataPOs = dataMapper.listData(DataQo.builder().status(0).personCoune(0).offset(offset).limit(sizePer).build());
//3.2过滤数据中的code字段值收集为list集合
List codeList = dataPOs .stream().map(po -> po.getCode()).collect(Collectors.toList());
//3.3调用生成sql拼接方法
generateSqlString(i,codeList.parallelStream());
}
//处理结束时间
long endTime = System.currentTimeMillis();
System.out.println("【输出sql文件总耗时:】"+(endTime - startTime)/1000+"秒");
}
二、动态拼接sql字符串
private void generateSqlString(int i, Stream codeStream) {
//1.定义需要输出的sql
final String sql = "update 表名 set status = 1 where code in (";
StringBuffer updateSql = new StringBuffer();
updateSql.append(sql);
//2.拼接sql
codeStream.forEach(t ->{
updateSql.append("'").append(t).append("'").append(",");
});
//3.最后一个字段替换为')'
updateSql.setCharAt(updateSql.length()-1,')');
updateSql.append(";");
System.out.println(updateSql.toString());
//4.调用输出sql文件的流方法(一个sql一个文件)
//generateSqlFile(i,updateSql.toString());
//5.所有的sql输出到一个文件(流追加的方式) 4与5选其一即可
generateSqlOneFile(updateSql.toString());
}
三、生成sql文件并输出(一个sql一个文件)
private void generateSqlFile(int i, String updateSql) {
//1.定义文件名称(这里是动态生成文件名,一条sql一个文件)
final String fileName = "自定义"+ i +".sql";
//2.定义文件输出路径
final String filePath = "D:/sqlFile/";
File directory = new File(filePath);
if(!directory.exists()){
directory.mkdirs();
}
//3.创建输出流(jdk7后如下方式会自动关流)
try(FileOutputStream fos = new FileOutputStream(filePath + fileName)){
fos.write(updateSql.getBytes());
}catch (Exception e){
e.printStackTrace();
}
}
四、输出sql文件(以追加的方式写入一个sql文件)
private void generateSqlOneFile(String updateSql) {
//1.定义文件名称
final String fileName = "自定义.sql";
//2.定义文件输出路径
final String filePath = "D:/sqlFile/";
File directory = new File(filePath);
if(!directory.exists()){
directory.mkdirs();
}
//3.遍历集合以追加的方式输出;追加多配一个参数 true
try(FileOutputStream fos = new FileOutputStream(filePath + fileName,true)){
fos.write(updateSql.getBytes());
//3.1推荐使用,具有良好的跨平台性,换行符
String newLine = System.getProperty("line.separator");
fos.write(newLine.getBytes());
fos.flush();
}catch (Exception e){
e.printStackTrace();
}
}
【总结】三步完成使用java生成sql文件,记得收藏哈。