spring_boot demo

建立工按照本身需求導入須要導入的包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;
    }

}
相關文章
相關標籤/搜索