昨天学习JPA看到自定义查询,果断上手一试,没想到折了,有没有老哥帮瞅瞅为什么查不到结果,百度一圈也没答案
实体
@Repository
@Entity
@Table(name = "tb_person")
public class Person {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column(name = "name")
private String name;
@Column(name = "phone")
private String phone;
@Column(name = "gender")
private String gender;
@Column(name = "age")
private Integer age;
@Column(name = "weight")
private double weight;
@Column(name = "city")
private String city;
@Column(name = "inter_name")
private String interName;
public Person() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public double getWeight() {
return weight;
}
public void setWeight(double weight) {
this.weight = weight;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getInterName() {
return interName;
}
public void setInterName(String interName) {
this.interName = interName;
}
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", phone='" + phone + '\'' +
", gender='" + gender + '\'' +
", age=" + age +
", weight=" + weight +
", city='" + city + '\'' +
", interName='" + interName + '\'' +
'}';
}
}
dao层
public interface PersonDao extends JpaRepository {
Person findByName(String name);
Person findByNameLike(String name);
Person findByInterName(String interName);
Person findByInterNameLike(String interName);
Person findByAge(Integer age);
Person findByGender(String gender);
Person findByPhone(String phone);
List findByPhoneLike(String phone) ;
}
测试类
@RunWith(SpringRunner.class)
@SpringBootTest(classes = BootApp.class)
public class JpaFunctionTest {
@Resource
PersonDao personDao;
@Test
public void testSave() {
personDao.findById(1).ifPresent(System.out::println);
System.out.println(personDao.findByName("丽丽"));
System.out.println(personDao.findByName("康康"));
System.out.println(personDao.findByNameLike("%明%"));
System.out.println(personDao.findByInterName("天下第一"));
System.out.println(personDao.findByInterNameLike("%天%"));
System.out.println(personDao.findByAge(22));
System.out.println(personDao.findByGender("男"));
System.out.println(personDao.findByPhone("13124545645"));
System.out.println(personDao.findByPhoneLike("%1"));
}
}
数据库
结果
再三检查方法都没有问题,发现通过name查询的没有结果,本来以为String字符集的问题,查看也都是utf8,而且String的phone也查出来了结果,最离奇的是我把控制台的sql语句复制也是能查到结果,
有没有老哥知道是那里出了问题
问题:使用中文进行查询是返回null,中文在传输过程中出现编码异常
解决方法:在数据库连接配置加上这个
useUnicode=true&characterEncoding=UTF-8
用来保证中文传输不会出现异常
数据库URL=jdbc:mysql://localhost:3306/database_name?useUnicode=true&characterEncoding=UTF-8