1、springboot项目构建
1.2、下载安装IntelliJ IDEA
下载安装步骤不再赘述,请移步官网进行:
https://www.jetbrains.com/zh-cn/idea/promo/
1.3、新建springboot项目
File>New>Project..
选择1.8以上本地的jdk
上述结果就表示项目运行成功了,但是,还没完成,因为我们还没有编写任何接口,如果登录进入会提示报错。接下来带大家写一个简单的查询接口吧。
1.4、maven配置说明
经过使用发现,IDEA2019若要使用本机安装的maven,对maven版本有限制,v3.5.4才行。
**将jar包发布安装到本机maven仓库**:
mvn install:install-file -Dfile=D:/libs/niusms-2.1.0.jar -DgroupId=duke-niusms -DartifactId=niusms -Dversion=2.1.0 -Dpackaging=jar
maven其他使用:
deploy:将生成的jar包发布至远程maven仓库共享给其他人使用
maven导出jar-不带依赖
执行:package
maven导出jar-带依赖
在pom.xml配置中添加:
<!-- 带依赖包出包 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<archive>
<manifest>
<!--指定启动入口类文件的位置-->
<!--
<mainClass>xx.xx.MyAppMain</mainClass>
-->
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>
jar-with-dependencies
</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
在命令终端执行:
mvn assembly:assembly
结果:
1.5、接口编码
新建如下结构的包:
当然啦,包结构命名可以根据自己的习惯而定,我这里只是一个例子,大家不必纠结命名是否要一致。
补充:我这里使用的是jpa框架操作数据库,所以编码前,先引入相应的jar包,pom.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.duke</groupId>
<artifactId>butterfly</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>butterfly</name>
<description>this a efficiency project of resource managment..</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.6</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time-hibernate</artifactId>
<version>1.3</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.2.0.Final</version>
</dependency>
<dependency>
<groupId>org.jadira.usertype</groupId>
<artifactId>usertype.core</artifactId>
<version>6.0.1.GA</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.8.Final</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
entities下Book.java
package com.duke.butterfly.entities;
import com.fasterxml.jackson.annotation.JsonFormat;
import org.hibernate.annotations.Type;
import org.joda.time.DateTime;
import org.springframework.format.annotation.DateTimeFormat;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
/**
* -Author DukeMarshal
* -Date 2020/9/10
* -Time 9:46
* -Version 1.0
*/
@Entity
@Table(name="t_book")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String name;
private Integer pages;
private double price;
private String author;
@JsonFormat(shape=JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss")
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime")
@Column(name = "add_date")
private DateTime addDate;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getPages() {
return pages;
}
public void setPages(Integer pages) {
this.pages = pages;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public DateTime getAddDate() {
return addDate;
}
public void setAddDate(DateTime addDate) {
this.addDate = addDate;
}
@Override
public String toString() {
return "Book{" +
"id=" + id +
", name='" + name + '\'' +
", pages=" + pages +
", price=" + price +
", author='" + author + '\'' +
", addDate=" + addDate +
'}';
}
}
dao下:BookRepository.java
public interface BookRepository extends JpaRepository<Book,Integer> {
}
这里做下简单说明,jpa已经做了很好的封装,我们只需定义一个接口来实现JpaRepository就能使用其各种方法操作数据了。
message/response下CommonRsp.java
package com.duke.butterfly.messages.response;
import java.util.List;
/**
* -Author DukeMarshal
* -Date 2020/9/10
* -Time 10:09
* -Version 1.0
*/
public class CommonRsp<T> {
private Integer code;
private String description;
private List<T> data;
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public List<T> getData() {
return data;
}
public void setData(List<T> data) {
this.data = data;
}
@Override
public String toString() {
return "CommonRsp{" +
"code=" + code +
", description='" + description + '\'' +
", data=" + data +
'}';
}
}
services下BookService.java
package com.duke.butterfly.services;
import com.duke.butterfly.dao.BookRepository;
import com.duke.butterfly.entities.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* -Author DukeMarshal
* -Date 2020/9/10
* -Time 9:59
* -Version 1.0
*/
@Service(value = "bookService")
public class BookService {
@Autowired
private BookRepository bookRepository;
public List<Book> queryAll(){
return bookRepository.findAll();
}
public Book findById(Integer id){
return bookRepository.findById(id).get();
}
}
controllers下BookController.java
package com.duke.butterfly.controllers;
import com.duke.butterfly.entities.Book;
import com.duke.butterfly.messages.response.CommonRsp;
import com.duke.butterfly.services.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* -Author DukeMarshal
* -Date 2020/9/10
* -Time 10:07
* -Version 1.0
*/
@RestController
@RequestMapping("/book")
public class BookController {
@Autowired
private BookService bookService;
@GetMapping({"/getAll"})
public CommonRsp<Book> queryAllBook(){
List<Book> books = bookService.queryAll();
CommonRsp<Book> rsp = new CommonRsp<Book>();
rsp.setData(books);
if(null == books){
rsp.setCode(999);
rsp.setDescription("查询失败");
}else{
rsp.setCode(0);
rsp.setDescription("查询成功");
}
return rsp;
}
}
1.6、测试验证
到这里,接口基本上写完了,这时候访问接口链接:
http://localhost:8080/book/getAll
输入完账号密码后就得到返回结果了。
这里给出样例中的sql便于大家学习。
/*
Navicat MySQL Data Transfer
Source Server : 本地
Source Server Type : MySQL
Source Server Version : 50727
Source Host : localhost:3306
Source Schema : bookstore
Target Server Type : MySQL
Target Server Version : 50727
File Encoding : 65001
Date: 10/09/2020 10:28:24
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for t_book
-- ----------------------------
DROP TABLE IF EXISTS `t_book`;
CREATE TABLE `t_book` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`author` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
`price` double(10, 2) NULL DEFAULT NULL,
`pages` int(10) NULL DEFAULT NULL,
`add_date` datetime(0) NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of t_book
-- ----------------------------
INSERT INTO `t_book` VALUES (1, 'java编程', 'laowang', 100.50, 100, NULL);
INSERT INTO `t_book` VALUES (5, 'java编程4', 'laowang', 100.50, 100, NULL);
INSERT INTO `t_book` VALUES (6, 'java编程5', 'laowang', 100.50, 100, NULL);
INSERT INTO `t_book` VALUES (7, 'java编程6', 'laowang', 100.50, 100, NULL);
INSERT INTO `t_book` VALUES (8, 'java编程7', 'laowang', 100.50, 100, NULL);
SET FOREIGN_KEY_CHECKS = 1;
2、发布jar包
2.1、构建jar包
2.2、测试验证
启动命令:java -jar -Dserver.port=9292 ariang-0.0.1-SNAPSHOT.jar
3、热部署,自动更新html、js等静态资源,运行状态下
Ctrl+Alt+Shift+/
4、debug模式下运行,更新java自动热加载
5、自动导包设置
项目至此完成。