- 本文為 AriesHoo 原創(chuàng),轉(zhuǎn)載必須保留出處魔慷!
- 【 GitHub-AriesHoo】
- 【 簡書-AriesHoo】
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ù)制 運行即可
方式二:當然也可以通過選中ah_test數(shù)據(jù)庫 表 右鍵 選擇新建表 選項進行手動創(chuàng)建
推薦使用方式一進行用戶表的創(chuàng)建.
新建項目
1浪册、打開IDEA 選擇File-->>New -->>Projects,如圖示流程
最后選擇項目保存位置 finish 即可創(chuàng)建項目扫腺。
創(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&&characterEncoding=utf-8 #注意設(shè)置編碼格式
username: root
password:
其中 localhost:3306 為主機地址:端口也是通過Navicat 連接數(shù)據(jù)庫填寫的配置。后期如部署到服務(wù)器做相應(yīng)配置變換即可
ah_test 為前面創(chuàng)建數(shù)據(jù)庫名稱 username 及 password 為數(shù)據(jù)庫登錄用戶名及密碼库菲。
2账忘、第一次運行項目
配置完成后運行項目,大概你會看到如下錯誤:
該問題為MySQL 時區(qū)設(shè)置引起
解決方案為:在配置數(shù)據(jù)庫url后加上如下設(shè)置&&serverTimezone=UTC
完整配置:
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/ah_test?useUnicode=true&&characterEncoding=utf-8&&serverTimezone=UTC #注意設(shè)置編碼格式及時區(qū)
username: root
password:
3熙宇、新建分包并創(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 類如圖:
該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,如圖所示:
如不在此處添加@MapperScan ,也可在每個mapper類添加@Mapper注解
示例demo采用入口類添加模式互躬。
5.3播赁、最后controller 配置注解@RestController 標明該類為接口類,也可添加@RequestMapping 給同一controller 下接口方法添加相同的開頭用于模塊區(qū)分,如圖所示
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 注解
說明:主要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 即可訪問查看效果
點擊模塊輸入接口參數(shù)訪問即可調(diào)試接口
總結(jié)
至此一個簡單用戶登錄蘑辑、注冊相關(guān)的后臺接口項目編寫完成,當然實際項目業(yè)務(wù)邏輯肯定比這復(fù)雜洋机,但是有了這個demo編寫經(jīng)驗其它的邊做邊學(xué)一定可以學(xué)到更多的。
關(guān)于我
簡書: AriesHoo
GitHub: AriesHoo
Email: AriesHoo@126.com