IDEA+Spring boot+Mybatis+Mysql 前端接口開發(fā)(二)有的放矢

IDEA+Spring boot+Mybatis+Mysql 前端接口開發(fā)(一)工欲善其事必先利其器
IDEA+Spring boot+Mybatis+Mysql 前端接口開發(fā)(二)有的放矢

上篇-開發(fā)環(huán)境及工具的準備,本篇正式開擼代碼

目標

首先確定接口開發(fā)目標,在此以大多項目都會使用到的用戶登錄、注冊功能為例淑廊,做一個支持賬號注冊+綁定三方(qq奴潘、微信)登錄+綁定手機號并支持swagger 預(yù)覽調(diào)試的接口項目,文章只講述其中一個接口實現(xiàn)流程其它接口查看完整項目api-demo旧烧。

創(chuàng)建數(shù)據(jù)庫及表

1、用戶表一般有字段 id画髓、賬號掘剪、密碼、手機號奈虾、微信id夺谁、qqid等。創(chuàng)建用戶表代碼如下:

DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
  `id` varchar(64) NOT NULL COMMENT '用戶ID',
  `user_name` varchar(64) NOT NULL COMMENT '用戶名-賬號可做登錄使用',
  `nick_name` varchar(64) DEFAULT '' COMMENT '用戶昵稱',
  `password` varchar(128) NOT NULL COMMENT '密碼',
  `phone` varchar(11) DEFAULT '' COMMENT '電話號碼',
  `we_chat_open_id` varchar(64) DEFAULT '' COMMENT '微信授權(quán)id',
  `qq_open_id` varchar(64) DEFAULT '' COMMENT 'qq授權(quán)id',
  `head_url` varchar(256) DEFAULT '' COMMENT '頭像地址',
  `signature` varchar(128) DEFAULT '' COMMENT '個性簽名',
  `create_time` datetime DEFAULT '2018-01-01 00:00:01' COMMENT '創(chuàng)建時間',
  `login_time` datetime DEFAULT '2018-01-01 00:00:01' COMMENT '上次登錄時間',
  `modify_time` datetime DEFAULT '2018-01-01 00:00:01' COMMENT '修改時間',
  PRIMARY KEY (`id`,`user_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2肉微、打開Navicat 并創(chuàng)建MySQL連接匾鸥,創(chuàng)建數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)庫ah_test --參看上篇-開發(fā)環(huán)境及工具的準備-Navicat 連接Mysql部分;

3、創(chuàng)建用戶表方式一:點擊Navicat 導(dǎo)航欄 查詢 并選擇 新建查詢 將上邊創(chuàng)建代碼復(fù)制 運行即可

復(fù)制代碼創(chuàng)建數(shù)據(jù)庫
創(chuàng)建用戶表成功

方式二:當然也可以通過選中ah_test數(shù)據(jù)庫 表 右鍵 選擇新建表 選項進行手動創(chuàng)建

選項手動創(chuàng)建

推薦使用方式一進行用戶表的創(chuàng)建.

新建項目

1浪册、打開IDEA 選擇File-->>New -->>Projects,如圖示流程

創(chuàng)建項目-step1
創(chuàng)建項目-step2
創(chuàng)建項目-step3
創(chuàng)建項目-step4

最后選擇項目保存位置 finish 即可創(chuàng)建項目扫腺。

創(chuàng)建項目-目錄結(jié)構(gòu)

創(chuàng)建項目成功后的目錄結(jié)構(gòu)如下:

1岗照、DemoApplication為項目入口
2村象、pom.xml 為三方庫引入配置
3笆环、application.properties為項目配置文件,如端口配置,數(shù)據(jù)庫連接配置等

網(wǎng)上建議新建一個 application.yml 替換 application.properties 作為項目配置。筆者此處也采用網(wǎng)上方式厚者。

項目編寫

1躁劣、配置端口及數(shù)據(jù)庫連接信息

server:
  port: 8080

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/ah_test?useUnicode=true&amp&characterEncoding=utf-8 #注意設(shè)置編碼格式
    username: root
    password:

其中 localhost:3306 為主機地址:端口也是通過Navicat 連接數(shù)據(jù)庫填寫的配置。后期如部署到服務(wù)器做相應(yīng)配置變換即可
ah_test 為前面創(chuàng)建數(shù)據(jù)庫名稱 usernamepassword 為數(shù)據(jù)庫登錄用戶名及密碼库菲。

2账忘、第一次運行項目

配置完成后運行項目,大概你會看到如下錯誤:

運行項目-step1

該問題為MySQL 時區(qū)設(shè)置引起

解決方案為:在配置數(shù)據(jù)庫url后加上如下設(shè)置&amp&serverTimezone=UTC

完整配置:

server:
  port: 8080

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/ah_test?useUnicode=true&amp&characterEncoding=utf-8&amp&serverTimezone=UTC #注意設(shè)置編碼格式及時區(qū)
    username: root
    password:

3熙宇、新建分包并創(chuàng)建相關(guān)類

如圖所示:

新建分包及創(chuàng)建相關(guān)類

1鳖擒、controller 為最終提供給前端使用的接口對應(yīng)的方法
2、entity 為使用實體類(bean類)
3烫止、mapper 為 查詢數(shù)據(jù)庫配置的映射關(guān)系類(后面講)
4蒋荚、service 為controller 與mapper橋梁

4、創(chuàng)建mapper.xml

resources 目錄下創(chuàng)建 mybatis 文件夾再在 mybatis 下創(chuàng)建 UserMapper.xml ,并指向 java 包下 UserMapper.java 類如圖:

創(chuàng)建mapper.xml

該xml內(nèi)寫sql語句,java目錄下controller-->>service-->>mapper 最終執(zhí)行該xml 內(nèi)sql代碼

5馆蠕、配置mybatis

5.1 首先在項目配置文件application.yml,添加如下配置

# 該配置節(jié)點為獨立的節(jié)點
mybatis:
  mapper-locations: classpath:mybatis/*.xml  # 注意:一定要對應(yīng)mapper映射xml文件的所在路徑
  type-aliases-package: com.aries.api.demo.entity  # 注意:對應(yīng)實體類的路徑
  configuration:
    map-underscore-to-camel-case: true # 數(shù)據(jù)庫字段下劃線自動轉(zhuǎn)駝峰

其中 mapper-locations 指定xml路徑

5.2期升、其次在入口Application類添加java目錄下mapper路徑,通過@MapperScan,如圖所示:

程序入口添加mapper路徑

如不在此處添加@MapperScan ,也可在每個mapper類添加@Mapper注解

Mapper類添加注解

示例demo采用入口類添加模式互躬。

5.3播赁、最后controller 配置注解@RestController 標明該類為接口類,也可添加@RequestMapping 給同一controller 下接口方法添加相同的開頭用于模塊區(qū)分,如圖所示

controller 配置

6吼渡、主要代碼編寫

以根據(jù)賬號/手機號/微信號/id 等信息搜索用戶信息為例容为,其它可查看完整項目api-demo

java 目錄下UserMapper代碼

    /**
     * 通過賬號/手機號 查詢用戶
     *
     * @param account
     * @return
     */
    UserEntity findUserById(String account);

UserService代碼

  @Autowired
  private UserMapper mMapper;

  public UserEntity findUserById(String account) {
        return mMapper.findUserById(account);
    }

UserController代碼

    @Autowired
    private UserService mUserService;
    @RequestMapping(value = "/getUserInfo", method = RequestMethod.GET)
    public BaseEntity getUserInfo(@RequestParam(value = "id") @ApiParam("用戶id-登錄注冊返回用戶實體中id字段") String id) {
        UserEntity userEntity = mUserService.findUserById(id);
        if (StringUtils.isEmpty(id)) {
            return new BaseEntity()
                    .setMsg("請輸入用戶id")
                    .setCode(201);
        }
        if (userEntity != null) {
            return BaseEntity.
                    success("獲取用戶信息成功")
                    .setData(userEntity);
        }
        return new BaseEntity()
                .setMsg("暫無該賬號信息")
                .setCode(201);
    }

1、RequestMapping value 指明 接口方法名 如Controller 設(shè)置RequestMapping 最終接口地址即為:http:localhost:8080/user/getUserInfo
method 指明接口訪問模式為get 其它的有RequestMethod.POST等诞吱。
2舟奠、RequestParam 指明單個參數(shù),也可@RequestBody 傳遞json串房维,具體根據(jù)個人喜好和參數(shù)多少及擴展性

xml下mapper 查詢數(shù)據(jù)庫設(shè)置

   <select id="findUserById" resultType="com.aries.api.demo.entity.UserEntity">
        select 
            *
            ,UNIX_TIMESTAMP(create_time) as create_date
        from 
            t_user
        where
            id = #{account} or user_name = #{account} or phone = #{account}or we_chat_open_id = #{account}or qq_open_id = #{account};
    </select>

1沼瘫、因xml里的mapper與java下的mapper存在映射關(guān)系,故xml里的id和java里的方法名必須一一對應(yīng)否則會保錯找不到對應(yīng)方法
2咙俩、resultType為查詢返回結(jié)果對象耿戚,mybatis可直接轉(zhuǎn)為你想要的對象-demo對應(yīng)entity
3、#{XXX} 標明為java mapper方法傳遞的參數(shù)阿趁,必須對應(yīng) =前面 為數(shù)據(jù)庫對應(yīng)字段名
4膜蛔、可在Navicat 執(zhí)行查詢語句后再進行動態(tài)參數(shù)調(diào)整

7、運行程序脖阵、瀏覽器測試

查詢失敗
查詢成功

8皂股、集成Swagger

1、導(dǎo)入插件--pom.xml 版本自選

      <!--Swagger UI-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.8.0</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-bean-validators</artifactId>
            <version>2.8.0</version>
        </dependency>

2命黔、添加Swagger 配置類

在java包創(chuàng)建 SwaggerConfig類并添加 @Configuration @EnableSwagger2 注解

Swagger 配置

說明:主要createRestApi apis 指明controller路徑

3呜呐、controller 配置

在controller 類 添加 @Api(value = "/user", description = "用戶模塊", tags = {"/user"}) 注解 description 描述文件 tags 為描述文字前標簽 value 暫未找到UI提現(xiàn)
接口方法參數(shù) 添加注解 @ApiParam("用戶id-登錄注冊返回用戶實體中id字段") 注釋字段

4就斤、運行項目、展示效果

項目編譯運行后,瀏覽器輸入http://localhost:8080/swagger-ui.html 即可訪問查看效果

Swagger 效果

點擊模塊輸入接口參數(shù)訪問即可調(diào)試接口

Swagger 調(diào)試接口

總結(jié)

至此一個簡單用戶登錄蘑辑、注冊相關(guān)的后臺接口項目編寫完成,當然實際項目業(yè)務(wù)邏輯肯定比這復(fù)雜洋机,但是有了這個demo編寫經(jīng)驗其它的邊做邊學(xué)一定可以學(xué)到更多的。

關(guān)于我

簡書: AriesHoo
GitHub: AriesHoo
Email: AriesHoo@126.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末洋魂,一起剝皮案震驚了整個濱河市绷旗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌副砍,老刑警劉巖衔肢,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異豁翎,居然都是意外死亡膀懈,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門谨垃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來启搂,“玉大人,你說我怎么就攤上這事刘陶「於模” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵匙隔,是天一觀的道長疑苫。 經(jīng)常有香客問我,道長纷责,這世上最難降的妖魔是什么捍掺? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮再膳,結(jié)果婚禮上挺勿,老公的妹妹穿的比我還像新娘。我一直安慰自己喂柒,他們只是感情好不瓶,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著灾杰,像睡著了一般蚊丐。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上艳吠,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天麦备,我揣著相機與錄音,去河邊找鬼。 笑死凛篙,一個胖子當著我的面吹牛街州,可吹牛的內(nèi)容都是我干的漆诽。 我是一名探鬼主播定鸟,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼咙冗,長吁一口氣:“原來是場噩夢啊……” “哼栗涂!你這毒婦竟也來了蚕礼?” 一聲冷哼從身側(cè)響起乌妙,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤忧风,失蹤者是張志新(化名)和其女友劉穎秀仲,沒想到半個月后融痛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡神僵,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年雁刷,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片保礼。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡沛励,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出炮障,到底是詐尸還是另有隱情目派,我是刑警寧澤,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布胁赢,位于F島的核電站企蹭,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏智末。R本人自食惡果不足惜谅摄,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望系馆。 院中可真熱鬧送漠,春花似錦、人聲如沸由蘑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纵穿。三九已至下隧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谓媒,已是汗流浹背淆院。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人土辩。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓支救,卻偏偏與公主長得像,于是被迫代替她去往敵國和親拷淘。 傳聞我的和親對象是個殘疾皇子各墨,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344