SpringBoot教程(1):快速入门CRUD

前言:

在SpringMVC体系中虽然简化了配置,减少了类的数量,一个控制器中多个方法可以分别对应不同的业务。但是从根本上来看,需要的配置还是太多,搭建工程还是会有很多重复性步骤,开发速度还是不够快。还应当进一步简化,这时SpringBoot应运而生。

SpringBoot 开启了各种自动装配,就是为了简化开发,不需要写各种配置文件,只需要引入相关的依赖就能迅速搭建起一个web工程。

特点

1.不需要任何的web.xml配置。

2.不需要任何的springmvc配置。

3.不需要配置tomcat,SpringBoot内嵌tomcat。

4.不需要配置jackson,良好的restful风格支持,自动通过jackson返回json数据。

5.个性化配置时,最少一个配置文件可以配置所有的个性化信息。

我们这里不再赘述理论知识,直接上代码,更多的理论知识,小伙伴们可以自行搜索。

需求简介

1.实现Student的增删该查。

2.编码采用restful风格。

3.数据库使用Map集合代替。

4.开发工具使用IntelliJ IDEA。

开发环境

JDK 1.8 Maven 3.5.0 IDEA 2016.3.4

代码:

1.创建Maven工程,注意选择quickstart项目,不是webapp项目。

2.引入SpringBoot依赖jar文件,pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.southwind</groupId>
  <artifactId>springboot</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>springboot</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <!-- 继承父包 -->
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.8.RELEASE</version>
  </parent>

  <dependencies>
    <!-- SpringBoot web启动jar包 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
  </dependencies>
</project>

3.创建实体类Student。

package com.southwind.entity;

import java.io.Serializable;

public class Student implements Serializable{
    private int id;
    private String name;
    private int age;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
    }
    public Student(int id, String name, int age) {
        super();
        this.id = id;
        this.name = name;
        this.age = age;
    }
    public Student() {

    }
}

4.创建StudentDAO接口以及实现类StudentDAOImpl。

package com.southwind.dao;

import com.southwind.entity.Student;

import java.util.Collection;

public interface StudentDAO {

    /**
     * 获取所有学生对象
     * @return Collection<Student>
     */
    public Collection<Student> getAll();

    /**
     * @param id
     * 传入要获取的学生id
     *
     * @return Student
     * 返回对应的学生对象
     **/
    public Student getById(int id);

    /**
     * @param id
     * 传入要删除的学生id
     *
     * @return Collection<Student>
     * 删除成功后返回所有学生对象
     * */
    public Collection<Student> deleteById(int id);

    /**
     *
     * @param student
     * 传入要添加的学生对象
     *
     * @return
     * 添加成功后返回所有学生对象
     */
    public Collection<Student> add(Student student);

    /**
     *
     * @param student
     * 传入要修改的学生对象
     *
     * @return
     * 修改成功后返回所有学生对象
     */
    public Collection<Student> update(Student student);
}
package com.southwind.dao.impl;

import com.southwind.dao.StudentDAO;
import com.southwind.entity.Student;

import org.springframework.stereotype.Repository;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

@Repository("studentDAO")
public class StudentDAOImpl implements StudentDAO {

    private Map<Integer,Student> studentMap = new HashMap<Integer,Student>(){{
        put(1, new Student(1, "张三", 22));
        put(2, new Student(2, "李四", 23));
    }};

    @Override
    public Collection<Student> getAll() {
        return studentMap.values();
    }

    @Override
    public Student getById(int id) {
        return studentMap.get(id);
    }

    @Override
    public Collection<Student> deleteById(int id) {
        studentMap.remove(id);
        return studentMap.values();
    }

    @Override
    public Collection<Student> add(Student student) {
        studentMap.put(student.getId(),student);
        return studentMap.values();
    }

    @Override
    public Collection<Student> update(Student student) {
        studentMap.put(student.getId(),student);
        return studentMap.values();
    }

}

5.创建StudentService接口以及实现类StudentServiceImpl。

package com.southwind.service;

import com.southwind.entity.Student;

import java.util.Collection;

public interface StudentService {

    /**
     * 获取所有学生对象
     * @return Collection<Student>
     */
    public Collection<Student> getAll();

    /**
     * @param id
     * 传入要获取的学生id
     *
     * @return Student
     * 返回对应的学生对象
     **/
    public Student getById(int id);

    /**
     * @param id
     * 传入要删除的学生id
     *
     * @return Collection<Student>
     * 删除成功后返回所有学生对象
     * */
    public Collection<Student> deleteById(int id);

    /**
     *
     * @param student
     * 传入要添加的学生对象
     *
     * @return
     * 添加成功后返回所有学生对象
     */
    public Collection<Student> add(Student student);

    /**
     *
     * @param student
     * 传入要修改的学生对象
     *
     * @return
     * 修改成功后返回所有学生对象
     */
    public Collection<Student> update(Student student);
}
package com.southwind.service.impl;

import com.southwind.dao.StudentDAO;
import com.southwind.entity.Student;
import com.southwind.service.StudentService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Collection;

@Service("studentService")
public class StudentServiceImpl implements StudentService {

    @Autowired
    private StudentDAO studentDAO;

    @Override
    public Collection<Student> getAll() {
        return studentDAO.getAll();
    }

    @Override
    public Student getById(int id) {
        return studentDAO.getById(id);
    }

    @Override
    public Collection<Student> deleteById(int id) {
        return studentDAO.deleteById(id);
    }

    @Override
    public Collection<Student> add(Student student) {
        return studentDAO.add(student);
    }

    @Override
    public Collection<Student> update(Student student) {
        return studentDAO.update(student);
    }
}

6.创建StudentController。

package com.southwind.controller;

import com.southwind.entity.Student;
import com.southwind.service.StudentService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;

import java.util.Collection;

@RestController
public class StudentController {
    @Autowired
    private StudentService studentService;

    @RequestMapping(value = "/",method = RequestMethod.GET)
    public Collection<Student> getAll(){
        return studentService.getAll();
    }

    @RequestMapping(value = "/{id}",method = RequestMethod.GET)
    public Student getById(@PathVariable("id") int id){
        return studentService.getById(id);
    }

    @RequestMapping(value = "/{id}",method = RequestMethod.DELETE)
    public Collection<Student> deleteById(@PathVariable("id") int id){
        return studentService.deleteById(id);
    }

    @RequestMapping(method = RequestMethod.POST,consumes = MediaType.APPLICATION_JSON_VALUE)
    public Collection<Student> add(@RequestBody Student student){
        return studentService.add(student);
    }

    @RequestMapping(method = RequestMethod.PUT,consumes = MediaType.APPLICATION_JSON_VALUE)
    public Collection<Student> update(@RequestBody Student student){
        return studentService.update(student);
    }
}

7.创建程序的入口类Main,添加@SpringBootApplication注解,这是SpringBoot的核心注解,目的是开启所有SpringBoot的自动配置。

package com.southwind;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

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

工程结构如图:

我在之前的文章中讲过restful风格开发,restful具体来讲就是四种表现形式,HTTP协议中四个表示操作方式的动词:GET、POST、PUT、DELETE。

分别对应四种基本操作:

GET用来获取资源,

POST用来新建资源,

PUT用来修改资源,

DELETE用来删除资源。

所以代码中五个业务方法根据各自的需求,分别对应GET,POST,PUT,DELETE,其中getAll和getById都对应GET请求,两个方法通过是否传参来区分:若不传参,则调用getAll,若传参,调用getById。

业务方法具体用法:

HTTP

URL

含义

GET

http://localhost:8080

获取所有学生对象

GET

http://localhost:8080/1

获取id=1的学生对象

POST

http://localhost:8080

添加学生对象

PUT

http://localhost:8080

修改学生对象

DELETE

http://localhost:8080/1

删除id=1的学生对象

其中add和update方法需要获取前端传来的学生对象参数,采用JSON格式处理参数,需要在RequestMapping添加consumes属性来设置JSON格式。同时参数列表添加@RequestBody把请求提交的JSON数据转换为对应的JavaBean。

RequestMapping常用属性用法:

name:指定请求映射的名称,一般省略。

value:指定请求映射的路径。

method:指定请求的method类型, 如,GET、POST、PUT、DELETE等。

consumes:指定处理请求的提交内容类型(Content-Type),例如application/json, text/html。

produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回。

代码完成,省略了很多配置文件,接来下部署tomcat,前面提到过SpringBoot内嵌了tomcat,所以只需要执行入口类的main方法,即可启动tomcat。默认端口8080,如果需要修改,在SpringBoot的全局配置文件application.properties中进行设置,application.properties存放在src/main/resources目录下。

server.port=8080

8.打开Main.java,运行main方法。

控制台打印出SpringBoot的Banner。

当控制台打印Started Main in seconds日志时,表示启动成功。

接下来我们就来测试这些业务方法,这里使用Postman工具来测试,Postman是一个Http请求模拟工具,使用该工具可以很方便的测试后台接口。

Postman下载地址:

https://www.getpostman.com/apps

测试开始:

getAll

getById

add

update

delete

SpringBoot搭建成功。

源码:

百度网盘:

链接: https://pan.baidu.com/s/1gfQ5GsV

密码: 99py

原文发布于微信公众号 - Java大联盟(javaunion)

原文发表时间:2018-06-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Spring相关

快速创建SpringBoot+SSM解析

此处使用IDEA快速搭建SpringBoot应用,首先用SpringBoot搭建WEB工程:

742
来自专栏一个会写诗的程序员的博客

8.1 Spring Boot集成Groovy混合Java开发小结

本章节我们使用SpringBoot集成Groovy混合Java开发一个极简的RestAPI。 数据库使用mysql,ORM层使用mybatis,模板引擎使用fr...

802
来自专栏你不就像风一样

Spring+Struts2+Hibernate框架整合流程

1.新建Maven项目,导入相关依赖(推荐) 若不使用maven:请前往Maven官网依次下载jar包导入)

663
来自专栏Java3y

SSM【史上最详细整合】

导入开发包 asm-3.2.0.RELEASE.jar asm-3.3.1.jar c3p0-0.9.jar cglib-2.2.2.jar com.sprin...

3277
来自专栏微信公众号:Java团长

Spring Boot属性配置和使用

Spring Boot 允许通过外部配置让你在不同的环境使用同一应用程序的代码,简单说就是可以通过配置文件来注入属性或者修改默认的配置。

721
来自专栏weixuqin 的专栏

使用 intellijIDEA 创建 maven 工程进行 Spring ioc 测试

控制反转(Inversion of Control,缩写为IOC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖...

774
来自专栏Jed的技术阶梯

Java设计模式之迭代器模式

老板让我打印各个项目的报表,包括项目名称,人数,开销等信息,这个好办,看下面的类图:

682
来自专栏IT进修之路

原 荐 JAVA懒开发:FreeMarker

1945
来自专栏一个会写诗的程序员的博客

《Spring Boot极简教程》第8_章: Spring Boot集成Groovy混合Java开发第8_章: Spring Boot集成Groovy混合Java开发小结

本章我们使用SpringBoot集成Groovy混合Java开发一个极简的RestAPI。 数据库使用mysql,ORM层使用mybatis,模板引擎使用fre...

542
来自专栏Hongten

FreeMarker_模板引擎_代码自动生成器_源码下载

你可以到freemarker的官网上去,那里有很详细的介绍:http://freemarker.org/

861

扫码关注云+社区