错误描述
在 respository中声明如下BoyRespository接口函数,执行不能够返回结果。
@Query(value = "select distinct city from plot_spider where province='广东省'", nativeQuery = true)
public List<Object> findDistinctCity(String province);
但是,同在BoyRespository接口中.
@Query(value = “select * from boy”,nativeQuery = true)
public List getAllBoy();
@Query("select b from Boy b where b.username = ?1")
public List<Object> get_by_username(String username);
Boy findByUsername(String username);
public List<Object> findAllByUsername(String username);
数据库application.yml原来的配置如下。然后我改成了自己本地的。
spring:
profiles:
active: prod
datasource:
driver-class-name: com.mysql.jdbc.Driver
# url: jdbc:mysql://192.168.97.215:3306/kdwcomp?useSSL=false
# username: comp
# password: comp123!@#
url: jdbc:mysql://localhost:3306/kdwcomp?useSSL=false
username: root
password: 123456
jpa:
hibernate:
ddl-auto: update
show-sql: true
问题推断
问题就是这么神奇。。以nativeQuery的方式进行带参数查询(可能别的非nativeQuery方式查询也是这样)就是为空。或者说,输入类似于province="广东省"这样的条件就会导致数据为空。而我在别的接口方法中测试,也有条件查询,但是条件查询一般是英文的,就是比如username=“zhangsan”,好像问题比较明了了。就是字符编码的问题!!
问题解决
然后就修改指定字符编码进行连接数据库。
url: jdbc:mysql://localhost:3306/kdwcomp?useUnicode=true&characterEncoding=utf-8&useSSL=false
问题得以解决。。
另外 说明一下,项目本来的远程数据库是5.7的,而我本地的是5.6的,用5.7的没有这种问题。