springboot框架入门

一. springboot简介

1.什么是Spring Boot?

Spring Boot 是由 Pivotal 团队提供的全新框架。Spring Boot 是所有基于 Spring Framework 5.0 开发的项目的起点。Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你的配置文件。

设计目的: 用来简化新 Spring 应用的初始搭建以及开发过程。

从最根本上来讲,Spring Boot 就是一些库的集合,它能够被任意项目的构建系统所使用。它使用 “习惯优于配置” (项目中存在大量的配置,此外还内置一个习惯性的配置)的理念让你的项目快速运行起来。用大佬的话来理解,就是 spring boot 其实不是什么新的框架,它默认配置了很多框架的使用方式,就像 maven 整合了所有的 jar 包,spring boot 整合了所有的框架,总结一下及几点:
(1)为所有 Spring 开发提供一个更快更广泛的入门体验。
(2)零配置。无冗余代码生成和XML 强制配置,遵循“约定大于配置” 。
(3)集成了大量常用的第三方库的配置, Spring Boot 应用为这些第三方库提供了几乎可以零配置的开箱即用的能力。
(4)提供一系列大型项目常用的非功能性特征,如嵌入式服务器、安全性、度量、运行状况检查、外部化配置等。
(5)Spring Boot 不是Spring 的替代者,Spring 框架是通过 IOC 机制来管理 Bean 的。Spring Boot 依赖 Spring 框架来管理对象的依赖。Spring Boot 并不是Spring 的精简版本,而是为使用 Spring 做好各种产品级准备

2.Spring Boot 在应用中的角色
Spring Boot 是基于 Spring Framework 来构建的,Spring Framework 是一种 J2EE 的框架 Spring Boot 是一种快速构建 Spring 应用 Spring Cloud 是构建 Spring Boot 分布式环境,也就是常说的云应用 Spring Boot 中流砥柱,承上启下

二、使用 idea 快速搭建 Spring Boot

  1. 新建 Spring Initializr 项目:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  2. pom.xml导包
 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </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>
        </dependency>
        <!-- 分页插件 -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.3.0</version>
        </dependency>
        <!-- alibaba的druid数据库连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.9</version>
        </dependency>
  1. 配置application.yml文件
server:
  port: 8081  #端口
spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    druid:
      driver-class-name: com.mysql.cj.jdbc.Driver
      url: jdbc:mysql://127.0.0.1:3306/springboot?  useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
      username: root
      password: root
mybatis:
  mapper-locations: classpath:mapper/*Mapper.xml
  type-aliases-package: com.luo.model  

pagehelper:
  helperDialect: mysql
  reasonable: true #分页参数合理化,默认值为false
  supportMethodsArguments: true #支持通过Mapper接口参数来传递分页参数
  params: count=countSql
  ret
  1. 配置generatorConfig.xml文件 自动生成基础项目框架
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration
        PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <!-- 链接数据库的jar包的完整路径,一定要注意跟自己的仓库路径一致 ,注意修改  -->
    <classPathEntry
            location="C:\Users\LUO\.m2\repository\mysql\mysql-connector-java\5.1.47\mysql-connector-java-5.1.47.jar"></classPathEntry>
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!--数据库链接URL,用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
                        connectionURL="jdbc:mysql://127.0.0.1:3306/springboot?useUnicode=true&amp;characterEncoding=UTF-8&amp;allowMultiQueries=true"
                        userId="root" password="root">
        </jdbcConnection>
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!-- 生成模型的包名和位置-->
        <javaModelGenerator targetPackage="com.luo.model" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!-- 生成映射文件的包名和位置-->
        <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!-- 生成DAO的包名和位置-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.luo.mapper" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
        <table tableName="user" domainObjectName="User" enableCountByExample="false" enableUpdateByExample="false"
               enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false"></table>
    </context>
</generatorConfiguration>

  1. 在Application.java文件内配置

@MapperScan(“com.luo.mapper”) 注解
把dao层加入IOC容器,创建出此类对象。

  1. 点击运行插件 快速生成基本框架
    在这里插入图片描述
  2. 自定义banner.txt文件【可跳过】

内容可以随便输入 当运行项目时,当有自定义文件时,系统会自动调用此文件,没有就会执行默认文件。

  1. 配置完毕 ,执行在这里插入图片描述
    在这里插入图片描述

三、拦截器

【我的Interceptor】

public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println(">>>MyInterceptor2>>>>>>>在请求处理之前进行调用(Controller方法调用之前)");

        return true;// 只有返回true才会继续向下执行,返回false取消当前请求
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
                           ModelAndView modelAndView) throws Exception {
        System.out.println(">>>MyInterceptor2>>>>>>>请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        System.out.println(">>>MyInterceptor2>>>>>>>在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)");
    }

}

【我的Config】

@Configuration
public class MyConfig implements WebMvcConfigurer {
	@Bean
	public MyInterceptor interceptor(){
		return   new MyInterceptor();
	}

	@Override
	public void addInterceptors(InterceptorRegistry registry) {
		// 多个拦截器组成一个拦截器链
		// addPathPatterns 用于添加拦截规则
		// excludePathPatterns 用户排除拦截
		registry.addInterceptor(interceptor()).addPathPatterns("/**");
	}
}

四、(input)图片上传+预览

input方式上传
前端页面

     <form action=""
                              method="post"
                              class="form form-horizontal"
                              enctype="multipart/form-data"
                              id="form-user-add" style="width: 300px;height: 500px;margin:300px auto">
                            <div class="form-group">
                                <img src="" id="img0" style="width: 20rem;height: 15rem;">
                                <input type="file" name="file0" id="file0" multiple="multiple" />
                                <label for="file0" class='btn btn-success' >上传</label>
                            </div>
                            <div class="form-group">
                                <label for="tInfo">备注</label>
                                <input type="text" class="form-control" id="tInfo" placeholder="备注">
                            </div>
                            <button id="aa" type="submit" class="btn btn-primary">提交</button>
                        </form>
  #file0 {
                opacity: 0;
            }
<script type="text/javascript">
    $("#file0").change(function(){
        var objUrl = getObjectURL(this.files[0]) ;//获取文件信息
        console.log("objUrl = "+objUrl);
        if (objUrl) {
            $("#img0").attr("src", objUrl);
        }
    }) ;
    function getObjectURL(file) {
        console.log(">>>"+file)
        var url = null;
        if (window.createObjectURL!=undefined) {
            url = window.createObjectURL(file) ;
        } else if (window.URL!=undefined) { // mozilla(firefox)
            url = window.URL.createObjectURL(file) ;
        } else if (window.webkitURL!=undefined) { // webkit or chrome
            url = window.webkitURL.createObjectURL(file) ;
        }
        return url ;
    }
    $("#aa").on("click",function () {
        var formData = new FormData();
        formData.append('file', $('#file0')[0].files[0]);
        formData.append('tInfo',$('#tInfo').val());
        $.ajax({
            type:'post',
            dataType:'json',
            data:formData,
            cache: false, //上传文件不需要缓存
            url:'/upload/add',
            processData: false, // 告诉jQuery不要去处理发送的数据
            contentType: false, // 告诉jQuery不要去设置Content-Type请求头
            success:function(data){
                if(data.success=='ok'){
                    $.messager.alert('提示', '添加数据成功!');
                    window.location.reload();
                }else{
                    $.messager.alert('提示', '添加数据失败!');
                }
            }
        })

    })

</script>

后台页面

	@ResponseBody
    @RequestMapping("add")
    public String add(@RequestParam MultipartFile file, String tInfo) throws FileNotFoundException {
    //上传图片到images
        String staticPath= ResourceUtils.getURL("classpath:").getPath() + "static";
        System.out.println(">>>>>"+staticPath);
        String fileName = file.getOriginalFilename();  //获取文件名
        // 图片存储目录及图片名称
        String url_path = "images" + File.separator + fileName;
        //图片保存路径
        String savePath = staticPath + File.separator + url_path;
        //上传到本地
        String savePath1=savePath.replace("target/classes/","src/main/resources/");
        System.out.println("图片保存地址:"+savePath);
        // 访问路径=静态资源路径+文件目录路径
        String visitPath ="static/" + url_path;
        System.out.println("图片访问uri:"+visitPath);
        File saveFile = new File(savePath);
        File saveFile2 = new File(savePath1);
        if (!saveFile.exists()){
            saveFile.mkdirs();
        }
        if (!saveFile2.exists()){
            saveFile2.mkdirs();
        }
        try {
            file.transferTo(saveFile2);//这里需要关闭文件流才能执行下一句  我不会
           /* file.transferTo(saveFile); */ //将临时存储的文件移动到真实存储路径下
        } catch (IOException e) {
            e.printStackTrace();
        }
        }}

随时更新~~~

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值