一头雾水学习SpringBoot的菜鸟,跟着网上的教程成功复制粘贴了一遍(艰难落泪
现在自己敲一遍加深理解和记忆。
0.设置Maven环境(这里可以忽略…我有几个Maven)
1.更改pom.xml文件,引入需要的依赖。(注意版本…可能会出错)
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<!-- optional=true,依赖不会传递,该项目依赖devtools;之后依赖myboot项目的项目如果想要使用devtools,需要重新引入 -->
<optional>true</optional>
</dependency>
<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>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
2.增加application.yml,增加application-dev.yml
[application.yml]
spring:
profiles:
active: dev
[application-dev.yml]
设置端口号为8888
username和password写自己的数据库名称和密码
server:
port: 8888
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/test_db?useUnicode=true&characterEncoding=utf- 8&useSSL=false
username: root
password: root
driver-class-name: com.mysql.jdbc.Driver
3.新建package->model 新建类Article
[Article]
package com.zimug.bootlaunch.model;
import com.fasterxml.jackson.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@JsonPropertyOrder(value = {"content", "title"})
public class Article {
@JsonIgnore
private Long id;
@JsonProperty("auther")
private String author;
private String title;
private String content;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
private List<Reader> reader;
}
新建类Reader
[Reader]
package com.zimug.bootlaunch.model;
import lombok.Data;
@Data
public class Reader {
private String name;
private int age;
}
新建类AjaxResponse
package com.zimug.bootlaunch.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
@ApiModel
public class AjaxResponse {
@ApiModelProperty("是否请求成功")
private boolean isok;
private int code;
private String message;
private Object data;
private AjaxResponse() {
}
public static AjaxResponse success() {
AjaxResponse resultBean = new AjaxResponse();
resultBean.setIsok(true);
resultBean.setCode(200);
resultBean.setMessage("success");
return resultBean;
}
public static AjaxResponse success(Object data) {
AjaxResponse resultBean = new AjaxResponse();
resultBean.setIsok(true);
resultBean.setCode(200);
resultBean.setMessage("success");
resultBean.setData(data);
return resultBean;
}
}
4.新建package->dao 新建类ArticleJDBCDAO
jdbcTemplate.update适合于insert 、update和delete操作;
jdbcTemplate.queryForObject用于查询单条记录返回结果
jdbcTemplate.query用于查询结果列表
BeanPropertyRowMapper可以将数据库字段的值向对象映射,满足驼峰标识也可以自动映射。如:数据库create_time字段映射到createTime属性。
[ArticleJDBCDAO]
package com.zimug.bootlaunch.dao;
import com.zimug.bootlaunch.model.Article;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import javax.annotation.Resource;
import java.util.List;
@Repository
public class ArticleJDBCDAO {
@Resource
private JdbcTemplate jdbcTemplate;
//保存文章
public void save(Article article) {
//jdbcTemplate.update适合于insert 、update和delete操作;
jdbcTemplate.update("INSERT INTO article(author, title,content,create_time) values(?, ?, ?, ?)",
article.getAuthor(),
article.getTitle(),
article.getContent(),
article.getCreateTime());
}
//删除文章
public void deleteById(Long id) {
//jdbcTemplate.update适合于insert 、update和delete操作;
jdbcTemplate.update("DELETE FROM article WHERE id = ?", new Object[]{id});
}
//更新文章
public void updateById(Article article) {
//jdbcTemplate.update适合于insert 、update和delete操作;
jdbcTemplate.update("UPDATE article SET author = ?, title = ? ,content = ?,create_time = ? WHERE id = ?",
article.getAuthor(),
article.getTitle(),
article.getContent(),
article.getCreateTime(),
article.getId());
}
//根据id查找文章
public Article findById(Long id) {
//queryForObject用于查询单条记录返回结果
return (Article) jdbcTemplate.queryForObject("SELECT * FROM article WHERE id=?",
new Object[]{id}, new BeanPropertyRowMapper(Article.class));
}
//查询所有
public List<Article> findAll() {
//query用于查询结果列表
return (List<Article>) jdbcTemplate.query("SELECT * FROM article ", new BeanPropertyRowMapper(Article.class));
}
}
5.新建package->service
5.1新建ArticleRestService接口
package com.zimug.bootlaunch.service;
import com.zimug.bootlaunch.model.Article;
import java.util.List;
public interface ArticleRestService {
public Article saveArticle(Article article);
public void deleteArticle(Long id);
public void updateArticle(Article article);
public Article getArticle(Long id);
public List<Article> getAll();
}
5.2新建ArticleRestJDBCServiceImpl 实现 ArticleRestService
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
public class ArticleRestJDBCServiceImpl implements ArticleRestService {
//首先注入DAO
@Resource
ArticleJDBCDAO articleJDBCDAO;
@Transactional//在服务层做事物的管理
@Override
public Article saveArticle(Article article) {
articleJDBCDAO.save(article);
return article;
}
@Override
public void deleteArticle(Long id) {
articleJDBCDAO.deleteById(id);
}
@Override
public void updateArticle(Article article) {
articleJDBCDAO.updateById(article);
}
@Override
public Article getArticle(Long id){
return articleJDBCDAO.findById(id);
}
@Override
public List<Article> getAll() {
return articleJDBCDAO.findAll();
}
}
6.新建package->config 新建类Swagger2
[Swagger2]
package com.zimug.bootlaunch.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@Configuration
@EnableSwagger2
public class Swagger2 {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("com.zimug.bootlaunch"))
.paths(PathSelectors.regex("/rest/.*"))
.build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("springboot利用swagger构建api文档")
.description("简单优雅的restfun风格")
.termsOfServiceUrl("http://www.zimug.com")
.version("1.0")
.build();
}
}
[ArticleRestController]
package com.zimug.bootlaunch.controller;
import com.zimug.bootlaunch.model.AjaxResponse;
import com.zimug.bootlaunch.model.Article;
import com.zimug.bootlaunch.service.ArticleRestJDBCServiceImpl;
import com.zimug.bootlaunch.service.ArticleRestService;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@Slf4j
@Controller
@RequestMapping("/rest")
public class ArticleRestController {
@Resource(name = "articleRestJDBCServiceImpl")
ArticleRestService articleRestService;
@ApiOperation(value = "添加文章", notes = "添加新的文章", tags = "Article", httpMethod = "POST")
@ApiResponses({
@ApiResponse(code = 200, message = "成功", response = AjaxResponse.class),
@ApiResponse(code = 400, message = "用户输入错误", response = AjaxResponse.class),
@ApiResponse(code = 500, message = "系统内部错误", response = AjaxResponse.class)
})
//@RequestMapping(value = "/article", method = POST, produces = "application/json")
@PostMapping("/article")
public @ResponseBody
AjaxResponse saveArticle(@RequestBody Article article) {
/*public @ResponseBody AjaxResponse saveArticle(@RequestParam String id,
@RequestParam String author) {*/
log.info("articleRestService return :" + articleRestService.saveArticle(article));
return AjaxResponse.success(article);
}
//@RequestMapping(value = "/article/{id}", method = DELETE, produces = "application/json")
@DeleteMapping("/article/{id}")
public @ResponseBody
AjaxResponse deleteArticle(@PathVariable Long id) {
articleRestService.deleteArticle(id);
return AjaxResponse.success(id);
}
//@RequestMapping(value = "/article/{id}", method = PUT, produces = "application/json")
@PutMapping("/article/{id}")
public @ResponseBody
AjaxResponse updateArticle(@PathVariable Long id, @RequestBody Article article) {
article.setId(id);
articleRestService.updateArticle(article);
return AjaxResponse.success(article);
}
//@RequestMapping(value = "/article/{id}", method = GET, produces = "application/json")
@GetMapping("/article/{id}")
public @ResponseBody
AjaxResponse getArticle(@PathVariable Long id) {
return AjaxResponse.success(articleRestService.getArticle(id));
}
//@RequestMapping(value = "/article", method = GET, produces = "application/json")
@GetMapping("/article")
public @ResponseBody
AjaxResponse getAllArticle() {
return AjaxResponse.success(articleRestService.getAll());
}
}
8.新建数据表
CREATE TABLE `article` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`author` VARCHAR(32) NOT NULL,
`title` VARCHAR(32) NOT NULL,
`content` VARCHAR(512) NOT NULL,
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
)
COMMENT='文章'
ENGINE=InnoDB
;
9.运行
package com.zimug.bootlaunch;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Launch0921aApplication {
public static void main(String[] args) {
SpringApplication.run(Launch0921aApplication.class, args);
}
}
10.使用Postman进行测试
POST增加数据
GET获取所有数据
GET根据ID获取数据
PUT修改数据
附:项目结构如图