Android基于springboot快速搭建自己的服务器接口

springboot快速开发后台与接口(文末附代码)

数据库表设计与创建

工具下载

创建数据库

/*
Navicat MySQL Data Transfer

Source Server         : wxdemo
Source Server Version : 50725
Source Host           : localhost:3306
Source Database       : supermansirts

Target Server Type    : MYSQL
Target Server Version : 50725
File Encoding         : 65001

Date: 2019-03-30 21:10:37
*/

SET FOREIGN_KEY_CHECKS=0;

-- ---------男士衬衫三张表实际使用需要改-------------------
-- Table structure for tb_minfo
-- ----------------------------
DROP TABLE IF EXISTS `tb_minfo`;
CREATE TABLE `tb_minfo` (
  `m_id` int(10) NOT NULL AUTO_INCREMENT,
  `shirt_id` int(10) NOT NULL,
  `record_id` int(10) NOT NULL,
  `user_name` varchar(200) NOT NULL,
  `user_pass` int(30) NOT NULL DEFAULT '0',
  `user_himg` varchar(200) DEFAULT NULL,
  `nick_name` varchar(50) DEFAULT NULL,
  `m_shape` varchar(50) DEFAULT '标准体',
  `m_abdomen` varchar(50) DEFAULT '扁腹',
  `m_shoulder` varchar(50) DEFAULT '耸肩',
  PRIMARY KEY (`m_id`),
  UNIQUE KEY `UK_N` (`user_name`),
  KEY `record_id` (`record_id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of tb_minfo
-- ----------------------------
INSERT INTO `tb_minfo` VALUES ('3', '0', '0', '18822179535', '123456', 'https://ss0.bdstatic.com/-0U0b8Sm1A5BphGlnYG/kmarketingadslogo/49b8e752ae9dbb3a5ed375f1185d7683_250_250.jpg', 'superman1553929794077', '标准体', '扁腹', '耸肩');
INSERT INTO `tb_minfo` VALUES ('4', '0', '0', '15534510036', '123456', 'https://ss0.bdstatic.com/-0U0b8Sm1A5BphGlnYG/kmarketingadslogo/49b8e752ae9dbb3a5ed375f1185d7683_250_250.jpg', 'superman1553930598372', '标准体', '扁腹', '耸肩');

-- ----------------------------
-- Table structure for tb_order
-- ----------------------------
DROP TABLE IF EXISTS `tb_order`;
CREATE TABLE `tb_order` (
  `record_id` int(10) NOT NULL AUTO_INCREMENT,
  `record_time` datetime DEFAULT NULL,
  `record_num` varchar(200) DEFAULT NULL,
  `record_img` varchar(30) DEFAULT NULL,
  `record_season` varchar(50) DEFAULT '夏季',
  `record_scene` varchar(50) DEFAULT '日常',
  PRIMARY KEY (`record_id`), 
  -- 添加外键约束 --
  CONSTRAINT `frc_key` FOREIGN KEY (`record_id`) REFERENCES `tb_minfo` (`record_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of tb_order
-- ----------------------------

-- ----------------------------
-- Table structure for tb_shirt
-- ----------------------------
DROP TABLE IF EXISTS `tb_shirt`;
CREATE TABLE `tb_shirt` (
  `shirt_id` int(10) NOT NULL AUTO_INCREMENT,
  `edition_type` varchar(50) DEFAULT '潮流',
  `shirt_size` varchar(200) DEFAULT '40,175,L',
  `shirt_material` varchar(30) DEFAULT '棉',
  `shirt_color` varchar(200) DEFAULT '黑色',
  `shirt_season` varchar(50) DEFAULT '夏季',
  `shirt_scene` varchar(50) DEFAULT '日常',
  `shirt_img_id` int(10) NOT NULL,
  PRIMARY KEY (`shirt_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of tb_shirt
-- ----------------------------
SET FOREIGN_KEY_CHECKS=1;

开发工具与helloword

下载idea

HelloWrod

  • 创建项目

    • 新建项目


      idea1.png
    • 选包名


      idea2.png
    • 选择需要的库与版本(springboot有多个版本每个配置不同,这里选择2.1.3)


      idea3.png
      idea4.png
    • 创建项目


      idea5.png
  • 手动导入模块化(lombok)、热部署包(devtools)

    •        <dependency>
            <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-devtools</artifactId>
              <optional>true</optional>
            </dependency> 
              <dependency>
              <groupId>org.projectlombok</groupId>
              <artifactId>lombok</artifactId>
              <optional>true</optional>
          </dependency>```
      
      
      
        
      
    • 模块化让mapping映射文件也可以通过注解方式实现

    • 热部署修改静态网页应用不会重启

  • 找到应用的入口类(初建项目只有一个类里边有main方法)

    • /*此类使springboot项目可以直接访问controller,即你设置的请求地址*/
      @SpringBootApplication
      public class SpringbootApplication {
          public static void main(String[] args) {
              System.out.println("sklahjks");
              SpringApplication.run(SpringbootApplication.class, args);
          }
      }
      
      
    • 在配置文件中设置项目访问端口

      • 在resources下的application.properties中添加:server.port=8090
    • 创建第一个controller类并通过浏览器访问

      • /*新建controller包,在包下新建UserController*/
        @RestController
        public class UserController {
            //设置访问路径
            @RequestMapping(value = "/test",method = RequestMethod.GET)
            public String test(){
                return "hello springboot";
            }
        }
        
        
      • 这时启动项目在浏览器输入:http://localhost:8070/test我们就可以看到浏览器有"hello springboot"输出

        • spring.png
        • spring1.png

快速开发接口

与数据库的交互

  • 配置数据库的连接

    #设置默认端口
    server.port=8070
    #设置项目访问路径如http://192.168.56.1:8070/shitsman/test
    server.servlet.context-path=/shitsman
    #mybatis扫描默认的实体类方便数据库映射
    mybatis.type-aliases-package=com.supermanshirts.entity
    #旧版本数据库驱动
    #spring.datasource.driverClassName = com.mysql.jdbc.Driver
    #新版本数据库驱动,好像新版本驱动会默认加载
    spring.datasource.driverClassName = com.mysql.cj.jdbc.Driver
    #数据库地址,supermansirts是你创建的数据库名称
    spring.datasource.url = jdbc:mysql://localhost:3306/supermansirts?useUnicode=true&characterEncoding=utf-8&useSSL=false&&serverTimezone=UTC
    #数据库用户名密码
    spring.datasource.username = root
    spring.datasource.password =123456
    
    
  • 创建客户端请求的响应实体类

    import lombok.Data;
    import java.io.Serializable;
    /*实体类需要通过Data来注解*/
    @Data
    public class UserEntity implements Serializable {
        /*用户id*/
       private int m_id;
       /*衬衫id*/
       private int shirt_id;
       /*定制订单id*/
       private int record_id;
       /*用户名*/
       private String user_name;
       /*用户密码*/
       private String user_pass;
       /*用户头像*/
       private String user_himg;
       /*用户昵称*/
       private String nick_name;
       /*用户体型*/
       private String m_shape;
       /*用户腹部描述*/
       private String m_abdomen;
       /*用户肩部描述*/
       private String m_shoulder;
    
        public int getM_id() {
            return m_id;
        }
    
        public int getShirt_id() {
            return shirt_id;
        }
    
        public int getRecord_id() {
            return record_id;
        }
    
        public String getUser_name() {
            return user_name;
        }
    
        public String getUser_pass() {
            return user_pass;
        }
    
        public String getUser_himg() {
            return user_himg;
        }
    
        public String getNick_name() {
            return nick_name;
        }
    
        public String getM_shape() {
            return m_shape;
        }
    
        public String getM_abdomen() {
            return m_abdomen;
        }
    
        public String getM_shoulder() {
            return m_shoulder;
        }
    
        public void setM_id(int m_id) {
            this.m_id = m_id;
        }
    
        public void setShirt_id(int shirt_id) {
            this.shirt_id = shirt_id;
        }
    
        public void setRecord_id(int record_id) {
            this.record_id = record_id;
        }
    
        public void setUser_name(String user_name) {
            this.user_name = user_name;
        }
    
        public void setUser_pass(String user_pass) {
            this.user_pass = user_pass;
        }
    
        public void setUser_himg(String user_himg) {
            this.user_himg = user_himg;
        }
    
        public void setNick_name(String nick_name) {
            this.nick_name = nick_name;
        }
    
        public void setM_shape(String m_shape) {
            this.m_shape = m_shape;
        }
    
        public void setM_abdomen(String m_abdomen) {
            this.m_abdomen = m_abdomen;
        }
    
        public void setM_shoulder(String m_shoulder) {
            this.m_shoulder = m_shoulder;
        }
    
        public UserEntity() {
        }
    
        public UserEntity(int shirt_id, int record_id, String user_name, String user_pass, String user_himg, String nick_name, String m_shape, String m_abdomen, String m_shoulder) {
            this.shirt_id = shirt_id;
            this.record_id = record_id;
            this.user_name = user_name;
            this.user_pass = user_pass;
            this.user_himg = user_himg;
            this.nick_name = nick_name;
            this.m_shape = m_shape;
            this.m_abdomen = m_abdomen;
            this.m_shoulder = m_shoulder;
        }
    }
    
    
  • 通过mapper往数据库插入数据和查询数据(这里需要服务层和控制层调用)

    /*在这里通过mapper映射插入,直接这么做就好,想理解原理请学习spring和springmvc与mybatis整合相关知识*/
    /*新建mapper包,创建UserMapper类,需要Mapper来注解*/
    @Mapper
    public interface UserMapper { 
        //查询数据库数据
       @Select("SELECT * FROM tb_minfo WHERE user_name = #{username}")
        UserEntity getUserByName(String username);
        //插入数据库数据,前面括号对应数据库字段,后面括号对应实体类这里两边字段相同
        @Insert("INSERT INTO tb_minfo(shirt_id,record_id,user_name,user_pass,user_himg,nick_name,m_shape,m_abdomen,m_shoulder" +
                ") VALUES(#{shirt_id},#{record_id},#{user_name}, #{user_pass},#{user_himg},#{nick_name},#{m_shape},#{m_abdomen},#{m_shoulder})")
        @Options(useGeneratedKeys = true,keyColumn = "id")
        void insert(UserEntity user);
    }
    
    
  • service层操作

    //创建service包,需要service注解类
    @Service
    public class UserService {
        //Autowired注解让mapper关联到此,使其生效
        @Autowired
        private UserMapper userMapper;
        //调用mapper实现插入数据,需要控制层调用起作用
        public void insertUser(UserEntity user) {
            userMapper.insert(user);
        }
        //调用mapper查询数据
        public UserEntity getUser(String username,String userpass){
            return userMapper.getUserByName(username);
        }
      }
    
    
  • 服务器响应结果实体类

    import java.io.Serializable;
    //响应实体类,包含响应状态、信息、数据
    public class ResponseEntity<T> implements Serializable {
        private int status;
        private String msg;
        private T data;
    
        public int getStatus() {
            return status;
        }
    
        public void setStatus(int status) {
            this.status = status;
        }
    
        public String getMsg() {
            return msg;
        }
    
        public void setMsg(String msg) {
            this.msg = msg;
        }
    
        public T getData() {
            return data;
        }
    
        public void setData(T data) {
            this.data = data;
        }
        public ResponseEntity(){}
        /*响应数据*/
        public ResponseEntity(int status, String msg, T data) {
            this.status = status;
            this.msg = msg;
            this.data = data;
        }
    }
    
    
  • 在controller控制器中添加数据库操作的接口

    //此版本springboot中返回的实体类会自动转化为json
    import com.supermanshirts.entity.ResponseEntity;
    import com.supermanshirts.entity.UserEntity;
    import com.supermanshirts.service.UserService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RestController;
    @RestController
    public class UserController {
        @Autowired
        private UserService userService;
        /*通过用户名查询数据库对应记录,模拟登录操作*/
        @RequestMapping(value = "/login",method = RequestMethod.POST)
        public ResponseEntity get(String username,String userpass){
            ResponseEntity responseEntity=new ResponseEntity();
            UserEntity userEntity=userService.getUser(username,userpass);
            if(userEntity.getUser_pass().equals(userpass)){
                responseEntity.setStatus(200);
                responseEntity.setMsg("登录成功");
                responseEntity.setData(userEntity);
            }else {
                responseEntity.setStatus(300);
                responseEntity.setMsg("登录失败");
            }
            return responseEntity;
        }
        /*往数据库插入数据,注册用户*/
        @RequestMapping(value = "/register",method = RequestMethod.POST)
        public ResponseEntity register(String username,String userpass){
            ResponseEntity responseEntity=new ResponseEntity(200,"注册失败","");
           try{
               String nickName="superman"+System.currentTimeMillis();
               UserEntity userEntity=new UserEntity(0,0,username,userpass,"https://ss0.bdstatic.com/-0U0b8Sm1A5BphGlnYG/kmarketingadslogo/49b8e752ae9dbb3a5ed375f1185d7683_250_250.jpg",nickName,"标准体","扁腹","耸肩");
               userService.insertUser(userEntity);
               responseEntity.setStatus(200);
               responseEntity.setMsg("注册成功");
               return responseEntity;
           }catch (Exception e){
               return responseEntity;
           }
    
        }
        /*测试接口*/
        @RequestMapping(value = "/test",method = RequestMethod.GET)
        public String test(){
            System.out.println("");
            return "测试";
        }
    }
    
    
  • 下载postman测试接口

    • 测试完此接口去数据库查看已经插入数据了
      postman.png
    • postman1.png
  • github下载代码

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342