建立工按照本身需求導入須要導入的包java
springbooot 建立完成後會自動生成配置文件,與實體類,和testmysql
在工程中自動建立的 application.properties 中寫配置文件spring
#配置文件 此文件是後綴形式 #更改端口號 默認爲8080 server.port=8180 #配置數據庫連接 spring.datasource.url=jdbc:mysql://localhost:3306/(數據庫名字)?useSSL=false&serverTimezone=Asia/Shanghai spring.datasource.username=******* spring.datasource.password=******* #配置jpa初始化模式會自動讀取classpath下面的data.sql文件進行執行 #還會讀取schema.sql #schema.sql裏面通常會寫建表語句 #data.sql裏面會寫插入語句 spring.datasource.initialization-mode=always #關於jpa配置 #執行sql語句時,是否在控制檯打印 spring.jpa.show-sql=true #關閉根據實體類建立表的功能 #none #create 若是表不存在,則根據實體類配置建立表 #update 若是實體類的配置更改了,與表對應不上,那會更新表的結構 #creat-drop 工程啓動的時候先刪除表在建立表 spring.jpa.hibernate.ddl-auto=create-drop
建立 Emp實體類sql
package com.lanou.demo.springboot.entity; import lombok.*; import javax.persistence.*; import java.io.Serializable; @Data//次註解增長 getter setter, toString,equals,hashcode /*@Getter//只增長getter @Setter//只增長setter */ @AllArgsConstructor//增長一個全參的構造方法 @NoArgsConstructor//增長一個無參的構造方法 @Builder//增長建造者模式來建立對象 @Table(name = "emp")//配置該實體類所對應的表名是什麼 @Entity public class Emp implements Serializable{ //配置主鍵列要id註釋 @Id // 配置主鍵自增加方式 @GeneratedValue(strategy = GenerationType.IDENTITY) private Long euuid; @Column(name = "emp_name", unique = true, nullable = false) private String ename; private String email; private String tele; // // fetch=FetchType.LAZY爲默認的數據延遲加載, // fetch=FetchType.EAGER爲急加載。 // cascade={CascadeType.PERSIST,CascadeType.MERGE, // CascadeType.REFRESH,CascadeType.REMOVE}. // 其中: // CascadeType.PERSIST級聯新增(又稱級聯保存); // CascadeType.MERGE:級聯合並(級聯更新); // CascadeType.REMOVE:級聯刪除; // CascadeType.REFRESH:級聯刷新 // CascadeType.ALL:以上四種都是; // 通常採用CascadeType.MERGE:級聯合並(級聯更新)便可。默認值是均不進行關聯。 //referencedColumnName:參考列名,默認的狀況下是列表的主鍵 //nullable=是否能夠爲空, //insertable:是否能夠插入, //updatable:是否能夠更新 // columnDefinition=列定義, //foreignKey=外鍵 @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL) @JoinColumn(name = "dep_uuid",referencedColumnName="uuid",nullable=false) private Dep dep; // name屬性:外鍵列的名稱,默認狀況下是: // 引用實體的字段名稱 +「_」+ 被引用的主鍵列的名稱。通常也能夠自定義,通常見名知意,就能夠採用默認值。 // referencedColumnName屬性: // 參考列,默認值是關聯表的主鍵。例如你能夠定義pet_name爲參考列,那麼就會將pet的name的值關聯到這一列。 }
建立Dep實體類數據庫
package com.lanou.demo.springboot.entity; import lombok.Data; import javax.persistence.*; import java.io.Serializable; import java.util.ArrayList; import java.util.List; @Data //使用jpa須要配置實體類與表之間的對應關係 //這個配置方式 與hibernate 同樣 @Table(name = "dep")//配置該實體類所對應的表名是什麼 @Entity public class Dep implements Serializable { // jpa是一個標準 // hibernate是jpa的一個實現 // hibernate有個宗旨:儘可能少寫sql語句 //配置主鍵列要id註釋 @Id // 配置主鍵自增加方式 @GeneratedValue(strategy = GenerationType.IDENTITY) private Long uuid; @Column(name = "dep_name", unique = true, nullable = false) private String name; // 默認狀況下實體類的駝峯格式會自動映射到列的下劃線形式 private String mobile; // // 多對一 // @ManyToOne//裏面填對象 // @JoinColumn(name = "euuid") // private Emp emp; // 一對多 @OneToMany(mappedBy = "dep", fetch = FetchType.EAGER) private List<Emp> empList; // 多對多 // @ManyToMany // @JoinTable(name = "user_authority",joinColumns = @JoinColumn(name = "user_id"), // inverseJoinColumns = @JoinColumn(name = "authority_id")) // //一、關係維護端,負責多對多關係的綁定和解除 // //二、@JoinTable註解的name屬性指定關聯表的名字,joinColumns指定外鍵的名字,關聯到關係維護端(User) // //三、inverseJoinColumns指定外鍵的名字,要關聯的關係被維護端(Authority) // //四、其實能夠不使用@JoinTable註解,默認生成的關聯表名稱爲主表表名+下劃線+從表表名, // //即表名爲user_authority // //關聯到主表的外鍵名:主表名+下劃線+主表中的主鍵列名,即user_id // //關聯到從表的外鍵名:主表中用於關聯的屬性名+下劃線+從表的主鍵列名,即authority_id // //主表就是關係維護端對應的表,從表就是關係被維護端對應的表 // private List<Authority> authorityList; }
寫spl語句 的幾種方式 使用Jpaapache
第一種 : 自動生成sql語句
第二種 ;使用註解寫sql語句springboot
package com.lanou.demo.springboot.repository; import com.lanou.demo.springboot.entity.Dep; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import java.util.List; //繼承JpaRepository<> 就能夠根據方法名自動生成sql語句 //第一個參數寫實體類,第二個參數寫主鍵的類型 public interface DepRepository extends JpaRepository<Dep,Long> { 第一種 //jpa 能夠根據方法名自動生成sql語句 List<Dep> findByNameContains(String name); 第二種 /*nativeQuery = true 正常sql語句*/ @Query(value = "select *from dep where dep_name like concat('%',:name,'%')",nativeQuery = true) List<Dep> findByName(@Param("name") String name); 第三種 List<Dep> findAllTest(); }
第三種 在 DepRepository接口 寫好方法 建立一個實體類實現app
package com.lanou.demo.springboot.repository; import com.lanou.demo.springboot.entity.Dep; import com.sun.org.apache.xerces.internal.impl.XMLEntityManager; import org.springframework.stereotype.Repository; import javax.annotation.Resource; import javax.persistence.EntityManager; import javax.persistence.Query; import java.util.List; /*jpa 會自動根據類名的規則,會自動將該類做爲對應接口的實現類*/ @Repository public class DepRepositoryImpl { @Resource private EntityManager entityManager; public List<Dep> findAllTest(){ String sql="select *from dep"; Query nativeQuery = this.entityManager.createNativeQuery(sql, Dep.class); List resultList = nativeQuery.getResultList(); return resultList; } }