摘抄Spring Bootjava成长之路

springboot学习之RESTful(附demo)

2017-09-03  本文已影响111人  vzardlloo

在学习HelloWorld之后,我们来尝试构建一个RESTful工程。

  1. 资源(Resource)
  2. 资源的表述(Representation)
  3. 状态转移(State Transfer)
  4. 统一接口(Uniform Interface)
  5. 超文本驱动(Hypertext Driven)
  1. 面向资源(Resource Oriented)
  2. 可寻址(Addressability)
  3. 连通性(Connectedness)
  4. 无状态(Statelessness)
  5. 统一接口(Uniform Interface)
  6. 超文本驱动(Hypertext Driven)

更多可以参考:理解本真的REST架构风格

DROP TABLE IF EXISTS city;

CREATE TABLE city (
id int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '城市编号',
province_id int(10) unsigned NOT NULL COMMENT '省份编号',
city_name varchar(25) DEFAULT NULL COMMENT '城市名称',
description varchar(25) DEFAULT NULL COMMENT '描述',
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;


+ 创建工程目录如下
![创建工程目录](http:https://img.haomeiwen.com/i3189042/5351ab0a233aa154.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

Controller包里存放控制器:
```java
package org.vzard.springboot.controller;

import jdk.nashorn.internal.ir.RuntimeNode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.vzard.springboot.domain.City;
import org.vzard.springboot.service.CityService;

import java.util.List;

/**
* Created by V-zar on 2017/7/2.
*/


@RestController
public class CityRestController {

  @Autowired
  private CityService cityService;

  

  @RequestMapping(value = "/vzard/city/{id}",method = RequestMethod.GET)
  public City findOneCity(@PathVariable Long id){
      return cityService.findCityById(id);
  }

  @RequestMapping(value = "/vzard/city",method = RequestMethod.GET)
  public List<City> findAllCity(){
      return cityService.findAllCity();
  }

  @RequestMapping(value = "/vzard/city",method = RequestMethod.POST)
  public void createCity(@RequestBody City city){
      cityService.saveCity(city);
  }

  @RequestMapping(value = "/vzard/city",method = RequestMethod.PUT)
  public void modifyCity(@RequestBody City city){
      cityService.updateCity(city);
  }

  @RequestMapping(value = "/vzard/city/{id}",method = RequestMethod.DELETE)
  public void modifyCity(@PathVariable("id") Long id){
      cityService.deleteCity(id);
  }


}

dao包存放接口类:

package org.vzard.springboot.dao;

import org.apache.ibatis.annotations.Param;
import org.vzard.springboot.domain.City;

import java.util.List;

/**
 * 城市DAO接口类
 *
 * Created by V-zar on 2017/7/2.
 */
public interface CityDao {

    /**
     * 获取城市信息列表
     * @return
     */
    List<City> findAllCity();

    /**
     * 根据id获取城市信息
     * @param id
     * @return
     */
    City findById(@Param("id") Long id);

    /**
     * 保存城市信息
     * @param city
     * @return
     */
    Long saveCity(City city);

    /**
     * 更新城市信息
     * @param city
     * @return
     */
    Long updateCity(City city);

    /**
     * 删除城市信息
     * @param id
     * @return
     */
    Long deleteCity(Long id);



}

domain包存放实体类

package org.vzard.springboot.domain;

/**
 * 城市实体类
 *
 * Created by V-zar on 2017/7/2.
 */
public class City {

    /**
     * 城市id
     */
    private Long id;
    /**
     * 省份id
     */
    private Long provinceId;
    /**
     * 城市名称
     */
    private String cityName;
    /**
     * 描述
     */
    private String description;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Long getProvinceId() {
        return provinceId;
    }

    public void setProvinceId(Long provinceId) {
        this.provinceId = provinceId;
    }

    public String getCityName() {
        return cityName;
    }

    public void setCityName(String cityName) {
        this.cityName = cityName;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

service包里存放服务接口及其实现

package org.vzard.springboot.service;

import org.vzard.springboot.domain.City;

import java.util.List;

/**
 * 城市业务逻辑接口
 *
 * Created by V-zar on 2017/7/2.
 */
public interface CityService {

    /**
     * 获取城市列表
     * @return
     */
    List<City> findAllCity();

    /**
     * 根据城市id寻找城市
     * @param id
     * @return
     */
    City findCityById(Long id);

    /**
     * 保存城市信息
     * @param city
     * @return
     */
    Long saveCity(City city);

    /**
     * 更新城市信息
     * @param city
     * @return
     */
    Long updateCity(City city);

    /**
     * 删除城市信息
     * @param id
     * @return
     */
    Long deleteCity(Long id);

}


package org.vzard.springboot.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.vzard.springboot.dao.CityDao;
import org.vzard.springboot.domain.City;
import org.vzard.springboot.service.CityService;

import java.util.List;

/**
 * Created by V-zar on 2017/7/2.
 */
@Service
public class CityServiceImpl implements CityService{

    @Autowired
    private CityDao cityDao;

    @Override
    public List<City> findAllCity() {
        return cityDao.findAllCity();
    }

    @Override
    public City findCityById(Long id) {
        return cityDao.findById(id);
    }

    @Override
    public Long saveCity(City city) {
        return cityDao.saveCity(city);
    }

    @Override
    public Long updateCity(City city) {
        return cityDao.updateCity(city);
    }

    @Override
    public Long deleteCity(Long id) {
        return cityDao.deleteCity(id);
    }
}

程序入口类

package org.vzard.springboot;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("org.vzard.springboot.dao")
public class SpringbootApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootApplication.class, args);
    }
}

数据源&MyBaties&端口配置

#数据源配置
spring.datasource.url=jdbc:mysql://localhost:3306/springbootdb?useUnicode=true&characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=5432
spring.datasource.dbcp2.driver-class-name=com.mysql.jdbc.Driver

#Mybatis 配置
mybatis.typeAliasesPackage=org.vzard.springboot.domain
mybatis.mapperLocations=classpath:mapper/*.xml

#配置端口
server.port=${port:8009}

Mybaties映射文件

<?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="org.vzard.springboot.dao.CityDao">
    <resultMap id="BaseResultMap" type="org.vzard.springboot.domain.City">
        <result column="id" property="id" />
        <result column="province_id" property="provinceId" />
        <result column="city_name" property="cityName" />
        <result column="description" property="description" />
    </resultMap>

    <parameterMap id="City" type="org.vzard.springboot.domain.City"/>

    <sql id="Base_Column_List">
        id, province_id, city_name, description
    </sql>

    <select id="findById" resultMap="BaseResultMap" parameterType="java.lang.Long">
        select
        <include refid="Base_Column_List" />
        from city
        where id = #{id}
    </select>

    <select id="findAllCity" resultMap="BaseResultMap" >
        select
        <include refid="Base_Column_List" />
        from city
    </select>

    <insert id="saveCity" parameterMap="City" useGeneratedKeys="true" keyProperty="id">
        insert into
        city(id,province_id,city_name,description)
        values
        (#{id},#{provinceId},#{cityName},#{description})
    </insert>

    <update id="updateCity" parameterMap="City">
        update
        city
        set
        <if test="provinceId!=null">
            province_id = #{provinceId},
        </if>
        <if test="cityName!=null">
            city_name = #{cityName},
        </if>
        <if test="description!=null">
            description = #{description}
        </if>
        where
        id = #{id}
    </update>

    <delete id="deleteCity" parameterType="java.lang.Long">
        delete from
        city
        where
        id = #{id}
    </delete>
</mapper>

到此工程创建完毕运行程序入口类启动项目:

表单提交的测试工具为Chrome的插件PostMan,很强大
demo

上一篇 下一篇

猜你喜欢

热点阅读