java执行数据库数据迁移

老系统数据迁移到新系统

	业务分析:在最近的工作日常当中接到了一个需求,要求将老系统数据迁移到新开发的系统,一看老系统采用的技术SSH,和现在新系统的技术断层,还有表结构和业务逻辑之间的处理都是需要从头解析,减少对新系统的影响,所以就写了一篇记录日志。

数据库系统

Mysql,但是新系统采用了多个数据库存储;

采用技术

采用Java编写程序实行搬迁效果,因为相对于判断来说,用程序执行会比自己操作要好得多;

框架

SpringBoot

pom.xml

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- 很不错的一款工具插件 -->
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.6.1</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.3</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.4</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!-- JSON 解析框架 FastJson -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.41</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.12</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

采用easyCode生成基本代码,具体可以看这篇博客

https://blog.csdn.net/qq_39074952/article/details/115370409

保存数据到JSON
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

效果
在这里插入图片描述

编写程序

 @Override
    public String addMemberType() throws IOException {
        long startTime = System.currentTimeMillis();
        // 创建线程池读取文件
        ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
        InputStream memberTypeInput = contextClassLoader.getResourceAsStream("medical_member_type.json");
        // 文件转换
        String memberTypeString = IOUtils.toString(Objects.requireNonNull(memberTypeInput), StandardCharsets.UTF_8);
        // 转换为集合
        List<MemberType> memberTypes = JSONArray.parseArray(memberTypeString, MemberType.class);
        // 新数据集合
        List<com.example.transfer.entity.entity.MemberType> memberTypeList = new ArrayList<>();
        // 封装到新数据库集合
        memberTypes.stream().forEach(
             memberType -> {
                 // 创建会员类型
                 com.example.transfer.entity.entity.MemberType memberType1 = newMemberType(memberType.getId().toString(), memberType.getName(), memberType.getCreateTime());
                 memberTypeList.add(memberType1);
             }
        );
        // 批插入语句
        int i = memberTypeService.insertBatch(memberTypeList);
        long endTime = System.currentTimeMillis();
        float excTime=(float)(endTime-startTime)/1000;
        log.info("总耗时:{}秒",excTime);
        // 关闭
        Objects.requireNonNull(memberTypeInput).close();
        return "总耗时"+excTime+"秒,插入数据:"+i+"条";
    }


    public com.example.transfer.entity.entity.MemberType newMemberType(String typeId,String name,String createTime){
        Date date = null;
        // 支付时间判断
        if(StrUtil.isEmpty(createTime)){
            date = new Date();
        }else{
            // hutools组件方法
            date = DateUtil.parse(createTime);
        }
        com.example.transfer.entity.entity.MemberType memberType =
                com.example.transfer.entity.entity.MemberType.
                        builder()
                        .memberTypeId(typeId)
                        .memberTypeName(name)
                        .isDeleted(0)
                        .memberGrade(1)
                        .createTime(date)
                        .updateTime(new Date())
                        .build();
        return memberType;
    }

执行批插入之后数据就到了新数据表里面的,注意业务逻辑的处理判断,我这个是最简单的一个表封装,如果是多个表之间关键,注意io流的关闭和stream流之间的管理处理。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值