springboot01项目创建与测试_com.example.springboot1.springboot1application-程序员宅基地

技术标签: spring boot  springboot  

springboot01项目创建与测试



1 SSM和springboot比较

1.1 SSM

优点:
spring:集成其他框架,实现IOC(通过spring创建对象管理对象)、DI依赖注入、解耦合(主键)、AOP(切面编程)
springMVC:基于MVC模式开发web应用
MyBatis:对JDBC的封装(提高开发效率简化代码,但原生的JDBC访问效率更高)

缺点:配置文件多,配置繁琐,配置依赖包多

1.2 springboot优点

springboot是对spring的封装,简化SSM配置,不关注框架配置,在SSM框架的基础上提供了更简洁的开发模式,将更多的时间用于业务开发。

2 springboot项目创建

2.1 在官网创建

访问官网 https://spring.io/ ,点击Projects下的Spring Boot
在这里插入图片描述
点击Learn下的Spring Initializr
在这里插入图片描述
填写项目信息完成项目创建。
springboot内置tomcat,可以打jar包运行在tomcat里。
在这里插入图片描述

2.2 在IDEA创建

打开IDEA,new project,选择Spring Initializr
在这里插入图片描述
填写项目信息
在这里插入图片描述
加入Spring Web、MyBatis Framework、MySQL Driver
在这里插入图片描述
点击finish完成springboot项目创建
在这里插入图片描述
打开文件目录,右键运行SmashingApplication
在这里插入图片描述
出现错误
在这里插入图片描述
将pom.xml下的mybatis先注释掉再运行就好了
在这里插入图片描述
运行成功
在这里插入图片描述

3 springboot项目文件介绍

3.1 springboot项目文件结构

SmashingApplication:主启动类
在这里插入图片描述

3.2 springboot启动器

pom.xml文件下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3 springboot配置文件

先运行.yml文件,最后运行.properties文件,所以两者同时存在时,.properties文件会对.yml文件覆盖。
命名应遵从如下规则:
在这里插入图片描述

3.3.1 .properties文件

(更多的配置可以百度)如:

#改变默认端口
server.port=8080
#访问路径前加/admin
server.servlet.context-path=/admin
#配置数据库
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/smashing?characterEncoding=utf8
spring.datasource.name=root
spring.datasource.password=123456

3.3.2 .yml文件(推荐)

先在pom.xml文件里导入连接池,这里导入的是alibaba
在这里插入图片描述
新建 .yml 文件

server:
  port: 8066
  servlet:
    context-path: /     #server.servlet.context-path=/login

    #jdbc:mysql://localhost:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
spring:
  datasource:
    #引入druid数据源
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/smashing?characterEncoding=utf8
    username: root
    password: 123456
  #配置视图 前缀  后缀   static 相当于根目录
  mvc:
    view:
      prefix: /
      suffix: .html
mybatis:
  type-aliases-package: com.fk.smashing.pojo    #实体类的别名
  mapper-locations: classpath:/mappers/*.xml    #映射文件路径
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true

    #表字段 user_id    user_name
    #实体类  userId     userName
    #即 驼峰映射规则把数据库里    ”表名“ “_” “小写字母开头的属性”
    #变成实体类    ”表名“ “大写字母开头的属性”


3.4 日志组件logback.xml

用logback取代了log4j

在resources下新建logback.xml
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
	<include resource="org/springframework/boot/logging/logback/defaults.xml"/>

	<property name="LOG_FILE_NAME_PATTERN" value="logs/auth.%d{yyyy-MM-dd}.%i.log"/>
	<!-- 日志格式 -->
	<property name="CONSOLE_LOG_PATTERN"
			  value="%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%c){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
	<property name="FILE_LOG_PATTERN"
			  value="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %c : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>

	<!--输出到控制台-->
	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<pattern>${CONSOLE_LOG_PATTERN}</pattern>
		</encoder>
	</appender>

	<!--输出到文件-->
	<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${LOG_FILE_NAME_PATTERN}</fileNamePattern>
			<!-- 日志保留天数 -->
			<maxHistory>366</maxHistory>
			<!-- 日志文件上限大小,达到指定大小后删除旧的日志文件 -->
			<totalSizeCap>2GB</totalSizeCap>

			<!-- 每个日志文件的最大值 -->
			<timeBasedFileNamingAndTriggeringPolicy
					class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>10MB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>

		</rollingPolicy>
		<encoder>
			<pattern>${FILE_LOG_PATTERN}</pattern>
		</encoder>
	</appender>

	<!-- (多环境配置日志级别)根据不同的环境设置不同的日志输出级别 -->
	<springProfile name="default,local">
		<root level="info">
			<appender-ref ref="console"/>
		</root>
		<logger name="com.fk" level="debug"/>
	</springProfile>

	<springProfile name="dev,test">
		<root level="info">
			<appender-ref ref="console"/>
			<appender-ref ref="file"/>
		</root>
		<logger name="com.fk" level="debug"/>
	</springProfile>

	<springProfile name="product,pre">
		<root level="info">
			<appender-ref ref="console"/>
			<appender-ref ref="file"/>
		</root>
		<logger name="com.fk" level="debug"/>
	</springProfile>

</configuration>

3.5 补齐文件目录

在这里插入图片描述

4 环境测试

注意,pojo、controller等包必须在主启动类SmashingApplication的平级或者子集里,才能被spring容器扫描到

4.1 测试视图返回

若出现错误:
在这里插入图片描述
因为mysql版本问题,在依赖里加入自己设置的版本,覆盖原来版本即可。
在这里插入图片描述

在controller包里新建TestController.java

package com.fk.smashing.controller.before;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class TestController {
    
    @GetMapping("/test")
    public String testPage(){
    
        return "test";//test.html
    }

}

在static目录下新建test.html,在body标签里输入“SpringMVC配置成功”来进行测试
在这里插入图片描述

输入 http://localhost:8066/test 返回test.html视图,测试成功
在这里插入图片描述

4.2 测试创建对象

pojo包里新建User类

package com.fk.smashing.pojo;

import org.springframework.stereotype.Component;

@Component
public class User {
    
}

在SmashingApplicationTests里或者新建测试类进行测试

package com.fk.smashing;

import com.fk.smashing.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class SmashingApplicationTests {
    
    @Autowired//将User注入到测试类里
    private User user;
    @Test
    public void test1(){
    
        System.out.println(user);
    }

    @Test
    void contextLoads() {
    
    }

}

如果测试失败,可能因为版本低,在@SpringBootTest下加注解@RunWith
在这里插入图片描述

运行。测试成功,打印了User地址
在这里插入图片描述

4.3 数据库测试

4.3.1 注解@Data

导入lombok包,在实体类里加入注解@Data,则无需添加get()、set()、toString()方法。

<!--lombok jar 包-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
        </dependency>

4.3.2 数据库tb_user表信息

在这里插入图片描述

4.3.3 实体类User.java

package com.fk.smashing.pojo;

import lombok.Data;
import org.springframework.stereotype.Component;

import java.util.Date;

@Component
//导入lombok包,加入注解@Data,无需添加get()、set()、toString()方法
@Data
public class User {
    
    private Integer uid;
    private String username;
    private String password;
    private String salt;
    private String tel;
    private String email;
    private String sex;
    private String avatar;
    private Integer isDelete;
    private Date createTime;
    private Date modifyTime;
    private String CreateUser;
    private String modifiedUser;
}

4.3.4 持久层接口Usermapper

package com.fk.smashing.mapper.before;

import com.fk.smashing.pojo.User;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface Usermapper {
    
	//查询所有用户数据
	List<User> findAllUsers();

}

4.3.5 Usermapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.fk.smashing.mapper.before.Usermapper">
	<select id="findAllUsers" resultType="User">
/*如 is_delete别名isDelete,如果用 * 无法将is_delete和isDelete封装回来*/
		select uid,username,salt,tel,email,sex,avatar,is_delete isDelete,
			   createTime,modifyTime,Create_user CreateUser,modified_user modifiedUser from tb_user
	</select>

</mapper>

4.3.6 测试类SmashingApplicationTests

package com.fk.smashing;

import com.fk.smashing.mapper.before.Usermapper;
import com.fk.smashing.pojo.User;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
class SmashingApplicationTests {
    
    //测试持久层
    @Autowired(required = false)//required = false不一定需要
    private Usermapper usermapper;
    @Test
    public void test1(){
    
        List<User> list = usermapper.findAllUsers();
        for(User user:list){
    
            System.out.println(user);
        }
    }

    @Test
    void contextLoads() {
    
    }

}

4.3.7 测试结果

测试成功,查询数据库里的所有user信息并打印
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43881663/article/details/114981397

智能推荐

python dicom放大_python3实现对dicom图像处理(图像呈现,缩放,平移)-程序员宅基地

文章浏览阅读620次。dicom图像处理DICOM(Digital Imaging and Communications in Medicine)即医学数字成像和通信。DICOM被广泛应用于放射医疗,心血管成像以及放射诊疗诊断设备(X射线,CT,核磁共振,超声等)。本文主要对dicom图像进行处理。使用工具pycharm,python3pycharm下载地址:python3下载地址:pycharm环境搭建:第三方工具库..._最大值

如何免费访问和使用Gemini API?-程序员宅基地

文章浏览阅读959次,点赞22次,收藏25次。Gemini Ultra具有最先进的性能,在几个指标上超过了GPT-4的性能。它是第一个在大规模多任务语言理解基准测试中超越人类专家的模型,该基准测试57个不同学科的世界知识和解决问题的能力。Gemini是谷歌迄今为止开发的最先进、最庞大的AI模型。它为多模态而建,理解并处理不同类型的数据,比如文本、代码、音频、图像和视频。下面我们将加载Masood Aslami的图像,并用它来测试Gemini Pro Vision的多模态性。有了Gemini可以为查询提供图像、音频和文本,获得几乎完美的答案。

年薪40W+,2018年程序员如何跳出35岁“失业”怪圈?-程序员宅基地

文章浏览阅读1.7k次。时常有人在知乎、百度等平台抛出问题:程序员过了 35 岁(或 40 岁)是不是就失去了竞争力,要转管理岗了吗?当然不是。2018年程序员们将有更多的机会和前景。2018年..._35岁了能从事云计算吗

Linux操作系统~系统文件IO,什么是文件描述符fd?什么是vfs虚拟文件系统_操作系统fd和fds的区别-程序员宅基地

文章浏览阅读1.5k次。我们的输入输出最终都是访问硬件,OS是操作系统的管理者我们使用的都是语言层面上的接口,所以的“语言”上的操作,都必须贯穿OS。然而操作系统不相信任何人,所以访问操作系统都是需要通过系统调用的接口的。因此几乎所有的语言fopen,fclose,fread,fwrite,fgets,fputs,fgetc,fputc等底层一定需要使用OS提供的系统调用上面的 fopen fclose fread fwrite 都是C标准库当中的函数,我们称之为库函数(libc)。而,_操作系统fd和fds的区别

转型经验分享|作为传统汽车工程师,我如何转型去阿里做无人驾驶?-程序员宅基地

文章浏览阅读3.4k次。编者按:以下这篇文章,其实是笔者2018年初发表在《业界良新》上的三篇转型文章的合集。这次重新汇总呈现给大家,一方面是给传统汽车产业需要转型的朋友做个转型参考,另一方面,也是给接下来的两篇..._汽车工程师怎么跨界

C-POJ 3278_poj3278 c语言-程序员宅基地

文章浏览阅读204次。#include <iostream>#include <vector>#include <queue>using namespace::std;typedef pair<int, int> pii;// BFS,并用dp[]辅助保存已经得到最短步数的节点int N, K;int bfs(void) { if (N >=..._poj3278 c语言

随便推点

什么是ECC?ECC 和 RSA 之间有何区别?_ecc和rsa-程序员宅基地

文章浏览阅读1.1k次,点赞30次,收藏18次。椭圆曲线密码学 (ECC) 是一种基于椭圆曲线数学的公开密钥加密算法。它提供了一种执行。继续阅读,进一步了解椭圆曲线密码学,以及为何它被认为是最安全的加密形式。_ecc和rsa

基于Springboot的摄影分享网站系统(有报告)。Javaee项目,springboot项目。-程序员宅基地

文章浏览阅读534次,点赞11次,收藏11次。基于Springboot的摄影分享网站系统(有报告)。Javaee项目,springboot项目。数据库作为系统数据储存平台,实现了基于B/S结构的Web系统。界面简洁,操作简单。采用M(model)V(view)C(controller)三层体系结构,通过。

python读取sav文件_Numpy中数据的常用的保存与读取方法-程序员宅基地

文章浏览阅读462次。小书匠 深度学习文章目录:在经常性读取大量的数值文件时(比如深度学习训练数据),可以考虑现将数据存储为Numpy格式,然后直接使用Numpy去读取,速度相比为转化前快很多.下面就常用的保存数据到二进制文件和保存数据到文本文件进行介绍:1.保存为二进制文件(.npy/.npz)保存一个数组到一个二进制的文件中,保存格式是.npy参数介绍numpy.save(file, arr, allow_pick..._python sav

Java学习之日撸代码300行(61-70天,决策树与集成学习)_java300行 密度-程序员宅基地

文章浏览阅读321次。原博文:minfanphd任务计划第61天:决策树 (1. 准备工作)第61天:决策树 (1. 准备工作)决策树是最经典的机器学习算法. 其实我不想在后面加上"之一". 它有非常好的可解释性.数据仅有一份. 分裂后的数据子集仅需要保存 availableInstances 和 availableAttributes 两个数组.两个构造方法, 一个读入文件获得根节点, 另一个建立根据数据分裂的获得.判断数据集是否纯, 即所有的类标签是否相同, 如果是就不用分裂了.每个节点 (包括非叶节点) 都_java300行 密度

通达OA 与中控考勤机同步 最优http方案 附源码_通达oa连接中控考勤-程序员宅基地

文章浏览阅读2.1w次,点赞3次,收藏9次。中控考勤机软件可以将考勤机记录实时下载到本地数据库里, 很让人恼怒的是考勤机软件经常与设备断开连接,断开还不会自动重连, 可考前太差了,之前的几种方案也都无从谈起了。 苦思之后,想起直接用考勤机ip访问有web页面。所以有了上面的代码。跨过考勤机软件。只要你的考勤机是中控系列并且能够使用考勤机IP打开web界面就可以使用下面方法,稳定、高效,强烈推荐!使用方法:1, 将代码总 19_通达oa连接中控考勤

VT调试器 X64_vt调试是用什么语言写的-程序员宅基地

文章浏览阅读7.6k次,点赞2次,收藏10次。想了很久还是发上来吧,烂在硬盘里面没用,共享既是进步~前排感谢在我学习Intel-VT技术困难的时候各位朋友的帮助Tesla.Angela有人吗?cvcvxkviphacksxppKalong 以及国外友人asamy以上排名不分先后这份代码在WIN7 64 打了补丁的情况下能正常工作 不打补丁需要对THREAD的结构体做个修改 才可以正常运行代码部分:这_vt调试是用什么语言写的

推荐文章

热门文章

相关标签