加入spring-boot-starter-data-jpa依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
需對應資料庫裡的course_student資料表
可以省略@Table,但是要確保資料庫內有與此Model類別一樣名稱的資料表
package eyes.media.student.vo;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Table;
@Entity
@Table(name = "course_student")
@IdClass(CourseStudentId.class)
public class CourseStudent {
@Id
private String courseid;
@Id
private String studentid;
private String gradelevel;
public String getCourseid() {
return courseid;
}
public void setCourseid(String courseid) {
this.courseid = courseid;
}
public String getStudentid() {
return studentid;
}
public void setStudentid(String studentid) {
this.studentid = studentid;
}
public String getGradelevel() {
return gradelevel;
}
public void setGradelevel(String gradelevel) {
this.gradelevel = gradelevel;
}
@Override
public String toString() {
return "CourseStudent [courseid=" + courseid + ", studentid=" + studentid + ", gradelevel=" + gradelevel + "]";
}
}
須遵循下列規則
- The composite primary key class must be public
- It must have a no-arg constructor
- It must define equals() and hashCode() methods
- It must be Serializable
package eyes.media.student.vo;
import java.io.Serializable;
import javax.persistence.Id;
public class CourseStudentId implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
private String courseid;
@Id
private String studentid;
public CourseStudentId() {
}
public CourseStudentId(String courseid, String studentid) {
this.courseid = courseid;
this.studentid = studentid;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((courseid == null) ? 0 : courseid.hashCode());
result = prime * result + ((studentid == null) ? 0 : studentid.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
CourseStudentId other = (CourseStudentId) obj;
if (courseid == null) {
if (other.courseid != null)
return false;
} else if (!courseid.equals(other.courseid))
return false;
if (studentid == null) {
if (other.studentid != null)
return false;
} else if (!studentid.equals(other.studentid))
return false;
return true;
}
}
@Entity
public class YourEntity {
@EmbeddedId
private MyKey myKey;
@Column(name = "ColumnA")
private String columnA;
/** Your getters and setters **/
}
@Embeddable
public class MyKey implements Serializable {
@Column(name = "Id", nullable = false)
private int id;
@Column(name = "Version", nullable = false)
private int version;
/** getters and setters **/
}
@Id
@GeneratedValue(generator = "uuidGenerator")
@GenericGenerator(name = "uuidGenerator", strategy = "uuid")
@Column(length = 32)
private String workId;
建立一個繼承 CrudRepository 的介面:
CrudRepository 這個介面,定義了 save、findById、delete 等方法,繼承的時候,只要指定對應表格的類型與 id 類型,剩下的就交給 Spring Data JDBC 來處理了。
可以使用 @Query 與 @Modifying 來定義,@Query 中可以撰寫 SQL,相關的參數可以使用 @Param 來標註對應,如果是個更新操作,額外標註 @Modifying 就可以了。
非HQL原生語法需加上 nativeQuery = true
package eyes.media.student.dao;
import java.util.List;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;
import eyes.media.student.vo.CourseStudent;
@Repository
public interface CourseStudentDao extends CrudRepository<CourseStudent, String> {
@Query(value = "SELECT * FROM course_student cs WHERE cs.courseid = :courseid", nativeQuery = true)
List<CourseStudent> findCouresStuByCourseId(@Param("courseid") String courseid);
}
//You will get null when Student not found
public Student getStudent(String studentId) {
return studentRepository.findById(studentId).orElse(null);
}
public Student getStudent(String studentId) {
return studentRepository.findById(studentId).get();
}
public List<Student> findAll() {
List<Student> students = new ArrayList<>();
studentRepository.findAll().forEach(students::add);
return students;
}
//insert
@Transactional
public void add(Student vo) {
studentDao.save(vo);
}
資料來源:
Day12-Spring Boot-什麼是Spring Data JPA
Composite Primary Keys in JPA
簡介 Spring Data JDBC
Spring Boot中CrudRepository与JpaRepository
理解JPA注解@GeneratedValue
Spring boot
Spring Data JPA
說到Spring,一般指代的是Spring Framework,它是一個開源的應用程式框架,提供了一個簡易的開發方式,通過這種開發方式,將避免那些可能致使程式碼變得繁雜混亂的大量的業務/工具物件,說的更通俗一點就是由框架來幫你管理這些物件,包括它的建立,銷燬等,比如基於Spring的專案裡經常能看到的Bean。
Dec 16, 2023產生 SSL certificate keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650 這個 certificate 是 self-signed certificate 沒有經過第三方認證, 所以沒有公信力,正式上線會在瀏覽器看到 連線不被信任 application.properies 設定參考 #https端口号. server.port: 8443
Jun 8, 2021資料來源: Spring Boot and Thymeleaf Tutorial Spring Boot + Thymeleaf + Maven Example Spring Boot Hello World Example – Thymeleaf Thymeleaf教程 (十二) 标签内,js中使用表达式
Jun 2, 2021troubleshootinghttps://www.coder.work/article/4647200
Apr 12, 2021or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up