SpringBoot學(xué)習(xí)隨筆記錄3(mysql配置叫搁、MVC-DAO、lombok)

mysql配置
1.項(xiàng)目添加mysql依賴供炎,配置操作數(shù)據(jù)庫(kù)包


WechatIMG1.jpeg
   <!-- 添加mysql依賴       -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!--   使用 starter-data-jpa操作數(shù)據(jù)庫(kù)-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

2.把xx/src/main/resources/下的 application.properties改名為application.yml渴逻,因?yàn)閥ml使代碼更加簡(jiǎn)潔。
application.yml中配置數(shù)據(jù)庫(kù)內(nèi)容

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver   #設(shè)置數(shù)據(jù)庫(kù)驅(qū)動(dòng)
    username: root                             #用戶名
    password: 123456                           #密碼
    url: jdbc:mysql://192.168.1.137/sell?characterEncoding=utf-8&useSSL=false  #數(shù)據(jù)庫(kù)地址音诫,characterEncoding防止中文亂碼惨奕,useSSL忽略非SSL安全協(xié)議警告
  jpa:
    show-sql: true            #因?yàn)槭情_發(fā)環(huán)境所以打印sql語(yǔ)句

MVC架構(gòu):DAO-service-Controller
MVC - DAO要點(diǎn):
a.數(shù)據(jù)庫(kù)表名和項(xiàng)目中類名關(guān)系


屏幕快照 2019-04-04 下午5.05.23.png

雖然類名駝峰寫,表名是下劃線寫法竭钝,但是spring-boot-starter-data-jpa會(huì)自動(dòng)識(shí)別將兩者關(guān)聯(lián)
如果想類名與表名不一致可以這樣寫:


WechatIMG2.jpeg
  b.數(shù)據(jù)庫(kù)映射成對(duì)象需要在類中加上@Entity注解
  c.@Id   //主鍵.    @GeneratedValue   //自增,   command+n設(shè)置get/set/toString方法

單元測(cè)試

  1. 選中接口右鍵->Go to->Test, create new test
    2.Springboot2.0后findOne(id)方法被廢除梨撞,使用findById(id).get()代替, findOne(S)用來(lái)查找對(duì)象S
    3.repository.save(productCategory);增加數(shù)據(jù)時(shí),如果不設(shè)置id,使用自增id,直接保存會(huì)報(bào)錯(cuò)香罐。需要在自增id注解中加 strategy = GenerationType.IDENTITY卧波,如:@GeneratedValue(strategy = GenerationType.IDENTITY) //自增
    4.自動(dòng)更新時(shí)間需要在表類中添加@DynamicUpdate注解(否則表類中有createTime、updateTime屬性時(shí)庇茫,更新方法不會(huì)自動(dòng)更新時(shí)間)
    5.添加構(gòu)造方法港粱,command+n -> Constructor
    6.@Transactional注解可以是測(cè)試內(nèi)容不插入表中
    @Test
    @Transactional //設(shè)置測(cè)試內(nèi)容不插入表中
    public void testTest(){
        //構(gòu)造方法添加數(shù)據(jù)
        ProductCategory productCategory = new ProductCategory("老人最愛",4);
        ProductCategory result = repository.save(productCategory);
        Assert.assertNotNull(result);//不為空表示成功
    }

7.list條件查詢,ProductCategoryRepository接口添加

public interface ProductCategoryRepository extends JpaRepository<ProductCategory, Integer> {

    //list查詢,一次查多個(gè)數(shù)據(jù)旦签,查的結(jié)果為list啥容,通過CategoryType查,In代表在其范圍內(nèi)的顷霹,查詢條件為categoryTypeList咪惠。即:查詢CategoryType在categoryTypeList范圍內(nèi)的數(shù)據(jù)
    List<ProductCategory> findByCategoryTypeIn(List<Integer> categoryTypeList);
}

注意:使用list條件查詢時(shí)需要有一個(gè)無(wú)參的構(gòu)造方法

lombok插件使用
lombok以簡(jiǎn)單的注解形式來(lái)簡(jiǎn)化java代碼,提高開發(fā)人員的開發(fā)效率淋淀,如生成構(gòu)造器遥昧、getter/setter覆醇、equals、hashcode炭臭、toString等等
使用方法:pom.xml添加依賴

        <!--lombok以簡(jiǎn)單的注解形式來(lái)簡(jiǎn)化java代碼蓬网,提高開發(fā)人員的開發(fā)效率跌帐,如生成構(gòu)造器、getter/setter、equals纤壁、hashcode蝗拿、toString等等-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

( IDEA需要添加下載插件:
preferences->搜索Plugins->搜索lombok->安裝)
*使用時(shí)需要在表類中加注解@Data ,@Data包含了getter/setter榕订、equals析显、hashcode、toString等等方法肚豺。

表類:

package com.gang.sell.dataobject;

import lombok.Data;
import org.hibernate.annotations.DynamicUpdate;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import java.util.Date;

/*
*類目
*
**/
@Entity
@DynamicUpdate
@Data
public class ProductCategory {

    /* 類目id */
    @Id   //主鍵
    @GeneratedValue(strategy = GenerationType.IDENTITY)   //自增
    private  Integer categoryId;

    /* 類目名字 */
    private  String categoryName;

    /* 類目編號(hào) */
    private  Integer categoryType;

//    private Date createTime;
//
//    private Date updateTime;


    //    public Integer getCategoryId() {
//        return categoryId;
//    }
//
//    public void setCategoryId(Integer categoryId) {
//        this.categoryId = categoryId;
//    }
//
//    public String getCategoryName() {
//        return categoryName;
//    }
//
//    public void setCategoryName(String categoryName) {
//        this.categoryName = categoryName;
//    }
//
//    public Integer getCategoryType() {
//        return categoryType;
//    }
//
//    public void setCategoryType(Integer categoryType) {
//        this.categoryType = categoryType;
//    }
//
//    public Date getCreateTime() {
//        return createTime;
//    }
//
//    public void setCreateTime(Date createTime) {
//        this.createTime = createTime;
//    }
//
//    public Date getUpdateTime() {
//        return updateTime;
//    }
//
//    public void setUpdateTime(Date updateTime) {
//        this.updateTime = updateTime;
//    }
//
//    @Override
//    public String toString() {
//        return "ProductCategory{" +
//                "categoryId=" + categoryId +
//                ", categoryName='" + categoryName + '\'' +
//                ", categoryType=" + categoryType +
//                '}';
//    }

    //構(gòu)造方法

    //無(wú)參構(gòu)造方法
    public ProductCategory() {
    }

    public ProductCategory(String categoryName, Integer categoryType) {
        this.categoryName = categoryName;
        this.categoryType = categoryType;
    }
}

接口類:

package com.gang.sell.repository;

import com.gang.sell.dataobject.ProductCategory;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

public interface ProductCategoryRepository extends JpaRepository<ProductCategory, Integer> {

    //list查詢溃斋,一次查多個(gè)數(shù)據(jù),查的結(jié)果為list吸申,通過CategoryType查梗劫,In代表在其范圍內(nèi)的,查詢條件為categoryTypeList截碴。即:查詢CategoryType在categoryTypeList范圍內(nèi)的數(shù)據(jù)
    List<ProductCategory> findByCategoryTypeIn(List<Integer> categoryTypeList);
}

測(cè)試類:

package com.gang.sell.repository;

import com.gang.sell.dataobject.ProductCategory;
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;

import javax.transaction.Transactional;
import java.sql.Array;
import java.util.Arrays;
import java.util.List;


@RunWith(SpringRunner.class)
@SpringBootTest
public class ProductCategoryRepositoryTest {

    @Autowired
    private  ProductCategoryRepository repository;

    @Test
    public void findOneTest() {
        ProductCategory productCategory = repository.findById(1).get();
        System.out.println(productCategory.toString());
    }

    @Test
    public void saveTest() {//新增數(shù)據(jù)
        //1
//        //增加數(shù)據(jù)時(shí)梳侨,如果不設(shè)置id,使用自增id,直接保存會(huì)報(bào)錯(cuò)。需要在自增id注解中加    strategy = GenerationType.IDENTITY
//        ProductCategory productCategory = new ProductCategory();
//        productCategory.setCategoryName("女生最愛");
//        productCategory.setCategoryType(3);
//        repository.save(productCategory);


        //2
        //構(gòu)造方法添加數(shù)據(jù)
        ProductCategory productCategory = new ProductCategory("女生最愛",3);
        ProductCategory result = repository.save(productCategory);
        Assert.assertNotNull(result);//不為空表示成功
//      等價(jià)于  Assert.assertNotEquals(null,result);
    }

    @Test
    public void updateTest(){//更新數(shù)據(jù)
        //1
//        ProductCategory productCategory = new ProductCategory();
//        productCategory.setCategoryId(2); //更新數(shù)據(jù)需要設(shè)置id
//        productCategory.setCategoryName("男生最愛");
//        productCategory.setCategoryType(3);
//        repository.save(productCategory);
        //2
        //查數(shù)據(jù)
        ProductCategory productCategory = repository.findById(2).get();
        //改數(shù)據(jù)
        productCategory.setCategoryType(9);
        //保存
        repository.save(productCategory);

    }

    @Test
    @Transactional //設(shè)置測(cè)試內(nèi)容不插入表中
    public void testTest(){
        //構(gòu)造方法添加數(shù)據(jù)
        ProductCategory productCategory = new ProductCategory("老人最愛",4);
        ProductCategory result = repository.save(productCategory);
        Assert.assertNotNull(result);//不為空表示成功
    }


    @Test
    //條件查詢
    public void findByCategoryTypeInTest(){
        List<Integer> list = Arrays.asList(2,3,4);//CategoryType為2或3或4的數(shù)據(jù)
        List<ProductCategory> result = repository.findByCategoryTypeIn(list);
        Assert.assertNotEquals(0,result.size()); //查出結(jié)果大于0

    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末日丹,一起剝皮案震驚了整個(gè)濱河市走哺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌聚凹,老刑警劉巖割坠,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件齐帚,死亡現(xiàn)場(chǎng)離奇詭異妒牙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)对妄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門湘今,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人剪菱,你說我怎么就攤上這事摩瞎。” “怎么了孝常?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵旗们,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我构灸,道長(zhǎng)上渴,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮稠氮,結(jié)果婚禮上曹阔,老公的妹妹穿的比我還像新娘。我一直安慰自己隔披,他們只是感情好赃份,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著奢米,像睡著了一般抓韩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上恃慧,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天园蝠,我揣著相機(jī)與錄音,去河邊找鬼痢士。 笑死彪薛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的怠蹂。 我是一名探鬼主播善延,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼城侧!你這毒婦竟也來(lái)了易遣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤嫌佑,失蹤者是張志新(化名)和其女友劉穎豆茫,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屋摇,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡揩魂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了炮温。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片火脉。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖柒啤,靈堂內(nèi)的尸體忽然破棺而出倦挂,到底是詐尸還是另有隱情,我是刑警寧澤担巩,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布方援,位于F島的核電站,受9級(jí)特大地震影響涛癌,放射性物質(zhì)發(fā)生泄漏犯戏。R本人自食惡果不足惜窥浪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望笛丙。 院中可真熱鬧漾脂,春花似錦、人聲如沸胚鸯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)姜钳。三九已至坦冠,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哥桥,已是汗流浹背辙浑。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拟糕,地道東北人判呕。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像送滞,于是被迫代替她去往敵國(guó)和親侠草。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

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

  • jHipster - 微服務(wù)搭建 CC_簡(jiǎn)書[http://www.reibang.com/u/be0d56c4...
    quanjj閱讀 795評(píng)論 0 2
  • JSPXCMS開發(fā)架構(gòu)介紹 V1 – 架構(gòu)概述 基本概述 配置文件目錄 /src/main/resources/...
    Java_Evan閱讀 4,371評(píng)論 0 0
  • springboot 概述 SpringBoot能夠快速開發(fā)犁嗅,簡(jiǎn)化部署边涕,適用于微服務(wù) 參考嘟嘟大神SpringBo...
    一紙硯白閱讀 5,386評(píng)論 2 20
  • 這個(gè)冬夜功蜓,窗外的溫度零下十幾度,屋內(nèi)卻溫暖如春宠蚂。 2017年的旅程就要結(jié)束了式撼,我們即將踏上2018年的新征程。 這...
    流年芳華閱讀 499評(píng)論 0 6
  • 大學(xué)四年一晃而逝肥矢,大抵只有到了畢業(yè)的時(shí)候才會(huì)覺得四年如此短暫端衰。所遇到的人叠洗,所經(jīng)歷的事甘改,就像過電影一樣在腦海中閃現(xiàn),...
    浮生萬(wàn)緒閱讀 270評(píng)論 0 0