jestem nowy Wiosna Boot & WZP ...właściwy sposób do warstwy Wiosna WZP w oparciu DAO przy użyciu Spring Framework Boot
Powiedzmy mam dwa podmioty mapowane do dwóch tabel, które są połączone w bazie danych.
Student-1 ------ < -Course
Ponadto, pozwala przypuszczać, że baza danych jest już utworzony i zaludnionych.
To pokazuje, że jeden uczeń ma wiele kursów ...
My Student Podmiot:
@Entity
public class Student {
@OneToMany(mappedBy="student")
private List<Courses> courses;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "Student_Id")
private long studentId;
@Column(name = "Student_Name")
private String studentName;
protected Student() { }
// Getters & Setters
}
mojego kursu jednostki:
@Entity
public class Course {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "Course_Id")
private long courseId;
@Id
@Column(name = "Student_Id")
private long studentId;
@ManyToOne
@PrimaryKeyJoinColumn(name="Student_Id", referencedColumnName="Student_Id")
private Student student;
@Column(name = "Course_Name")
private String courseName;
// Getters & Setters
}
na wiosnę osłonowego pomog, to pokazuje, jak w celu rozszerzenia interfejsu CrudRepository, ale nie określa sposobu konfigurowania DAO opartego na Spring, który zawiera niestandardowe metody wyszukiwania, które wykorzystują HQL i Entit y Manager w środku.
Czy następujące DAO i DaoImpl są prawidłowe?
public interface CourseDao {
List<Course> findCoursesByStudentName(String studentName);
}
@Repository
public class CourseDaoImpl implements CourseDao {
@PersistenceContext
EntityManager em;
public List<Course> findCoursesByStudentName(String studentName) {
String sql = "select c.courseName" +
"from Course c, Student s " +
"where c.course_id = s.student_id " +
"and s.studentName = :studentName ";
Query query = em.createQuery(sql);
query.setParameter("studentName", studentName);
return query.getResultList();
}
}
A potem w kodzie klienta, na przykład, w głównej klasie:
public class Application {
@Autowired
CustomerDao dao;
public static void main (String args []) {
List<Course> courses = dao.findCoursesByStudentName("John");
}
}
Jest to standardowy sposób użyć HQL wewnątrz Wiosna DAOs? Przygotowałem przykłady adnotacji @Transactional, która została dodana do implantów klasy DAO (na przykład CustomerDAOImpl)?
Proszę dać mi znać, jeśli jest to sposób zapisu do struktury mojej aplikacji Spring Boot lub czy mam rozszerzyć/dodać tylko do CrudRepository?
Jeśli ktoś mógłby poprawić mój przykład i wskazać mi adres URL, który mówi o HQL przy użyciu elementów, które są połączone, byłbym bardzo wdzięczny.
Przewodniki Spring Boot nie przedstawiały złączeń ani DAO - po prostu muszę się nauczyć, jak prawidłowo tworzyć metody wyszukiwania, które emulują instrukcję select, która zwraca listy lub struktury danych.
Dzięki za poświęcenie czasu na przeczytanie tego ...
shazin, dzięki za odpowiedź ... Czy to standardowy sposób na wykonywanie HQL? Robisz wybranych studentów, a nie dołączyć? Jestem zdezorientowany ... Również dlaczego readOnly = true? Co masz na myśli zdefiniować poprawnie JpaTransactionManager? Jak to zrobiłbyś w Spring Boot? Dlaczego nie skorzystać z CrudRespository? To, czego szukam, to standardowy sposób robienia rzeczy ... Dziękuję za pomoc. –
Gdzie jest zdefiniowana pozycja Ref użytkownika klasy/obiektu? Miałeś na myśli Student? –