一、创建SpringBoot+maven+SpringDataJpa项目
1. maven+SpringDataJpa项目好处
maven解决手动导入所需jar包问题,可以使用pom文件直接引用jar包
同时也避免了,多人开发过程中导入相同jar包但版本不一致导致报错问题
更加便于编译打包、
maven项目常见的打包命令:
编译:mvn compile --src/main/java目录java源码编译生成class (target目录下)
测试:mvn test --src/test/java 目录编译
清理:mvn clean --删除target目录,也就是将class文件等删除
打包:mvn package --生成压缩文件:java项目#jar包;web项目#war包,也是放在target目录下
安装:mvn install --将压缩文件(jar或者war)上传到本地仓库
部署|发布:mvn deploy --将压缩文件上传私服
SpringDataJpa则可以自动连接数据库生成mysql数据表
先举例说明
application.properties配置文件
#datasource
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/autoui?characterEncoding=utf8&useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
spring.datasource.username=root
spring.datasource.password=123456
表java文件
import lombok.Setter;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
@Setter
@Getter
public class Element {
@Id
private long id;
private String elementName;
private String elementDescribe;
private int visiable;
private String editTime;
private String editUser;
private String data;
}
运行后,自动生成对应的element表
2. 项目创建步骤
使用ideal社区版做说明,创一个SpringBoot项目的workspace
1)file-new-project-Spring Assistant(注意ideal的project等同于eclipse的Workspace )
注意:社区版使用这个,旗舰版直接选择Spring Initial
2)填写项目的GroupId和ArtifactId(根据规则自由命名),project type选择maven project,version等默认
3)maven相关配置地址,默认会有maven安装的地址。此处使用本地库地址,避免下载更新太慢
4)创建完成后的生成pom文件默认内容
<?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>1.4.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.company</groupId>
<artifactId>aotoui</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>aotoui</name>
<description>aotoui project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</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>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
注:spring,jdbc,jpa相关包都已经默认依赖,后续有需要再进行依赖
6)创建完成后的目录文件结构
demo:创建时的artifactId,即project名称
.idea:是IDEA自动生成 ,.idea文件夹来存放项目的配置信息。其中包括版本控制信息、历史记录等等。如果你不小心删除它,下次它还会自动生成
src/main:main 中存放实际项目资源,大部分代码实现放在main中操作
scr/test:test 存放测试项目资源。没有使用模板创建的默认都生成是test,使用过比如webapp模板的生成的文件夹则为webapp,对应下一级的文件夹中包含了webapp所需的部分目录
pom.xml:pom.xml主要描述了项目的maven坐标,包依赖关系。我们不需要在手动下载一些jar包,然后手动依赖。只要遵循它规则,他会自动帮我们下载依赖
target:target 为输出文件夹
二、POM文件说明
1.作用
pom文件做依赖,依赖成功后自动下载所需jar包(注意配置需要将work offline关闭)
设置work offline关闭状态,检测不到jar的状态下自动下载
2.结构说明
1)最外层project标签,自动引入了maven相关信息,创建maven项目时填写的groupId和artifactId也自动生成了如下项目标签
<groupId>com.springmaven</groupId>
<artifactId>ui</artifactId>
<version>1.0-SNAPSHOT</version>
2)填写需要引用的依赖包,全pom文件如下
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.springmaven</groupId>
<artifactId>ui</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.2.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!--单元测试相关包-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.0.0-beta1</version>
</dependency>
<!--UI自动化相关包-->
<dependency>
<groupId>io.appium</groupId>
<artifactId>java-client</artifactId>
<version>5.0.3</version>
</dependency>
<!--spring相关包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<version>1.4.2.RELEASE</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.4.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>1.4.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>1.4.2.RELEASE</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>com.mashape.unirest</groupId>
<artifactId>unirest-java</artifactId>
<version>1.4.9</version>
</dependency>
</dependencies>
<!-- 添加主程序入口,否则打包后,执行会找不到主清单-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>
3)其中groupId、artifactId、version分别对应关系
groupId一般分为多个段,这里我只说两段,第一段为域,第二段为公司名称。域又分为org、com、cn等等许多,其中org为非营利组织,com为商业组织。举个apache公司的tomcat项目例子:这个项目的groupId是org.apache,它的域是org(因为tomcat是非营利项目),公司名称是apache,artigactId是tomcat
比如:appium中java-client地址如下,依赖如下
D:\Maven\repository\org\springframework\boot\spring-boot-starter-parent\1.4.2.RELEASE
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.2.RELEASE</version>
</dependency>
三、springboot项目
1.作用
可以用简单的注释实现复杂的代码编写,常用注解略,网上很多(比如访问数据库)
2.配置
基于上述配置过maven的项目配置springboot,直接基于pom文件依赖spring相关jar包,见上面配置文件
四、单元测试插件
1. JUnit是一个Java语言的单元测试框架
@Test:要执行的用例,只有添加了这个注解,用例才会被执行;
@Ignore: 不执行的用例,只要添加了这个注解,用例就不会被执行;
@Before :在方法执行之前执行,类似Junit3.x中setUp方法;
@After:在方法执行之后执行,类似于Junit3.x中的tearDown方法;
@BeforeClass:在所有的方法执行前执行;
@AfterClass:在所有方法后执行;
注解的执行顺序如下: @BeforeClass ->@Before->@Test->@After ->@AfterClass
2. TestNG也是java语言的单元测试框架
被@BeforeSuite注解的方法,将会在testng定义的xml根元素里面的所有执行之前运行。
被@AfterSuite注解的方法,将会在testng定义的xml根元素里面的所有执行之后运行。
被@BeforeTest注解的方法,将会在一个元素定义的所有里面所有测试方法执行之前运行。
被@AfterTest注解的方法,将会在一个元素定义的所有里面所有的测试方法执行之后运行。
被@BeforeClass注解的方法,将会在当前测试类的第一个测试方法执行之前运行。
被@AfterClass注解的方法,将会在当前测试类的最后一个测试方法执行之后运行。
被@BeforeMethod注解的方法,将会在当前测试类的每一个测试方法执行之前运行。
被@AfterMethod注解的方法,将会在当前测试类的每一个测试方法执行之后运行。
五、代码实现
实例:接口创建和调用
目录结构(忽略UI文件夹内容,其它实现用)
创建ApiApplication:启动springboot项目
创建ApiControler:这里用于接口创建
创建ApiUtil:这里用于接口调用
具体代码如下:
package API;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class ApiApplication {
public static void main(String[] args){
SpringApplication.run(ApiApplication.class, args);
}
}
package API;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpSession;
import java.util.Map;
/**
* 类上写上注解 @RestController,那么此Controller返回格式就都是text/json
* 方法上写上注解 @ResponseBody,那么该方法返回格式是text/json
*/
@RestController
@RequestMapping("/api")
public class ApiControler {
//创建一个get请求
@RequestMapping(value = "/test", method = RequestMethod.GET)
public String testDemo(){
return "This is a apiReturnGET";
}
//创建一个post请求
@RequestMapping(value = "/test2", method = RequestMethod.POST)
public String testDemo2(@RequestParam long id, @RequestBody Map<String, String> map, HttpSession session){
id = 1;
map.put("key01","aaa");
map.put("key02","bbb");
return "This is a apiReturnPOST";
}
}
package API;
import com.google.gson.Gson;
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
import com.mashape.unirest.http.exceptions.UnirestException;
import java.util.HashMap;
import java.util.Map;
public class ApiUtil {
/**
* 调用get请求
* @return
*/
public String apiGet(){
try {
HttpResponse<String> response = Unirest.get("http://localhost:8080/api/test").asString();
return response.toString();
} catch (UnirestException e) {
e.printStackTrace();
return "erro";
}
}
/**
* 调用post请求
* 请求参数是json形式,使用.body传入jsonmap。或者使用.field一对对参数传入
* 请求参数是form-data形式,使用.queryString传入
* @return
*/
public String apiPost(){
Map<String,String> map = new HashMap<>();
map.put("key01","aaa");
map.put("key02","bbb");
try {
HttpResponse<String> response = Unirest.post("http://localhost:8080/api/test2?id=1")
.header("Content-Type", "application/json")
.queryString("id",1)
.body(new Gson().toJson(map))
.asString();
// HttpResponse<String> response = Unirest.post("http://localhost:8080/api/test2?id=1")
// .header("Content-Type", "application/json")
// .queryString("id",1)
// .field("key01","aaa")
// .field("key02","bbb")
// .asString();
return response.getBody();
} catch (UnirestException e) {
e.printStackTrace();
return "erro";
}
}
}
启动ApiApplication后,我们可以在控制台看到下面这样的图案,这个是springboot启动标志,启动后,ApiApplication目录下的所有文件都已启用,即整个API moudle层全部启用
启动成功后,测试一下:
浏览器中输入get接口请求
postman进行post接口请求
后续可以使用apiGet(),apiPost()方法来进行接口调用
六、打包和部署
1)进入项目目录
2)编译
mvn clean compile 或者mvn clean
3)打包
mvn clean package或者mvn package
4)部署
从上述打包日志中,找到jar包文件地址
D:\***\IdeaWorkSpase\ui\target\ui-1.0-SNAPSHOT.jar
使用bat文件访问jar包,bat文件内容
java -jar D:\ui-1.0-SNAPSHOT.jar
pause
5)启动
当然也可以放到jenkins上进行自动编译打包启动,在jenkins章节进行介绍