Spring-Boot-JPA進(jìn)階及實(shí)戰(zhàn)

通過(guò)上一篇文章佳窑,我們簡(jiǎn)單地了解了JPA的意義以及用法制恍,這次我們就通過(guò)一個(gè)具體的例子來(lái)詳細(xì)了解JPA的應(yīng)用神凑。

這次我們要做的是仿極簡(jiǎn)圖床網(wǎng)頁(yè)净神,功能就是在網(wǎng)頁(yè)上有幾個(gè)圖集,點(diǎn)擊任意一個(gè)圖集溉委,會(huì)跳到對(duì)應(yīng)的子頁(yè)面,子頁(yè)面上顯示同類(lèi)的圖片組瓣喊。

First(后端代碼)

  • 代碼語(yǔ)言:java語(yǔ)言

  • 編譯工具:Intellij IDEA

  • 目錄結(jié)構(gòu)


    structure.png

    首先在pom.xml中加入要用到的依賴(lài)

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>bootstrap</artifactId>
            <version>3.3.7-1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>jquery</artifactId>
            <version>3.2.1</version>
        </dependency>
        <dependency>
            <groupId>com.spring4all</groupId>
            <artifactId>swagger-spring-boot-starter</artifactId>
            <version>1.8.0.RELEASE</version>
        </dependency>

    </dependencies>

然后在resourse下的applications.properties中配置數(shù)據(jù)庫(kù)相關(guān)信息

spring.datasource.url=jdbc:mysql://localhost:3306/springboot_demo?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=*****
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.tomcat.max-active=20
spring.datasource.tomcat.max-idle=8
spring.datasource.tomcat.min-idle=8
spring.datasource.initial=10

spring.jpa.database=mysql
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.hbm2ddl.auto = update
spring.thymeleaf.cache=false

server.port=8080

其次在entity包下新建Album、Photo實(shí)體類(lèi)

@Entity
@Data
public class Album {
    @Id
    @GeneratedValue
    private Integer id;
    private String albumCover;
    private String albumTitle;
    private String albumDescription;
    private Integer likes;

    @OneToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
    @JoinColumn(name = "albumId",referencedColumnName = "id")
    private List<Photo> photos;

    public Album(String albumCover, String albumTitle, String albumDescription, Integer likes) {
        this.albumCover = albumCover;
        this.albumTitle = albumTitle;
        this.albumDescription = albumDescription;
        this.likes = likes;
    }

    public Album(String albumTitle){
    }

    public List<Photo> getPhotos() {
        return photos;
    }

    public void setPhotos(List<Photo> photos) {
        this.photos = photos;
    }
}

Entity注解必須與@Id注解 結(jié)合使用藻三,否則 No identifier specified for entity:

@Entity
@Data
public class Photo {
    @Id
    @GeneratedValue
    private Integer id;
    private String photoUrl;
    private String photoName;
    private String photoDescription;

    public Photo(String photoUrl, String photoName, String photoDescription) {
        this.photoUrl = photoUrl;
        this.photoName = photoName;
        this.photoDescription = photoDescription;
    }
    public void Photo(){

    }
}

寫(xiě)到這里洪橘,其實(shí)可以運(yùn)行一下Application棵帽,這樣就會(huì)在數(shù)據(jù)庫(kù)中建立對(duì)應(yīng)的表熄求,可以直接往表里插入數(shù)據(jù)。如果這時(shí)不想添加數(shù)據(jù)的話逗概,也可以在后面的代碼中插入數(shù)據(jù)弟晚,兩種方式都可以。

Respoitry包

  • AlbumRepositry
public interface AlbumRepositry extends JpaRepository<Album,Integer> {
    @Query("from Album a  order by a.likes desc ")
    List<Album> findHotAlbum();
    Album findByAlbumTitle(String albumTitle);
}
  • PhotoRepositry
public interface PhotoRepositry extends JpaRepository<Photo,Integer> {
}

Service包

  • AlbumService
public interface AlbumService {
    List<Album> getAll();
    List<Album> findHotAlbum();
    Album findByAlbumTitle(String albumTitle);
}
  • PhotoService
public interface PhotoService {
    List<Photo> getAll();
}

impl包

  • AlbumServiceImpl
@Service
public class AlbumServiceImpl implements AlbumService {
    @Resource
    private AlbumRepositry albumRepositry;
    @Override
    public List<Album> getAll() {
        return albumRepositry.findAll();
    }

    @Override
    public List<Album> findHotAlbum() {
        return albumRepositry.findHotAlbum();
    }

    @Override
    public Album findByAlbumTitle(String albumTitle) {
        return albumRepositry.findByAlbumTitle(albumTitle);
    }

}
  • PhotoServiceImpl
@Service
public class PhotoServiceImpl implements PhotoService {
    @Resource
    private PhotoRepositry photoRepositry;

    @Override
    public List<Photo> getAll() {
        return photoRepositry.findAll();
    }
}

Controller包(重要卿城!)

  • AlbumController
@RestController
@CrossOrigin
@RequestMapping(value = "/album")
public class AlbumController {
    @Resource
    private AlbumService albumService;

    @GetMapping("/all")
    public List<Album> getAll(){
        return albumService.getAll();
    }

    @GetMapping("/order")
    public List<Album> findHotAlbum(){
        return albumService.findHotAlbum();
    }

    @GetMapping("/all/{name}")
    public Album findByAlbumTitle(@RequestParam String albumName){return albumService.findByAlbumTitle(albumName);}
}

說(shuō)明:CrossOrigin注解

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市铅搓,隨后出現(xiàn)的幾起案子瑟押,更是在濱河造成了極大的恐慌狸吞,老刑警劉巖勉耀,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異便斥,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)威始,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)枢纠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)黎棠,“玉大人晋渺,你說(shuō)我怎么就攤上這事镰绎。” “怎么了畴栖?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)八千。 經(jīng)常有香客問(wèn)我吗讶,道長(zhǎng)恋捆,這世上最難降的妖魔是什么照皆? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮膜毁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘愤钾。我一直安慰自己瘟滨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布室奏。 她就那樣靜靜地躺著,像睡著了一般劲装。 火紅的嫁衣襯著肌膚如雪胧沫。 梳的紋絲不亂的頭發(fā)上占业,一...
    開(kāi)封第一講書(shū)人閱讀 52,441評(píng)論 1 310
  • 那天绒怨,我揣著相機(jī)與錄音,去河邊找鬼谦疾。 笑死,一個(gè)胖子當(dāng)著我的面吹牛念恍,可吹牛的內(nèi)容都是我干的六剥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼疗疟,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了瞳氓?” 一聲冷哼從身側(cè)響起策彤,我...
    開(kāi)封第一講書(shū)人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎店诗,沒(méi)想到半個(gè)月后裹刮,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡捧弃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了恕洲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片塔橡。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡霜第,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出户辞,到底是詐尸還是另有隱情泌类,我是刑警寧澤底燎,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布刃榨,位于F島的核電站,受9級(jí)特大地震影響双仍,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜朱沃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一苞轿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧逗物,春花似錦、人聲如沸翎卓。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)坯门。三九已至,卻和暖如春逗扒,著一層夾襖步出監(jiān)牢的瞬間古戴,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工允瞧, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓述暂,卻偏偏與公主長(zhǎng)得像痹升,于是被迫代替她去往敵國(guó)和親畦韭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子疼蛾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容