以Springboot為框架的預(yù)算管理后端demo

Github項(xiàng)目地址:travel-springboot-demo
博客文章鏈接:以Springboot為框架的預(yù)算管理后端demo

這個(gè)項(xiàng)目實(shí)際上是我服務(wù)計(jì)算概論課的一部分劲厌,題目要求是:編寫簡單的旅行預(yù)算管理服務(wù)的接口并做一個(gè)調(diào)用它的程序。因?yàn)樽罱脤W(xué)習(xí)了springboot框架,就以此框架來完成我的作業(yè)。

功能

按最開始的想法捆交,有兩張表酬蹋,分別記錄預(yù)算和記錄開支身笤。

id total
int double
id,主鍵,自增長 預(yù)算金額
id matter spend
int varchar double
id,主鍵斤彼,自增長 開支事項(xiàng) 花費(fèi)金額

有四個(gè)接口分瘦,分別能添加開支,更改預(yù)算(實(shí)際寫的過程中是添加預(yù)算記錄琉苇,然后取id最大的條數(shù))嘲玫,獲取預(yù)算,獲取已開支的總金額并扇。

因?yàn)橹皇莇emo去团,重點(diǎn)是想體現(xiàn)著兩類api的實(shí)現(xiàn)過程,所以功能上有些簡陋。

項(xiàng)目說明

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

SpendController對外提供接口土陪,接收和發(fā)出數(shù)據(jù)昼汗;

SpendMapper:數(shù)據(jù)控制層,和UserMapper.xml一起實(shí)現(xiàn)對數(shù)據(jù)庫的操縱

ItemSpend,TotalSpend:實(shí)體類

SpendService:服務(wù)層鬼雀,數(shù)據(jù)和服務(wù)之間的連接顷窒,并在SpendServiceImpl中實(shí)現(xiàn)

application.properties:springboot配置文件,此處僅用戶配置數(shù)據(jù)庫及更改端口

application.properties

# 數(shù)據(jù)庫連接uri源哩,最后的demo更改為自己的數(shù)據(jù)庫名
spring.datasource.url=jdbc:mysql://localhost:3306/demo
# 數(shù)據(jù)庫用戶名
spring.datasource.username=root
# 數(shù)據(jù)庫密碼
spring.datasource.password=123456

mybatis.mapper-locations=classpath*:mapper/*Mapper.xml

spring.jpa.show-sql=true
# 運(yùn)行的端口號
server.port=8098

實(shí)體類

放在entity包下蹋肮,下面以ItemSpend類為例說明:

@Data       // 此注解可用于替代getter和setter方法
@Entity // 表明此類為實(shí)體類
@Table(name = "item_spend") // 如果沒有此表會新建一張名為“item_spend”的表
public class ItemSpend {

    @Id // 表明此為主鍵
    @Column(name = "id")    //表的字段名
    private Integer id;

    @Column(name = "matter")
    private String spendMatter;

    @Column(name = "spend")
    private Float spend;
}

dao

此類下存放操縱數(shù)據(jù)庫的接口,此項(xiàng)目中以Mybatis為例璧疗,你也可以使用Jpa等坯辩。SpendMapper類和mapper/SpendMapper.xml配合使用,也可以直接采用@Select等注解的形式直接寫在SpendMapper中崩侠。以List\<ItemSpend\> getItemSpendList()為例:

@Mapper //聲明此類為mapper
public interface SpendMapper {

        ...

    List<ItemSpend> getItemSpendList();

    ...
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="xyz.somelou.travel.dao.SpendMapper">

    <resultMap type="xyz.somelou.travel.entity.ItemSpend" id="spendResultMap">
        <id property="id" column="id"/>
        <result property="spendMatter" column="matter"/>
        <result property="spend" column="spend"/>
    </resultMap>

        <!-- 返回List型對象漆魔,resultMap如果不在xml里列舉出來會報(bào)錯(cuò),我也不知道為什么-->
    <select id="getItemSpendList" resultMap="spendResultMap" parameterType="String">
        select * from item_spend;
    </select>

</mapper>

Service層

此層常以接口+實(shí)現(xiàn)的方式組織却音,用于處理從數(shù)據(jù)庫中查詢得到的數(shù)據(jù)和前臺發(fā)來的請求改抡,以TotalBudget getTotalBudget();為例:

@Service // 聲明此類為Service層
public class SpendServiceImpl implements SpendService {

    // 調(diào)用mapper
    @Autowired  // 寫在字段上,那么就不需要再寫setter方法
    SpendMapper spendMapper;// 有時(shí)編譯器會報(bào)紅系瓢,不要管它阿纤,實(shí)際沒有錯(cuò)誤

        ...

    @Override
    public TotalBudget getTotalBudget() {
        return spendMapper.getTotalBudget();
    }
}

Controller層

實(shí)現(xiàn)對外的接口,主要是調(diào)用者請求數(shù)據(jù)的解析和被請求數(shù)據(jù)的內(nèi)部獲取和封裝夷陋,以/add/budget/get/budget為例:

@CrossOrigin    // 支持跨域
@RestController // 聲明這是Controller,@RestController注解相當(dāng)于@ResponseBody + @Controller合在一起的作用,也可以只使用@Controller,具體我也不是很清楚
@RequestMapping(value = "/api/trip") // 接口(的一部分)
public class SpendController {

    // 使用Service接口
    @Autowired
    private SpendService spendService;
        
    // 補(bǔ)充說明接口
    @RequestMapping(value = "/add/budget")
    // @RequestBody Map<String,Object> para即為傳來的json
    // ModelMap返回一個(gè)json
    public ModelMap addBudget(@RequestBody Map<String,Object> param){
        ModelMap result=new ModelMap();
        TotalBudget totalBudget=new TotalBudget();
        totalBudget.setBudget(Float.valueOf(param.get("budget").toString()));
        spendService.addBudget(totalBudget);
        result.addAttribute("msg","success");
        return result;
    }

    ...
}

這樣該方法的對外接口(以在本機(jī)運(yùn)行為例):http://localhost:8098/api/trip/add/budget

已知bug

  1. 沒有進(jìn)行重復(fù)提交的限制欠拾,會因?yàn)榫W(wǎng)絡(luò)卡頓出現(xiàn)重復(fù)提交;

<hr />

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末骗绕,一起剝皮案震驚了整個(gè)濱河市藐窄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌酬土,老刑警劉巖荆忍,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異撤缴,居然都是意外死亡刹枉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門屈呕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來微宝,“玉大人,你說我怎么就攤上這事凉袱〗嬉鳎” “怎么了侦铜?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵专甩,是天一觀的道長钟鸵。 經(jīng)常有香客問我,道長涤躲,這世上最難降的妖魔是什么棺耍? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮种樱,結(jié)果婚禮上蒙袍,老公的妹妹穿的比我還像新娘。我一直安慰自己嫩挤,他們只是感情好害幅,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著岂昭,像睡著了一般以现。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上约啊,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天邑遏,我揣著相機(jī)與錄音,去河邊找鬼恰矩。 笑死记盒,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的外傅。 我是一名探鬼主播纪吮,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼萎胰!你這毒婦竟也來了彬碱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤奥洼,失蹤者是張志新(化名)和其女友劉穎巷疼,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體灵奖,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嚼沿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了瓷患。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骡尽。...
    茶點(diǎn)故事閱讀 40,115評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖擅编,靈堂內(nèi)的尸體忽然破棺而出攀细,到底是詐尸還是另有隱情箫踩,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布谭贪,位于F島的核電站境钟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏俭识。R本人自食惡果不足惜慨削,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望套媚。 院中可真熱鬧缚态,春花似錦、人聲如沸堤瘤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽本辐。三九已至桥帆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間师郑,已是汗流浹背环葵。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宝冕,地道東北人张遭。 一個(gè)月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像地梨,于是被迫代替她去往敵國和親菊卷。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評論 2 355