写这篇记录的原因是因为我之前在Spring Boot项目中通过MyBatis连接DB2返回的结果中存在一些字段,

这些字段的元素中缺少了一些符号,所以我现在通过在自己的电脑上通过MyBatis连接DB2和MySQL,

来重现之前碰到的情况。

为了方便分析起见,我这里新建一个test表,并插入一些数据。以下是相关的SQL语句:

drop table test;
create table test (
id int,
name varchar(20),
memo character(50)
);
insert into test (id, name, memo) values (1, 'zifeiy', '床前(明月)光');
insert into test (id, name, memo) values (2, '王()小明', '春眠!@#$%^&**()不觉()《》晓');

然后通过如下SQL语句可以看到返回结果:

SELECT * FROM test

DB2中返回的结果:

MySQL中返回的结果:

mysql> select * from test;
+------+------------+-------------------------------+
| id | name | memo |
+------+------------+-------------------------------+
| 1 | zifeiy | 床前(明月)光 |
| 2 | 王()小明 | 春眠!@#$%^&**()不觉()《》晓 |
+------+------------+-------------------------------+

接下来我们开始编写一个简单的Spring Boot项目,来重现我们之前遇到的问题。

首先去 https://start.spring.io/ 生成一个名为 spring-test 的 spring boot 项目。

以下时application.properties的配置,其中包括连接DB2的信息和连接MySQL的信息。

这里默认连接DB2,而将MySQL连接的属性注释掉了,在连接MySQL的时候需将DB2的连接信息注释掉,

而将MySQL的连接信息取消掉注释。

# DB Configuration for DB2
spring.datasource.url=jdbc:db2://localhost:50000/SAMPLE
spring.datasource.username=zifeiy
spring.datasource.password=password
spring.datasource.driver-class-name=com.ibm.db2.jcc.DB2Driver ## DB Configuration for MySQL
#spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
#spring.datasource.url=jdbc:mysql://localhost:3306/zifeiydb?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
#spring.datasource.username=root
#spring.datasource.password=password # logging
logging.level.com.anbank.tplusone=debug

现在回到我们的 spring-test 项目,他的目录结构大概是这个样子的:

新建名为Test的Java Bean:

package com.zifeiy.springtest.po;

public class Test {
private int id;
private String name;
private String memo; // getters & setters
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMemo() {
return memo;
}
public void setMemo(String memo) {
this.memo = memo;
} }

新建Mapper:

package com.zifeiy.springtest.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select; import com.zifeiy.springtest.po.Test; @Mapper
public interface TestMapper { @Select("select * from test")
List<Test> select();
}

新建Serivce接口及其实现:

TestService.java:

package com.zifeiy.springtest.service;

import java.util.List;

import com.zifeiy.springtest.po.Test;

public interface TestService {

	List<Test> select();
}

TestServiceImpl.java:

package com.zifeiy.springtest.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import com.zifeiy.springtest.mapper.TestMapper;
import com.zifeiy.springtest.po.Test;
import com.zifeiy.springtest.service.TestService; @Service
@Transactional
public class TestServiceImpl implements TestService { @Autowired
private TestMapper testMapper; @Override
public List<Test> select() {
return this.testMapper.select();
} }

新建Controller:

package com.zifeiy.springtest.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import com.zifeiy.springtest.po.Test;
import com.zifeiy.springtest.service.TestService; @RestController
@RequestMapping("/")
public class TestController { @Autowired
private TestService testService; @RequestMapping("/test")
public List<Test> select() {
return this.testService.select();
} }

然后运行 SpringTestApplication.java 程序,并登陆 http://localhost:8080/test 查看结果如下:

[{"id":1,"name":"zifeiy","memo":"床前(明月)光                             "},{"id":2,"name":"王()小明","memo":"春眠!@#$%^&**()不觉()《》晓            "}]

说明在 DB2 Express-C 11 中使用MySQL没有什么问题。

修改 application.properties 文件,使其指向MySQL连接,再次运行。

结果类似,只不过MySQL里面Character类型后面空着的那些空格没有显示出来:

[{"id":1,"name":"zifeiy","memo":"床前(明月)光"},{"id":2,"name":"王()小明","memo":"春眠!@#$%^&**()不觉()《》晓"}]

说明在 MySQL 5.7 中使用MyBatis也灭有什么问题。

想到生产环境和测试环境中使用的是 DB2 9,所以测试一下在 DB2 9 中是否出现这种情况,修改 applications.properties 中的连接信息到测试数据库。

然后结果是这样的:

[{"id":1,"name":"zifeiy","memo":"床前(明月)光                                    "},{"id":2,"name":"王()小明","memo":"春眠!@#$%^&**()不觉()《》晓                     "}]

发现好像没有什么问题。


小结:暂时不能重现之前碰到的问题。后续如果发现问题将在此随笔中继续添加内容。

Spring Boot项目中MyBatis连接DB2和MySQL数据库返回结果中一些字符消失——debug笔记的更多相关文章

  1. 【Spring Boot】Spring Boot项目设置多个配置文件,并在生产环境中的Tomcat设置对应的配置文件

    1.修改Spring Boot项目配置文件 除了主配置文件,另外创建2个配置文件,注意命名要用application-*.properties 主配置文件中写入,使用dev作为开发配置 spring. ...

  2. Jmeter连接DB2/ORACLE/MYSQL数据库

    连接DB2 1.将db2数据库驱动db2java.jar.db2jcc.jar放入jmeter的lib/下,同时也要放入本地jdk目录下例如:C:\Program Files\Java\jdk1.7. ...

  3. Spring Boot入门(五):使用JDBC访问MySql数据库

    本系列博客记录自己学习Spring Boot的历程,如帮助到你,不胜荣幸,如有错误,欢迎指正! 在程序开发的过程中,操作数据库是必不可少的部分,前面几篇博客中,也一直未涉及到数据库的操作,本篇博客 就 ...

  4. 在Spring Boot项目中使用Spock框架

    转载:https://www.jianshu.com/p/f1e354d382cd Spock框架是基于Groovy语言的测试框架,Groovy与Java具备良好的互操作性,因此可以在Spring B ...

  5. Spring Boot 项目学习 (二) MySql + MyBatis 注解 + 分页控件 配置

    0 引言 本文主要在Spring Boot 基础项目的基础上,添加 Mysql .MyBatis(注解方式)与 分页控件 的配置,用于协助完成数据库操作. 1 创建数据表 这个过程就暂时省略了. 2 ...

  6. Spring Boot项目中使用Mockito

    本文首发于个人网站:Spring Boot项目中使用Mockito Spring Boot可以和大部分流行的测试框架协同工作:通过Spring JUnit创建单元测试:生成测试数据初始化数据库用于测试 ...

  7. 在Spring Boot项目中使用Spock测试框架

    本文首发于个人网站:在Spring Boot项目中使用Spock测试框架 Spock框架是基于Groovy语言的测试框架,Groovy与Java具备良好的互操作性,因此可以在Spring Boot项目 ...

  8. IDEA连接远程服务器Docker部署Spring Boot项目

    开始前的准备工作 拥有一台云服务器,我的是腾讯云服务器(CentOS7) 腾讯云服务器安装Docker,我的版本是Docker 19.03.9,关于安装和配置镜像加速器可以查阅我的另一篇博文:http ...

  9. 简单的Spring Boot项目——实现连接Mysql数据库

    一.创建Spring Boot项目 参考:使用IntelliJ IDEA创建简单的Spring Boot项目 二.数据库.表的创建 三.项目开发 3.1 pom.xml文件配置 <?xml ve ...

随机推荐

  1. NLP传统基础(2)---LDA主题模型---学习文档主题的概率分布(文本分类/聚类)

    一.简介 https://cloud.tencent.com/developer/article/1058777 1.LDA是一种主题模型 作用:可以将每篇文档的主题以概率分布的形式给出[给定一篇文档 ...

  2. JDK源码那些事儿之我眼中的HashMap

    源码部分从HashMap说起是因为笔者看了很多遍这个类的源码部分,同时感觉网上很多都是粗略的介绍,有些可能还不正确,最后只能自己看源码来验证理解,写下这篇文章一方面是为了促使自己能深入,另一方面也是给 ...

  3. 【1 封新邀请】想跟谷歌、七牛、kyligence 等大佬面对面的交流吗?

    2020 年 1 月 4 日 - 5 日,"ECUG Con 2020"大会将于杭州举行.本次大会以"ECUG For Future"为主题,围绕五大技术主题, ...

  4. 你的VCL界面开发不知所措?这款工具绝对超出预料

    DevExpress VCL Controls是 Devexpress公司旗下最老牌的用户界面套包.所包含的控件有:数据录入,图表,数据分析,导航,布局,网格,日程管理,样式,打印和工作流等,让您快速 ...

  5. Python基础篇--输入与输出

    站长资讯平台:Python基础篇--输入与输出在任何语言中,输入和输出都是代码最基础的开始,so,先来聊一聊输入和输出输出输入END在任何语言中,输入和输出都是代码最基础的开始,so,先来聊一聊输入和 ...

  6. 编译安装 openmcu

    1. install toolssudo apt-get install libtool autoconf flex bison automake pkg-config 2.yasm-1.3.0sed ...

  7. Vue引入非npm的js库

    Vue引入非npm的js库 Vue项目有时候需要一些没有export的js库,不能通过import引入,那么使用方法如下 1.可以在index.html页面使用script标签引入,当然也可以使用cd ...

  8. 3、Spring Boot 2.x 核心技术

    1.3 Spring Boot 核心技术 1.3.1 起步依赖 为项目的依赖管理提供帮助.起步依赖其实就是特殊的Maven,利用了传递依赖解析,把常用库聚合在一起,组成几个为特定功能而定制的依赖. 1 ...

  9. Java集合总结(二):Map和Set

    集合类的架构图: HashMap 内部维护一个链表数组做哈希表,默认大小为16,最大值可以为2^30,默认负载因子0.75. 可以通过构造方法指定初始大小和负载因子,当键值对个数大于等于临界值thre ...

  10. linux中fork--子进程是从哪里开始运行

    转自  http://blog.csdn.net/koches/article/details/7787468 fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值 ...