网站首页 > 技术文章 正文
目标
首先确定接口开发目标,在此以大多项目都会使用到的用户登录、注册功能为例,做一个支持账号注册+绑定三方(qq、微信)登录+绑定手机号并支持swagger 预览调试的接口项目,文章只讲述其中一个接口实现流程其它接口查看完整项目api-demo。
创建数据库及表
1、用户表一般有字段 id、账号、密码、手机号、微信id、qqid等。创建用户表代码如下:
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 '微信授权id', `qq_open_id` varchar(64) DEFAULT '' COMMENT 'qq授权id', `head_url` varchar(256) DEFAULT '' COMMENT '头像地址', `signature` varchar(128) DEFAULT '' COMMENT '个性签名', `create_time` datetime DEFAULT '2018-01-01 00:00:01' COMMENT '创建时间', `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 并创建MySQL连接,创建数据库创建数据库ah_test --参看上篇-开发环境及工具的准备-Navicat 连接Mysql部分;
3、创建用户表方式一:点击Navicat 导航栏 查询 并选择 新建查询 将上边创建代码复制 运行即可
复制代码创建数据库
创建用户表成功
方式二:当然也可以通过选中ah_test数据库 表 右键 选择新建表 选项进行手动创建
推荐使用方式一进行用户表的创建.
新建项目
1、打开IDEA 选择File-->>New -->>Projects,如图示流程
最后选择项目保存位置 finish 即可创建项目。
创建项目成功后的目录结构如下:
1、DemoApplication为项目入口
2、pom.xml 为三方库引入配置
3、application.properties为项目配置文件,如端口配置,数据库连接配置等
网上建议新建一个 application.yml 替换 application.properties 作为项目配置。笔者此处也采用网上方式。
项目编写
1、配置端口及数据库连接信息
server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/ah_test?useUnicode=true&&characterEncoding=utf-8 #注意设置编码格式 username: root password:
其中 localhost:3306 为主机地址:端口也是通过Navicat 连接数据库填写的配置。后期如部署到服务器做相应配置变换即可
ah_test 为前面创建数据库名称 username 及 password 为数据库登录用户名及密码。
2、第一次运行项目
配置完成后运行项目,大概你会看到如下错误:
运行项目-step1
该问题为MySQL 时区设置引起
解决方案为:在配置数据库url后加上如下设置&&serverTimezone=UTC
完整配置:
server: port: 8080 spring: datasource: url: jdbc:mysql://localhost:3306/ah_test?useUnicode=true&&characterEncoding=utf-8&&serverTimezone=UTC #注意设置编码格式及时区 username: root password:
3、新建分包并创建相关类
如图所示:
1、controller 为最终提供给前端使用的接口对应的方法
2、entity 为使用实体类(bean类)
3、mapper 为 查询数据库配置的映射关系类(后面讲)
4、service 为controller 与mapper桥梁
4、创建mapper.xml
在 resources 目录下创建 mybatis 文件夹再在 mybatis 下创建 UserMapper.xml ,并指向 java 包下 UserMapper.java 类如图:
该xml内写sql语句,java目录下controller-->>service-->>mapper 最终执行该xml 内sql代码
5、配置mybatis
5.1 首先在项目配置文件application.yml,添加如下配置
# 该配置节点为独立的节点 mybatis: mapper-locations: classpath:mybatis/*.xml # 注意:一定要对应mapper映射xml文件的所在路径 type-aliases-package: com.aries.api.demo.entity # 注意:对应实体类的路径 configuration: map-underscore-to-camel-case: true # 数据库字段下划线自动转驼峰
其中 mapper-locations 指定xml路径
5.2、其次在入口Application类添加java目录下mapper路径,通过@MapperScan,如图所示:
如不在此处添加@MapperScan ,也可在每个mapper类添加@Mapper注解
示例demo采用入口类添加模式。
5.3、最后controller 配置注解@RestController 标明该类为接口类,也可添加@RequestMapping 给同一controller 下接口方法添加相同的开头用于模块区分,如图所示
6、主要代码编写
以根据账号/手机号/微信号/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 设置RequestMapping 最终接口地址即为:http:localhost:8080/user/getUserInfo
method 指明接口访问模式为get 其它的有RequestMethod.POST等。
2、RequestParam 指明单个参数,也可@RequestBody 传递json串,具体根据个人喜好和参数多少及扩展性
xml下mapper 查询数据库设置
<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存在映射关系,故xml里的id和java里的方法名必须一一对应否则会保错找不到对应方法
2、resultType为查询返回结果对象,mybatis可直接转为你想要的对象-demo对应entity
3、#{XXX} 标明为java mapper方法传递的参数,必须对应 =前面 为数据库对应字段名
4、可在Navicat 执行查询语句后再进行动态参数调整
7、运行程序、浏览器测试
8、集成Swagger
1、导入插件--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包创建 SwaggerConfig类并添加 @Configuration @EnableSwagger2 注解
说明:主要createRestApi apis 指明controller路径
3、controller 配置
在controller 类 添加 @Api(value = "/user", description = "用户模块", tags = {"/user"}) 注解 description 描述文件 tags 为描述文字前标签 value 暂未找到UI提现
接口方法参数 添加注解 @ApiParam("用户id-登录注册返回用户实体中id字段") 注释字段
4、运行项目、展示效果
项目编译运行后,浏览器输入http://localhost:8080/swagger-ui.html 即可访问查看效果
点击模块输入接口参数访问即可调试接口
总结
至此一个简单用户登录、注册相关的后台接口项目编写完成,当然实际项目业务逻辑肯定比这复杂,但是有了这个demo编写经验其它的边做边学一定可以学到更多的。
猜你喜欢
- 2025-07-08 如何优雅地校验后端接口数据,不做前端背锅侠
- 2025-07-08 Protobuf-net:C#高效序列化工具,助力接口传输与前端解析
- 2025-07-08 结合k8s和pipeline流水线,并通过k8s接口镜像升级
- 2025-07-08 前端开发如何用Mock.js进行数据接口模拟
- 2024-10-12 php 给app 或前端封装api 接口——json格式
- 2024-10-12 前端基础:vue中Axios的封装和API接口的管理
- 2024-10-12 Vue项目中实现用户登录及token验证
- 2024-10-12 前端开发:TypeScript 接口与泛型 接口使用泛型
- 2024-10-12 Java实战系列-前端VUE代码开发及接口流程设计(1)
- 2024-10-12 你还不了解typescript中接口和类型别名的用法区别?本文帮你总结
你 发表评论:
欢迎- 07-08记oracle日志挖掘实操&查询归档不正常增长情况(一)
- 07-08Oracle 伪列!这些隐藏用法你都知道吗?
- 07-08orcl数据库查询重复数据及删除重复数据方法
- 07-08重大故障!业务核心表被truncate删除,准备跑路……
- 07-08oracle数据恢复—oracle执行truncate命令误删除数据的数据恢复
- 07-08Oracle-rac 修改scanip(oracle 修改sequence cache)
- 07-08ORACLE RAC CDB和PDB切换(oracle数据库rac切换)
- 07-08Oracle rac haip作用(oracle rac的典型特征)
- 596℃几个Oracle空值处理函数 oracle处理null值的函数
- 590℃Oracle分析函数之Lag和Lead()使用
- 577℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 573℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 569℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 562℃【数据统计分析】详解Oracle分组函数之CUBE
- 549℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 542℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
-
- 记oracle日志挖掘实操&查询归档不正常增长情况(一)
- Oracle 伪列!这些隐藏用法你都知道吗?
- orcl数据库查询重复数据及删除重复数据方法
- 重大故障!业务核心表被truncate删除,准备跑路……
- oracle数据恢复—oracle执行truncate命令误删除数据的数据恢复
- Oracle-rac 修改scanip(oracle 修改sequence cache)
- ORACLE RAC CDB和PDB切换(oracle数据库rac切换)
- Oracle rac haip作用(oracle rac的典型特征)
- 新手小白怎么学UI设计 推荐学习路线是什么
- 超实用!0基础UI设计自学指南(0基础学ui设计好就业吗)
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端懒加载 (49)
- 前端获取当前时间 (50)
- 前端接口 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)