1. 程式人生 > >從.Net到Java學習第十二篇——SpringBoot+JPA提供跨域介面

從.Net到Java學習第十二篇——SpringBoot+JPA提供跨域介面

最近又擼了半個月的前端程式碼,做app離線儲存,然後又花了一週去將過去的wcf專案轉webapi,java又被落下了,總感覺我特麼像鬥地主中的癩子牌,變來變去.....

Spring Data JPA 是Spring Data 的一個子專案,它通過提供基於JPA的Repository極大了減少了操作JPA的程式碼。我覺得它就是一個封裝好了的泛型倉儲。

點選JpaRepository進去看下它的原始碼:

@NoRepositoryBean
public interface JpaRepository<T, ID extends Serializable> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {
    List
<T> findAll(); List<T> findAll(Sort var1); List<T> findAll(Iterable<ID> var1); <S extends T> List<S> save(Iterable<S> var1); void flush(); <S extends T> S saveAndFlush(S var1); void deleteInBatch(Iterable<T> var1);
void deleteAllInBatch(); T getOne(ID var1); <S extends T> List<S> findAll(Example<S> var1); <S extends T> List<S> findAll(Example<S> var1, Sort var2); }

有了前面文章的基礎之後,下面的操作就信手捏來了,所以就不做過多的解釋。

這裡用到了mysql資料庫,先執行已經準備好mysql指令碼,進行資料庫初始化。

SET FOREIGN_KEY_CHECKS=
0; -- ---------------------------- -- Table structure for `tb_book` -- ---------------------------- DROP TABLE IF EXISTS `tb_book`; CREATE TABLE `tb_book` ( `id` bigint(11) NOT NULL AUTO_INCREMENT, `bookname` varchar(50) DEFAULT NULL COMMENT '書名', `price` decimal(10,0) DEFAULT '0' COMMENT '價格', `author` varchar(30) DEFAULT NULL COMMENT '作者', `publishdate` date DEFAULT NULL COMMENT '出版日期', `pagesize` int(11) DEFAULT '0' COMMENT '頁數', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of tb_book -- ---------------------------- INSERT INTO `tb_book` VALUES ('1', 'ASP.NET MVC企業級實戰', '89', '鄒瓊俊', '2017-04-01', '476'); INSERT INTO `tb_book` VALUES ('2', 'Java瘋狂講義', '99', '李陽', '2016-05-02', '890');

修改pom.xml檔案,新增jpa引用,當然這裡用到了mysql資料庫,那麼還要新增mysql資料庫引用

 <!--jpa-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <!--整合druid,使用連線池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

修改配置檔案application.yml,對資料庫和jpa進行配置

spring:
  profiles:
    active: dev
  datasource:
      name: demo
      url: jdbc:mysql://127.0.0.1:3306/demo?&useSSL=false
      username: root
      password: yujie
      # 使用druid資料來源
      type: com.alibaba.druid.pool.DruidDataSource
      driver-class-name: com.mysql.jdbc.Driver
      filters: stat
      maxActive: 20
      initialSize: 1
      maxWait: 60000
      minIdle: 1
      timeBetweenEvictionRunsMillis: 60000
      minEvictableIdleTimeMillis: 300000
      validationQuery: select 'x'
      testWhileIdle: true
      testOnBorrow: false
      testOnReturn: false
      poolPreparedStatements: true
      maxOpenPreparedStatements: 20
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
  jackson:
    serialization: true

建立實體類Book,建立包model,然後建立類Book,需要注意的是java中沒有decimal型別,對,沒錯,一開始我習慣性的輸入decimal,結果果斷報錯了,然後一查文件,發現要用BigDecimal。

package com.yujie.model;

import javax.persistence.*;
import java.math.BigDecimal;
import java.util.Date;

@Entity
@Table(name = "tb_book")
public class Book {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    public long id;
    public String bookname;
    public BigDecimal price;
    public String author;
    public Date publishdate;
    public int pagesize;

    public long getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getBookname() {
        return bookname;
    }

    public void setBookname(String bookname) {
        this.bookname = bookname;
    }

    public BigDecimal getPrice() {
        return price;
    }

    public void setPrice(BigDecimal price) {
        this.price = price;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public Date getPublishdate() {
        return publishdate;
    }

    public void setPublishdate(Date publishdate) {
        this.publishdate = publishdate;
    }

    public int getPagesize() {
        return pagesize;
    }

    public void setPagesize(int pagesize) {
        this.pagesize = pagesize;
    }

    @Override
    public String toString() {
        return "Book{" +
                "id=" + id +
                ", bookname='" + bookname + '\'' +
                ", price=" + price +
                ", author='" + author + '\'' +
                ", publishdate=" + publishdate +
                ", pagesize=" + pagesize +
                '}';
    }
}
View Code

建立資料庫訪問介面IBookRepository,這裡繼承JPA封裝的泛型介面JpaRepository

package com.yujie.dao;

import com.yujie.model.Book;
import org.springframework.data.jpa.repository.JpaRepository;

public interface IBookRepository extends JpaRepository<Book,Long> {

}

建立控制器BookController,為了讓這個控制器直接變成類似.net 中的webapi,我直接在控制器上面添加註解@RestController,這樣返回的就是json資料了。

package com.yujie.controller;

import com.yujie.dao.IBookRepository;
import com.yujie.model.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
public class BookController {
    @Autowired
    private IBookRepository repository;
    @GetMapping("/book/{id}")
    public Book getBookDetail(@PathVariable("id") long id){
        return repository.findOne(id);
    }
}

新增跨域配置類CorsConfig

package com.yujie.filter;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

/**
 * 解決前端站點(主要為JavaScript發起的Ajax請求)訪問的跨域問題
 */
@Configuration
public class CorsConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addCorsMappings(CorsRegistry registry) {

        registry.addMapping("/**")
                .allowedOrigins("*")    //允許所有前端站點呼叫
                .allowCredentials(true)
                .allowedMethods("GET", "POST", "DELETE", "PUT")
                .maxAge(1728000);
    }
}

執行測試

1.安裝vue-resource

npm install vue-resource --save

2.在main.js中引入vue-resource

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import VueResource from 'vue-resource'

Vue.config.productionTip = false
Vue.use(VueResource)
/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>',
  http:{
    root:''
  }
})

3.修改BookDetail.vue程式碼:

<template>
<div class="bookdetail">
  <div>書名:<span v-text="bookdata.bookname"></span></div>
  <div>作者:<span v-text="bookdata.author"></span></div>
  <div>頁數:<span v-text="bookdata.pagesize"></span></div>
  <div>定價:<span v-text="bookdata.price"></span></div>
  <div>出版日期:<span v-text="bookdata.publishdate"></span></div>
</div>
</template>

<script>
    export default {
      name: "BookDetail",
      data(){
        return{
          id:this.$route.params.id,
          bookdata:{bookname:'',author:'',price:0,publishdate:'',pagesize:0}
        }
      },
      created(){
        var self=this;
        this.$http.get("http://localhost:8083/book/"+this.id).then(res=>{
          self.bookdata.bookname=res.body.bookname;
          self.bookdata.author=res.body.author;
          self.bookdata.price=res.body.price;
          self.bookdata.publishdate=res.body.publishdate;
          self.bookdata.pagesize=res.body.pagesize;
        });
      },
      props:[

      ]
    }
</script>

<style scoped>
.bookdetail div{text-align: left;}
</style>

執行結果:

相關推薦

.Net到Java學習——SpringBoot+JPA提供介面

最近又擼了半個月的前端程式碼,做app離線儲存,然後又花了一週去將過去的wcf專案轉webapi,java又被落下了,總感覺我特麼像鬥地主中的癩子牌,變來變去..... Spring Data JPA 是Spring Data 的一個子專案,它通過提供基於JPA的Repository極大了減少了操作JP

.Net到Java學習——SpringBoot登入實現

通過前面10篇文章的學習,相信我們對SpringBoot已經有了一些瞭解,那麼如何來驗證我們的學習成果呢?當然是通過做專案來證明啦!所以從這一篇開始我將會對之前自己做的.net專案用java來重寫。這一篇,我們來現實登入模組。 一提到登入,我們首先想到的基本的功能點就有如下: 輸入:使用者名稱、密碼、

嵌入式視訊方案學習——視訊編碼模組VENC 一般初始化過程

在Sample_comm_venc.c中SAMPLE_COMM_VENC_Start實現venc的啟動 在SAMPLE_COMM_VENC_Start中首先獲取圖片大小 然後建立組HI_MPI_VENC_CreateGroup 然後根據編碼型別配置不同的引數,建立通道 HI_

OpenCV學習:帶透明通道影象合成(縮放,旋轉,和ROI)

第一步:獲取素材圖片 Mat src, dst; src = imread("F:/識圖/底圖.PNG", 1); dst = imread("logo", -1); 【ps:這裡需要注意的是透明度圖片獲取,後面的引數帶-1】 第二

MySQL數據庫學習】pymysql模塊

http sele 失敗 nec relative 執行sql clas nbsp 兩種方法 一、安裝的兩種方法 第一種 #安裝 pip3 install pymysql 第二種 二、鏈接,執行sql,關閉(遊標) import pymysql user= i

框架學習系列 mybatis mapper映射文件之輸出映射

總結 www. XML 聲明 com 2.4 res rom 用戶 1: mapper映射文件輸出映射(輸入類型) 2:resultType的使用 3:resultMap的使用 3:總結&下節預告 本文是《凱哥陪你學系列-框架學習之mybatis框架學習》中第十二篇

C++學習筆記

111.容器中存放的都必須是值而不能是引用,容器內部實施的是值拷貝工作,容器內可以存放指標作為資料元素,STL中的容器其實就是資料結構課程中學習的連結串列,棧,佇列和雜湊表等結構。 112.線性表的典型操作: (1)size:獲取當前容器中的元素數目。 (2)insert:在當前元素前插

整合學習和隨機森林——自學

1、整合學習 在面臨選擇的時候需要作出決策,這時候你就會去詢問不同的人該做怎樣的決斷,最後將詢問後的決策進行投票,選擇投票個數最多的那個。對同一個問題,可以有不同的演算法,也會給出不同的結果,在這種情況下,可以整合不同的演算法,少數服從多數,選擇結果數最多的那類

SpringBoot:整合jsp

作者:追夢1819 原文:https://www.cnblogs.com/yanfei1819/p/10953600.html 版權宣告:本文為博主原創文章,轉載請附上博文連結! 引言   SpringBoot 雖然官方推薦使用 thymelaf 模板引擎,但是也支援jsp,只不過需要做一些修改。本文將講解

springboot + mongodb(復雜查詢)

參考 參數 iter extends lec con display itl dad 簡單查詢:使用自定義的XxxRepository接口即可。(見 第十一章 springboot + mongodb(簡單查詢)) 復雜查詢:使用MongoTemplate以及一些查詢

:HTML基礎

項目 logs 瀏覽器 圖片 handle 標題欄 width light 標題 本篇內容 HTML概述 HTML常用基本標簽 CSS格式引入 一、 HTML概述 1.定義: HTML,超文本標記語言,寫給瀏覽器的語言,目前網絡上應用最廣泛的語言。HTML也在不斷

spring boot實戰()整合RabbitMQ

this direct 還需要 添加屬性 創建 還需 topic start routing 前言 本篇主要講述Spring Boot與RabbitMQ的整合,內容非常簡單,純API的調用操作。 操作之間需要加入依賴Jar [html] view plain cop

linux系統學習天-<<工程師技術>>

linux工程師技術 linux管理員技術 linux雲計算工程師 深圳雲計算王森 雲計算運維工程師 虛擬化概述 ? Virtualization 資源管理 – x個物理資源 --> y個邏輯資源 – 實現程度:完全、部分、硬件輔助(CPU) 手動新建一臺虛擬機:

圖解Python 【】:Django 基礎

aps 不同的 mage 清空 font 一個 取數 ccf pos 本節內容一覽表: Django基礎:http://www.ziqiangxuetang.com/django/django-tutorial.html 一、Django簡介 Django文

:數據庫操作

mysq 查詢 alc mys clas 多對多 class 操作 連接查詢 一、數據庫簡紹 二、mysql 增刪改查 三、mysql 外鍵關聯 四、mysql 連接查詢 五、mysql 事務與索引 六、ORM 簡紹 七、sqlalchemy 常用語法 八、sqlalche

python全棧開發【】Python的模塊和包

提高 通過 color 操作 查看 綁定 packages 關系 搜索路徑 一、模塊 1.import.... 一個py文件就可以作為一個模塊 模塊的導入:直接導入文件的名字,不需要帶著後綴 模塊中的函數調用:模塊名.函數名() 導入模塊的時候做了三件事:1.首先開辟了一個

web前端【】jQuery文檔相關操作

scroll 知識點 eight 查看 for otto fix jquer utf-8 一、相關知識點總結1、CSS .css() - .css("color") -> 獲取color css值 - .css("color", "#ff

Django 【】Form組件進階

imp com htm 更新 mode attr mage index upd 一、定義的規則 class TeacherForm(Form): #必須繼承Form # 創建字段,本質上是正則表達式 username = fields.CharFiel

Python函數之全局變量&局部變量&遞歸函數

量變 錯誤 總結 bsp code 類型 hang qup 說明 全局變量:在定義的時候,頂頭寫的,沒有任何縮進的變量就是全局變量。 全局變量的特點:在當前文件裏的任何地方都可以進行調用 局部變量:在子程序裏定義的變量,就是局部變量。 子程序:比如.py文件裏,寫的函數就是

python學習天:閉包函數與裝飾器

源代碼 -s 為什麽 pre def func stop 修改 rom 閉包函數: 什麽是閉包函數: 閉指的是定義在一個函數內部 包指的是該函數包含對外部作用域(非全局作用域)名字的引用 def counter():   n=0   d