原因:
1、pom中驱动版本与mysql版本不对照,mysql用的8.0.16版本,应该对应mysql-connector-java 8.0以上版本,创建连接池时的驱动也需要用带cj的。如下:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
/**
* 创建连接池
*
* @param jdbcUrl jdbc连接
* @return 数据源
*/
private DataSource createDataSource(final String jdbcUrl) {
BasicDataSource result = new BasicDataSource();
result.setDriverClassName(com.mysql.cj.jdbc.Driver.class.getName());
result.setUrl(jdbcUrl);
result.setUsername(username);
result.setPassword(password);
return result;
}
2、检查sharding-JDBC的驱动包,要用2.0以上的驱动包
<dependency>
<groupId>io.shardingjdbc</groupId>
<artifactId>sharding-jdbc-core</artifactId>
<version>2.0.3</version>
</dependency>
3、jdbcUrl后必须指定编码格式
// 获取数据源
private Map<String, DataSource> createDataSourceMap() {
Map<String, DataSource> result = new HashMap<>();
result.put("db_202110", createDataSource("jdbc:mysql://localhost:3306/db_202110?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC"));
result.put("db_202111", createDataSource("jdbc:mysql://localhost:3306/db_202111?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC"));
return result;
}
4、检查实体类属性是否与表字段对应,如不对应,需要用别名
@Select("select t.order_no as orderNo,t.sys_time as sysTime from t_order t where t.sys_time=#{sysTime}")
List<Order> findAll(@Param("sysTime") String sysTime);
表结构:
实体类: