最近有个项目在本地已经测试成功,准备在服务器上线,要把原数据源中的数据导入到目标数据库,于是乎就学习了数据库的数据转移,原数据库的数据命名不太规范,没有主键,字段还有中文名,数据冗余,新建立的数据库把原表拆成了三个表,并且增加了主键和外键。以下就是我导数据的过程。

1.一开始我是通过新建一个maven项目,通过jdbc来链接数据库,并通过sql语句来操作数据库,首先导入依赖:

<dependencies><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency>

只需导入mysql依赖即可。

并且新建一个main方法主类和ImportData方法类

ImportData方法类代码如下:

/*** @author 旺旺米雪饼*/
public class ImportData {/*** 数据源*/public void ImportDataByJdbc() {//获取开始时间long startTime = System.currentTimeMillis();// 创建一个数据库连接Connection con = null;// 创建预编译语句对象,一般都是用这个而不用StatementPreparedStatement pre = null;// 创建一个结果集对象ResultSet result = null;try {// 加载mysql驱动程序Class.forName("com.mysql.jdbc.Driver");System.out.println("开始尝试连接cms数据库!");//这是我测试用的源数据库连接String url = "jdbc:mysql://localhost:3306/data?characterEncoding=utf-8&useSSL=false";// 用户名,系统默认的账户名String user = "root";// 你安装时选设置的密码String password = "123456";// 获取连接con = DriverManager.getConnection(url, user, password);System.out.println("cms连接成功!");//user1,mingcheng,lxsj,xxdz,lxr,sfz_hm,lxdh,dzys,frdm,frdh,frmc,lxcz,zcrqString sql = "select * from cddw_basic where yhjb="+"'"+"直属单位"+"'";// 实例化预编译语句pre = con.prepareStatement(sql);// 执行查询result = pre.executeQuery();//数据存入目标库处理importData(result);} catch (Exception e) {e.printStackTrace();} finally {try {// 逐一将上面的几个对象关闭,因为不关闭的话会影响性能、并且占用资源// 注意关闭的顺序,最后使用的最先关闭if (result != null) {result.close();}if (pre != null) {pre.close();}if (con != null) {con.close();}System.out.println("cms数据库连接已关闭!\n");//获取结束时间long endTime = System.currentTimeMillis();//输出程序运行时间System.out.println("程序运行时间:" + (endTime - startTime) + "ms \n");} catch (Exception e) {e.printStackTrace();}}}
/*** 目标库*插入表units* @param* @return*/public void importData(ResultSet result) {// 创建一个数据库连接Connection conn = null;// 创建预编译语句对象,一般都是用这个而不用StatementPreparedStatement pre = null;// 创建一个结果集对象Timestamp currentTime = new Timestamp(System.currentTimeMillis());SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String dateString = formatter.format(currentTime);try {// 加载mysql驱动程序Class.forName("com.mysql.jdbc.Driver");System.out.println("开始尝试连接omp数据库3!");String url = "jdbc:mysql://101.42.227.226:3306/data_back?characterEncoding=utf-8&useSSL=false";// 用户名,系统默认的账户名String user = "lhj";// 你安装时选设置的密码String password = "*******";// 获取连接conn = DriverManager.getConnection(url, user, password);System.out.println("omp3连接成功!");int num = 0;while (result.next()) {// 预编译语句String sql1 = "insert into units(open_status,supper_unit_id,unit_name,unit_address,unit_number,admin_name,admin_card,admin_phone,unit_email,open_time,jur_code,jur_phone,jur_name,user_id,fax_number,admin_tel)" +" values(1,62,"+"'"+result.getString("mingcheng") +"','" +result.getString("xxdz")+"','" +result.getString("申报单位代码")+"','" +result.getString("lxr")+"','" +result.getString("sfz_hm")+"','" +result.getString("lxsj")+"','" +result.getString("dzys")+"','" +result.getString("zcrq")+"','" +result.getString("frdm")+"','" +result.getString("frdh")+"','" +result.getString("frmc")+"','" +result.getString("user1")+"','" +result.getString("lxcz")+"','" +result.getString("lxdh")+"')";// 实例化预编译语句pre = conn.prepareStatement(sql1);pre.execute();pre.close();num = num + 1;}System.out.println("成功插入(" + num + ")条数据");} catch (Exception e) {e.printStackTrace();} finally {try {// 逐一将上面的几个对象关闭,因为不关闭的话会影响性能、并且占用资源// 注意关闭的顺序,最后使用的最先关闭if (result != null) {result.close();}if (pre != null) {pre.close();}if (conn != null) {conn.close();}System.out.println("omp数据库3连接已关闭!");} catch (Exception e) {e.printStackTrace();}}}

并且在主类中调用方法即可:

/*** @author 旺旺米雪饼*/
public class Main {public static void main(String[] args) {ImportData importData=new ImportData();importData.ImportDataByJdbc();}
}

运行结果如下图所示:

不过这种方法只能实现从一个表到另一个表的单表操作,如何实现多表操作查询另一个表的主键并且当作外键呢,还是用springboot+mybatis配置多数据源比较方便。

2.springboot配置多数据源

首先我们导入依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-autoconfigure</artifactId><version>2.3.7.RELEASE</version></dependency><!-- mybatis --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.2</version></dependency><!--mysql依赖--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.29</version><scope>runtime</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>

配置application.properties文件

#DB1 Configuration:
spring.datasource.test1.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.test1.jdbc-url=jdbc:mysql://localhost:3306/data?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
spring.datasource.test1.username=root
spring.datasource.test1.password=123456
#DB2 Configuration:
spring.datasource.test2.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.test2.jdbc-url=jdbc:mysql://101.42.227.226:3306/data_back?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
spring.datasource.test2.username=lhj
spring.datasource.test2.password=******

文件结构:

首先,Config文件:

/*** @author 旺旺米雪饼*/
@Configuration
@MapperScan(basePackages = {"com.example.data_change.mapper1"}, sqlSessionFactoryRef = "test1SqlSessionFactory")
public class ConfigDb01 {@Bean(name = "test1DataSource")@ConfigurationProperties(prefix = "spring.datasource.test1")@Primarypublic DataSource testDataSource() {return DataSourceBuilder.create().build();}@Bean(name = "test1SqlSessionFactory")public SqlSessionFactory testSqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource) throws Exception {SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(dataSource);return bean.getObject();}@Bean(name = "test1TransactionManager")@Primarypublic DataSourceTransactionManager testTransactionManager(@Qualifier("test1DataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}@Bean(name = "test1SqlSessionTemplate")@Primarypublic SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {return new SqlSessionTemplate(sqlSessionFactory);}
}
ConfigDb02.java文件同理:
/*** @author 旺旺米雪饼*/
@Configuration
@MapperScan(basePackages = {"com.example.data_change.mapper2"}, sqlSessionFactoryRef = "test2SqlSessionFactory")
public class ConfigDb02 {@Bean(name = "test2DataSource")@ConfigurationProperties(prefix = "spring.datasource.test2")@Primarypublic DataSource testDataSource() {return DataSourceBuilder.create().build();}@Bean(name = "test2SqlSessionFactory")public SqlSessionFactory testSqlSessionFactory(@Qualifier("test2DataSource") DataSource dataSource) throws Exception {SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(dataSource);return bean.getObject();}@Bean(name = "test2TransactionManager")@Primarypublic DataSourceTransactionManager testTransactionManager(@Qualifier("test2DataSource") DataSource dataSource) {return new DataSourceTransactionManager(dataSource);}@Bean(name = "test2SqlSessionTemplate")@Primarypublic SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test2SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {return new SqlSessionTemplate(sqlSessionFactory);}
}

然后就是entity实体类,下面是其中一个实体类:

/*** @author 旺旺米雪饼*/
@Data
public class Cddw_Basic {private String id;private String 申报单位代码;private String 主管单位;private String 主管单位代码;private String 原主管单位;private String 原主管单位代码;private String 原申报单位;private String 原申报单位代码;private String 变更时间;private String 撤回时间;private String mingcheng;private String pass;private String user1;private String sfkt;private String yhjb;private String wenti;private String daan;private String wangye;private String frdm;private String frmc;private String frdh;private String lxr;private String lxdh;private String lxsj;private String lxcz;private String dzys;private String zgcs;private String szzq;private String yzbm;private String xxdz;private String lsgx;private String sshy;private String dwfl;private String jjlx;private String zgbm;private String jdms;private String zcrq;private String zwzc;private String sfz_hm;private String zw;private String khmc;private String khyh;private String khzh;
}

然后就是我自己用注解编写的sql语句了,并没有再配置.xml文件,在mapper文件夹下,主要是完成数据迁移:

/*** @author 旺旺米雪饼*/
@Mapper
public interface TestMapper1 {/*** 查询数据源所有信息* @return*/@Select("select * from cddw_basic where yhjb='申报单位'")List<Cddw_Basic> selectAll();
}
/*** @author 旺旺米雪饼*/
@Mapper
public interface TestMapper2 {/*** 插入units表* @param units* @return*/@Insert({"insert into units(open_status,supper_unit_id,unit_name,unit_address,unit_number,admin_name,admin_card,admin_phone,unit_email,open_time,jur_code,jur_phone,jur_name,user_id,fax_number,admin_tel) " +"values (#{open_status},#{supper_unit_id},#{unit_name},#{unit_address},#{unit_number},#{admin_name},#{admin_card},#{admin_phone},#{unit_email},#{open_time,jdbcType=TIMESTAMP},#{jur_code},#{jur_phone},#{jur_name},#{user_id},#{fax_number},#{admin_tel})"})int insertUnits(Units units);@Select("select admin_id from admins where admin_name=#{admin_name}")int findadmin_id(@Param("admin_name") String admin_name);
}
DataChangeApplication文件如下所示:
/*** @author 旺旺米雪饼*/
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class DataChangeApplication {public static void main(String[] args) {SpringApplication.run(DataChangeApplication.class, args);}}

然后编写测试用例:

@Slf4j
@SpringBootTest
class DataChangeApplicationTests {int j = 0;//状态字段@Autowiredprivate TestMapper1 testMapper1;@Autowiredprivate TestMapper2 testMapper2;@Testvoid contextLoads() throws ParseException {for (int i = 0; i < testMapper1.selectAll().size(); i++) {if (testMapper1.selectAll().get(i).getSfkt().equals("通过")) {j = 1;} else if (testMapper1.selectAll().get(i).getSfkt().equals("待审核")) {j = 0;} else if (testMapper1.selectAll().get(i).getSfkt().equals("祝彦杰重名停用")) {j = 3;} elsej = 2;int k = testMapper2.findadmin_id(testMapper1.selectAll().get(i).get主管单位());Units units = new Units();units.setUnit_name(testMapper1.selectAll().get(i).getMingcheng());units.setUnit_address(testMapper1.selectAll().get(i).getXxdz());units.setUnit_number(testMapper1.selectAll().get(i).get申报单位代码());units.setSupper_unit_id(k);units.setAdmin_name(testMapper1.selectAll().get(i).getLxr());units.setAdmin_card(testMapper1.selectAll().get(i).getSfz_hm());units.setAdmin_phone(testMapper1.selectAll().get(i).getLxsj());units.setUnit_email(testMapper1.selectAll().get(i).getDzys());units.setOpen_status(j);
//将String类型转换成Date类型Date date = new SimpleDateFormat("yyyy-MM-dd").parse(testMapper1.selectAll().get(i).getZcrq());units.setOpen_time(date);units.setJur_code(testMapper1.selectAll().get(i).getFrdm());units.setJur_phone(testMapper1.selectAll().get(i).getFrdh());units.setJur_name(testMapper1.selectAll().get(i).getFrmc());units.setUser_id(testMapper1.selectAll().get(i).getUser1());units.setFax_number(testMapper1.selectAll().get(i).getLxcz());units.setAdmin_tel(testMapper1.selectAll().get(i).getLxdh());testMapper2.insertUnits(units);log.info("插入第"+(i+1)+"条记录");}}
}

得到结果如下:

成功插入。

Springboot+MySQL实现多数据源的信息导入相关推荐

  1. 基于SSM+SpringBoot+MySQL+Layui+Thymeleaf的高校信息BBS论坛系统

    大家好,很高兴和大家分享源码.不管是什么样的需求.都希望各位计算机专业的同学们有一个提高. 大家可以通过常用的搜索引擎,以百度为例,搜索 源码乐园 code51 ,然后再次搜索 自己想要的即可.更多的 ...

  2. 基于SSM+SpringBoot+MySQL+VUE的酒店入住信息管理系统(附论文)

    项目运行截图     互联网酒店预订系统(HMS)软件需求规格说明文档更新记录1. 引言1.1 目的1.2 范围1.3 参考文献2. 总体描述2.1 项目前景2.1.1 背景与机遇2.1.2 业务需求 ...

  3. springboot+mysql+基于java的员工信息管理系统 毕业设计-附源码201524

    Springboot员工信息管理系统 摘 要 由于数据库和数据仓库技术的快速发展,企业员工信管理建设越来越向模块化.智能化.自我服务和管理科学化的方向发展.员工信息管理对处理对象和服务对象,自身的系统 ...

  4. Springboot整合JPA多数据源(Oracle+Mysql)

    Springboot整合JPA多数据源 1. Maven 2. 基本配置 2.1 DataSource 3. 多数据源配置 3.1 JpaConfigOracle 3.2 JpaConfigMysql ...

  5. Springboot毕设项目警务人员工作信息系统设计与实现s6ag7(java+VUE+Mybatis+Maven+Mysql)

    Springboot毕设项目警务人员工作信息系统设计与实现s6ag7(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mys ...

  6. springboot 整合mysql clickhouse 多数据源

    最近做一个项目 需要 整合mysql clickhouse 多数据源 后台用的是ruoyi框架 但是不知道作者自己写的datasource config文件是不是有问题 永远不能成功的加载第二个数据源 ...

  7. springboot+mysql养老院信息管理系统-计算机毕业设计源码27500

    摘  要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理.在现实运用中,应用软件的工作规则和开发步骤,采用Springboot框 ...

  8. SpringBoot+AOP实现多数据源动态切换

    SpringBoot+AOP实现多数据源动态切换 背景 设计总体思路 步骤 背景 系统后端需要访问多个数据库,现有的数据库连接配置写入配置文件中.后端需要从一个数据库的配置表里动态的读取其它mysql ...

  9. db2 springboot 整合_[SpringBoot]快速配置多数据源(整合MyBatis)

    前言 由于业务需求,需要同时在SpringBoot中配置两套数据源(连接两个数据库),要求能做到service层在调用各数据库表的mapper时能够自动切换数据源,也就是mapper自动访问正确的数据 ...

最新文章

  1. 《JavaScript框架设计》——1.3 数组化
  2. 小米2s屏幕_米家空气净化器3VS小米空气净化器2 成熟设计的优势
  3. qcom Android Camera【转】
  4. 创建springboot_【小练习】创建SpringBoot程序
  5. javascript中match方法和exec()方法详解与深度区别(非原创)
  6. php笔记之echo/print比较
  7. python和c#哪个简单-最近学习 Python 的一些感触 (对比 C#)
  8. drupal主题开发_Drupal开发人员,关于如何使您的网站更易于访问
  9. jq项目如何启服务_用小项目详解我们应该如何去构建我们的微服务
  10. postgre查询表最后更新日期_Power BI 10月份功能更新浅译
  11. 9-9 原生安装-1
  12. Activity与Service之间交互并播放歌曲
  13. 计算机应用基础试卷分析报告,计算机应用基础试卷分析.pdf
  14. MySql创建视图的三种方法
  15. 儿童近视率攀升,什么原因容易导致近视呢?
  16. 【零代码工具】15 款企业级零代码开发平台推荐,总有一款是你心仪的
  17. linux编辑vim指令,Linux系统文本编辑器vim指令大全
  18. vray渲染出图尺寸_3DMax渲染出图尺寸怎么设置?
  19. SQLServer 2008以上误操作数据库恢复方法——日志尾部备份
  20. boy and girl

热门文章

  1. GTK3.0简易计算器
  2. 阿里全球数学竞赛赛题曝光!5万余选手奋战三天三夜争夺1%决赛门票
  3. ins无法发帖_必看的Instagram发帖技巧
  4. 我的程序人生——初识代码,从学好C语言开始
  5. M4V格式怎么在线转换MP4格式
  6. MATLAB APP设计
  7. MAE代码阅读(一)
  8. 四十七、使用bootstrap中的选项卡制作产品特色页面
  9. 传感器的使用_手柄_3、ros使用罗技f710无线控制手柄
  10. 达梦数据库删除用户_干货分享丨DM8用户管理