Spring Boot JPA訪問Mysql

上篇演示了通過Maven構(gòu)建Spring Boot 項(xiàng)目,引用web模塊啟動(dòng)應(yīng)用滋戳,完成簡(jiǎn)單的web 應(yīng)用訪問,本章內(nèi)容在此基礎(chǔ)上面加入數(shù)據(jù)訪問與端口修改晌柬,下文代碼與演例(本用例純手工測(cè)試通過刺下,放心入坑)绑嘹。

修改默認(rèn)端口

  1. 在src\main\resources下加入application.properties內(nèi)容如下
server.port=8888

項(xiàng)目目錄結(jié)構(gòu)

Paste_Image.png
  1. 啟動(dòng)應(yīng)用,日志顯示:
Paste_Image.png

端口已經(jīng)由默認(rèn)的8080 變更為8888

JPA訪問mysql數(shù)據(jù)庫

  1. POM中加入
       <!-- Spring Boot JPA -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
            <version>RELEASE</version>
        </dependency>
        <!-- MYSQL -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
  1. 在src\test\resources下加入application.properties內(nèi)容如下(正式應(yīng)用中請(qǐng)把配置加入至src\main\resources下application.properties中):
server.port=8888
spring.datasource.url=jdbc:mysql://localhost:3306/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.hbm2ddl.auto=create-drop
  • create : 會(huì)根據(jù)你的model類來生成表,但是每次運(yùn)行都會(huì)刪除上一次的表,重新生成表,哪怕2次沒有任何改變 (生產(chǎn)禁用,不小心用了會(huì)哭的。橘茉。)
  • create-drop : 根據(jù)model類生成表,但是sessionFactory一關(guān)閉,表就自動(dòng)刪除 (生產(chǎn)禁用)
  • update : 最常用的屬性工腋,也根據(jù)model類生成表,即使表結(jié)構(gòu)改變了,表中的行仍然存在,不會(huì)刪除以前的行
  • validate : 只會(huì)和數(shù)據(jù)庫中的表進(jìn)行比較,不會(huì)創(chuàng)建新表,但是會(huì)插入新值
  1. 新建實(shí)體
    src\main\java\com\entity\User.java
package com.entity;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import java.io.Serializable;
@Entity
@Table(name="t_user")
public class User implements Serializable {
private static final long serialVersionUID = -3258839839160856613L;
    @Id
    @GeneratedValue
    private Long id;

    private String name;

    private String moblie;



    public Long getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getMoblie() {
        return moblie;
    }

    public void setMoblie(String moblie) {
        this.moblie = moblie;
    }
}
  1. 新建數(shù)據(jù)訪問接口(JPA)
    src\main\java\com\dao\UserRepository .java
package com.dao;

import entity.User;
import org.springframework.data.jpa.repository.JpaRepository;

/**
 * Description:
 * date:  2017/3/15 16:28
 */
public interface UserRepository  extends JpaRepository<User, Long> {

    User findByName(String name);
    
}
從源碼上面可以看出,JpaRepository已經(jīng)實(shí)現(xiàn)了save(更新與保存)畅卓、delete擅腰、getOne、findAll等方法翁潘,所以對(duì)于基礎(chǔ)數(shù)據(jù)的操作趁冈,接口上不需要再定義,直接使用就好拜马。
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package org.springframework.data.jpa.repository;

import java.io.Serializable;
import java.util.List;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Sort;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.QueryByExampleExecutor;

@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);
}

4.編寫對(duì)應(yīng)的單元測(cè)試來驗(yàn)證編寫的內(nèi)容是否正確

  • POM中加入
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
  • 創(chuàng)建單元測(cè)試用例
    src\test\java\UserTest.java
import com.SampleController;
import com.dao.UserRepository;
import com.entity.User;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

/**
 * date:  2017/3/15 17:21
 */
@RunWith(SpringRunner.class)
@SpringBootTest(classes = SampleController.class)
public class UserTest {

    @Autowired
    private UserRepository userRepository;

    @Test
    public void saveTest() {
        User user = new User();
        user.setName("王大錘");
        user.setMoblie("13300000000");
        userRepository.save(user);

        Assert.assertEquals("13300000000", userRepository.findByName("王大錘").getMoblie());
    }
}

運(yùn)行結(jié)果示例

Paste_Image.png

參考資料:

http://docs.spring.io/spring-boot/docs/1.5.2.RELEASE/reference/htmlsingle/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末渗勘,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子俩莽,更是在濱河造成了極大的恐慌旺坠,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扮超,死亡現(xiàn)場(chǎng)離奇詭異取刃,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)瞒津,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門蝉衣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來括尸,“玉大人巷蚪,你說我怎么就攤上這事”舴” “怎么了屁柏?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)有送。 經(jīng)常有香客問我淌喻,道長(zhǎng),這世上最難降的妖魔是什么雀摘? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任裸删,我火速辦了婚禮,結(jié)果婚禮上阵赠,老公的妹妹穿的比我還像新娘涯塔。我一直安慰自己肌稻,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布匕荸。 她就那樣靜靜地躺著爹谭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪榛搔。 梳的紋絲不亂的頭發(fā)上诺凡,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音践惑,去河邊找鬼腹泌。 笑死,一個(gè)胖子當(dāng)著我的面吹牛童本,可吹牛的內(nèi)容都是我干的真屯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼穷娱,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼绑蔫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起泵额,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤配深,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后嫁盲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體篓叶,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年羞秤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了缸托。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瘾蛋,死狀恐怖俐镐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情哺哼,我是刑警寧澤佩抹,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站取董,受9級(jí)特大地震影響棍苹,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜茵汰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一枢里、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦栏豺、人聲如沸梭灿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽堡妒。三九已至,卻和暖如春溉卓,著一層夾襖步出監(jiān)牢的瞬間皮迟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來泰國(guó)打工桑寨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留伏尼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓尉尾,卻偏偏與公主長(zhǎng)得像爆阶,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子沙咏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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