springBoot_JPA和lombok


一.JPA

特點:JPA可以根據方法名自動匹配sql語句.

JPA是一個標准

Hibernate是JPA的一個實現,宗旨是盡量少寫sql語句.

 

使用JPA

1.application.properties配置:

在springBoot工程下的application.properties配置文件中的相關配置:

#配置數據庫鏈接
spring.datasource.url=jdbc:mysql://數據庫信息?useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=test
spring.datasource.password=******

#配置數據庫初始化的模式,會自動讀取resources文件下面的data.sql文件(自定義)進行執行
#還會讀取schema.sql文件
#schema.sql一般會寫建表語句
#data.sql里面會寫數據庫插入的語句
spring.datasource.initialization-mode=always

#關於JPA的配置
#執行sql語句的時候,是否在控制台打印
spring.jpa.show-sql=true
#none 關閉根據實體類創建表的功能
#create 如果表不存在,則根據實體類的配置創建表
#update 如果實體類的配置更改了,與表對應不上,那么會更新表的結構
#create-drop 工程啟動的時候先刪除表在創建表。
spring.jpa.hibernate.ddl-auto=none

 

2.創建實體類

JPA會根據配置的實體類自動創建相應的表.

package com.example.demo.entity;
import lombok.Data;
import javax.persistence.*;

@Data
@Entity 
//上面這兩個注解是lombok里面的
//使用JPA需要配置實體類與表的對應關系
@Table(name = "dep") //配置實體類對應的表的名字是什么
public class Dep {

    //主鍵列需要配置ID注解
    @Id
    //配置注解自增長的方式
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long uuid;
   //name : 自定義表名
    //unique : 是否唯一
    //nullable : 是否為空.
    @Column(name = "dep_name" ,unique = true,nullable = false)
    private String name;
    //默認情況下。實體類的駝峰式的屬性會自動映射到列的下划線形式
    private String depTele;

   //建立表的之間的關聯.
    //OneToOne :一對一
    //OneToMany :一對多
    //ManyToMany : 多對對
    @ManyToMany(fetch = FetchType.EAGER)
//創建外鍵 @JoinTable(name = "role_menu",joinColumns = @JoinColumn(name = "role_id"), inverseJoinColumns = @JoinColumn(name = "menu_id")) private Set<MenuEntity> menus; }

  

3.創建接口

創建一個接口,繼承於JpaRepository<class,Long>

該接口有很多對數據庫操作的方法,不需要實現,用的時候只需要利用多態調用父接口的方法就能對數據庫進行操作.

比如:findById()方法,根據id查詢所有.

1.這里面也可以自定義一些方法,不過方法名要符合規則.

2.可以利用@Query注解為自定義的方法配置自己的sql語句.

3.可以定義一個方法,由實現類來重寫方法,在實現類里面重寫更復雜的sql

package com.example.demo.repository;

import com.example.demo.entity.Dep;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

import java.util.List;

public interface DepRepository extends JpaRepository<Dep,Long> {

   //JPA可以根據方法名自動生成SQL語句
    List<Dep> findAllByNameContaining(String name);
    //為方法配置自定義的sql
    @Query(value = "select * from dep where name like concat('%', :name,'%')",nativeQuery = true)
    List<Dep> findByname(@Param("name") String name);

//定義一個方法,有實現類來重寫該方法,重寫sql語句, List<Dep> findAllTest(); }

接口的實現類.

不需要在類上寫implements實現上面的接口,JPA會根據類名的命名規則自動匹配實現類.

注入一個EntityManager對象,該對象會根據sql語句和實體類對數據操作.

//JPA會根據類名的規則,自動將該類的作為對應接口的實現類
@Repository
public class DepRepositoryImpl {

    @Resource
    private EntityManager entityManager;

    public List<Dep> findAllTest(){

        String sql = "select * from dep";
        Query query = this.entityManager.createNativeQuery(sql, Dep.class);
        List list = query.getResultList();

        return list;
    }

}

4.直接在Service層調用接口方法對數據庫進行操作.

   //注入接口對象
   @Resource
    private DepRepository depRepository;

   Optional<Dep> optional = this.depRepository.findById(uuid);
         //獲取到的optional是一個代理對象
        //這個代理對象是與數據庫綁定的
        //當改變這個代理對象的屬性的值時,會自動改變數據庫中的值
        if (optional.isPresent()){
            //把代理對象轉為實體類對象
            Dep dep = optional.get();
            return dep;
        }

  

二.lombok

lombok主要是對創建的實體類的一些簡化,

一些常用的lombok注解:

@Data :   給實體類配置get和set,tostring方法

@AllgrgsConstructor  ;配置一個全參的構造方法

@NoArgsConstrutor : 添加一個空的構造方法

@Builder :創建建造者模式來創建對象.

@Getter : 創建get方式

@Setter ; 創建set方法

@Slf4j  :創建日志對象.

package com.example.demo.entity;
import lombok.*;

@Data  //真加getter&setter,toString,equals,hashcode
//@Getter  //只真加getter方法  其他同理
@AllArgsConstructor  //添加一個全參數的構造方法
@NoArgsConstructor   //添加一個無參數的構造方法
@Builder //真加一個建造者模式來創建對象
public class Emp {

    private Long uuid;
    private String name;
    private String email;
    private String tele;
}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM