SpringBoot+Maven+SpringDataJpa+MySql web项目单元测试 框架搭建、代码实现、部署

一、创建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>

?mid=&wid=51824&sid=&tid=8731&rid=LOADED&custom1=mp.csdn.net&custom2=%2Fpostedit&t=1575343031006?mid=&wid=51824&sid=&tid=8731&rid=FINISHED&custom1=mp.csdn.net&t=1575343031006三、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);
    }
}

?mid=&wid=51824&sid=&tid=8731&rid=LOADED&custom1=mp.csdn.net&custom2=%2Fpostedit%2F103364021&t=1575344616252?mid=&wid=51824&sid=&tid=8731&rid=FINISHED&custom1=mp.csdn.net&t=1575344616252

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

?mid=&wid=51824&sid=&tid=8731&rid=LOADED&custom1=mp.csdn.net&custom2=%2Fpostedit%2F103364021&t=1575360356711?mid=&wid=51824&sid=&tid=8731&rid=FINISHED&custom1=mp.csdn.net&t=15753603567113)打包

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章节进行介绍

?mid=&wid=51824&sid=&tid=8731&rid=LOADED&custom1=mp.csdn.net&custom2=%2Fpostedit%2F103364021&t=1575361388402?mid=&wid=51824&sid=&tid=8731&rid=FINISHED&custom1=mp.csdn.net&t=1575361388402

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值