1. 程式人生 > >springboot+springcloud+vue學習(二)

springboot+springcloud+vue學習(二)

json 介面開發:

@DeleteMapping
@PostMapping    獲取body中的實體(@RequestBody)
@GetMapping("/assent/{name}")     獲取路徑中的引數(@PathVariable)

log日誌配置:

logging.path=/user/local/log

logging.level.com.favorites=DEBUG

logging.level.org.springframework.web=INFO

logging.level.org.hibernate=ERROR

mysql 和jpa的使用:

想要使用mysql 和jpa 需要在pom.xml中加入相關的包

<dependency>        

  <groupId>org.springframework.boot</groupId>

       <artifactId>spring-boot-starter-data-jpa</artifactId>

</dependency>    

<dependency>        

  <groupId>mysql</groupId>        

  <artifactId>mysql-connector-java</artifactId>    

</dependency>

在配置檔案中需要配置資料庫連線,和jpa

spring.datasource.url=jdbc:mysql://localhost:3306/test

spring.datasource.username=root

spring.datasource.password=root

spring.datasource.driver-class-name=com.mysql.jdbc.Driver  //此項可檢查資料庫驅動是否正常

 

spring.jpa.properties.hibernate.hbm2ddl.auto=update

spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect

spring.jpa.show-sql= true

其實這個hibernate.hbm2ddl.auto引數的作用主要用於:自動建立|更新|驗證資料庫表結構,有四個值:

  1. create: 每次載入hibernate時都會刪除上一次的生成的表,然後根據你的model類再重新來生成新表,哪怕兩次沒有任何改變也要這樣執行,這就是導致資料庫表資料丟失的一個重要原因。

  2. create-drop :每次載入hibernate時根據model類生成表,但是sessionFactory一關閉,表就自動刪除。

  3. update:最常用的屬性,第一次載入hibernate時根據model類會自動建立起表的結構(前提是先建立好資料庫),以後載入hibernate時根據 model類自動更新表結構,即使表結構改變了但表中的行仍然存在不會刪除以前的行。要注意的是當部署到伺服器後,表結構是不會被馬上建立起來的,是要等 應用第一次執行起來後才會。

  4. validate :每次載入hibernate時,驗證建立資料庫表結構,只會和資料庫中的表進行比較,不會建立新表,但是會插入新值。

dialect 主要是指定生成表名的儲存引擎為InneoDB
show-sql 是否打印出自動生產的SQL,方便除錯的時候檢視(這裡給true 使用jpa自定義介面時方便檢查)

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

接下來就是建立實體,繼承jpa介面 ,service層邏輯處理,controller對外介面訪問

例:

@Entity
@Table(name = "T_SYS_USER") //資料庫表名
public class Users implements Serializable{

   private static final long serialVersionUID = 1L;

@Id
@Column(name = "ID", nullable = false, length = 100) //@GeneratedValue 主鍵自增長
private String id;

@Column(name = "ROLE_ID", nullable = true, length = 100)
private String role_id;

@Column(name = "ORG_ID", nullable = true, length = 100)
private String org_id;

@Column(name = "NAME", nullable = true, length = 30)
private String name;

@Column(name = "PASSWORD", nullable = true, length = 30)
private String password;

@Column(name = "EMAIL", nullable = true, length = 100)
private String email;

@Column(name = "TEL", nullable = true, length = 12)
private String tel;

@Column(name = "NICKNAME", nullable = true, length = 20)
private String nickname;

@Column(name = "CREATE_USER" , nullable = true, length = 30)
private String createUser;

@Column(name = "CREATE_DATE")
private Date createDate;

@Column(name = "UPDATE_USER" , nullable = true, length = 30)
private String updateUser;

@Column(name = "UPDATE_DATE")
private Date updateDate;
對於在資料庫不想生成的欄位新增 @Transient 註解,資料庫就不會生成相應的列

dao介面層只要繼承JpaRepository類就可以

例:

public interface AssentBasicRepository extends JpaRepository<AssentBasic, String> {}  //AssentBasic為實體類,String為實體類主鍵的型別

繼承jpa之後可以使用jpa封裝好的介面 ,也可以根據jpa的約定定義方法名,jpa會根據方法名生成相應的介面

如:findByUserName jpa就會認為這個介面是一個以UserName欄位為引數的全查詢介面

getUsersByNameAndPassword  jpa會認為這是一個以Name和Password為引數獲取Users實體的方法(具體相關定義規則,請自主查詢)
另外要提的就是他的修改新增操作,走save()方法
除此之外jpa 還有它分頁查詢自動排序等功能 (此處先空著......後期補上)
還有就是自定義sql語句:介面名不能和jpa規則要求一樣
//    @Query(value="SELECT * FROM T_MAP_UA WHERE UID=?1", nativeQuery=true)
// List<UsersAssents> selectByUid(String uid);

//    @Transactional     
// @Modifying
// @Query(value = "delete from T_ASSENT_BASIC where id =?1", nativeQuery = true)
// boolean deleteAssents(String id);

除查詢之外,其他操作需要開啟事物,在sql語句之上需要新增 @Transactional @Modifying 否則自定義sql語句會失敗!

service層 定義需要呼叫的介面(完全自定義,供controller層呼叫)
public interface AssentBasicService {
List<AssentBasic> getAssentBasicList();

Object delAssentBasic(String id);

AssentBasic postAssentBasic(AssentBasic assent);
}
定義impl類:
@Service
public class AssentBasicImpl implements AssentBasicService {
@Autowired
AssentBasicRepository assentBasicRepository; //注入dao層繼承jpa的方法
@Override
public List<AssentBasic> getAssentBasicList(){
return assentBasicRepository.findAll(); //呼叫jpa封裝好的方法
}
}
定義controller類:
@RestController  //以json形式返回資料
@CrossOrigin //解決跨域問題
@RequestMapping("/v1") //字首路徑
public class AssentBasicController {
@Autowired
AssentBasicService assentBasicService; //注入service層
@GetMapping("/assent")   //get請求方式
@ResponseBody
public List<AssentBasic> getAssentsList() {
return assentBasicService.getAssentBasicList(); //呼叫service 層中的方法返回json資料
}

@DeleteMapping("/assent/{assentId}")
@ResponseBody
public Object delAssentBasic(@PathVariable String assentId) { //@PathVariable 獲取請求路徑中的引數
    return assentBasicService.delAssentBasic(assentId);
}

@PostMapping("/assent")
@ResponseBody
public AssentBasic postAssentBasic(@RequestBody AssentBasic assent) { //@RequestBody 獲取body主體中的實體物件(通常以json形式傳遞)
    if(assent.getId() ==null){
assent.setId(generatePrimaryKey.generatePrimaryKey());
}
return assentBasicService.postAssentBasic(assent);
}
}
後臺介面邏輯處理完畢,啟動專案訪問地址即可獲得資料,也可通過Postman進行測試介面