我使用带有JPA的SpringBootApplication来定义控制器映射并执行CRUD操作。我想通过电子邮件ID从数据库中获取学生详细信息我在DAO中编写了SQL查询,但它以字符串格式返回SQL行如何映射到StudentDetail对象?findById只取整数类型的id。我想通过电子邮件ID找到它。有像findByEmailId这样的方法吗?
StudentDetail.java
@Table(name="studentpersonaldetails")
@Entity
public class StudentDetail {
@Id
@Column(name="emailid")
String emailId;
@Column(name="firstname")
String firstName;
@Column(name="lastname")
String lastName;
@Column(name="mobilenumber")
String mobileNumber;
String address;
String batch;
String course;
String gender;
String year;
Paramaterised constructor, getters-setters & toString method
}
StudentController.java
@GetMapping("/getpersonaldetails/{emailId}")
public StudentDetail getPersonalDetails(@PathVariable String emailId)
{
emailId = emailId.substring(1);
return studentService.getPersonalDetails(emailId);
}
StudentService.java
public StudentDetail getPersonalDetails(String emailId) {
return studentDao.getPersonalDetails(emailId);
}
StudentDAO.java
@Query(value = "SELECT * FROM studentpersonaldetails WHERE emailId=?1", nativeQuery = true)
StudentDetail getPersonalDetails(String emailId);
错误
org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [java.lang.String] to type [com.cdac.hms.model.StudentDetail]
您可以创建一个StudentDetail类型的新对象并使用中的结果构建它吗。然后返回
var results = studentService.getPersonalDetails(emailId);
StudentDetail sd = new StudentDetail(results);
return sd;
查询不正确,必须更改参数。
试试这个代码:
@Query(value = "SELECT * FROM studentpersonaldetails WHERE emailId= :emailId", nativeQuery = true)
StudentDetail getPersonalDetails(String emailId);
您不需要本机查询就可以完成这个简单的操作。以下是存储库接口的findStudentByEmailId示例。
@Query("SELECT student FROM studentpersonaldetails student WHERE student.emailId= :emailId")
StudentDetail findStudentByEmailId(@Param("emailId") String emailId);
注意:我添加了param名称,并在Query中使用了它。
据此:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-创建
您可以:StudentDAO.java
public interface StudentDAO extends Repository<StudentDetail, String> {
Optional<StudentDetail> findByEmailId(String emailId);
}
你也可以使用普通的StudentDetail而不是可选的