springboot学习笔记(一)

springboot的介绍

  1. 样板化配置。springboot可以简化我项目的配置,让我们ssm项目的配置变得更加简单。
  2. 内置了tomcat服务器。以后的web项目不用部署了,直接运行main方法后,就启动了tomcat,tomcat里面就有了我们的项目。

搭建springboot的开发环境

  1. 配置jdk的版本,因为springboot2依赖了spring5,spring5又依赖了jdk1.8,所以我们的项目至少是jdk1.8.

    pom.xml文件中修改jdk的版本。

      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
      </properties>
    
  2. 引入依赖。引入一个就可以了。这一个就相当于spring的核心jar包和springmvc的相关jar包。

          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifa	ctId>spring-boot-starter-web</artifactId>
              <version>2.1.4.RELEASE</version>
          </dependency>
    
  3. 开发控制器类。跟以前一样。

    @Controller
    @RequestMapping("/user")
    public class UserController {
        @ResponseBody
        @RequestMapping("/test")
        public Map test(String name){
            System.out.println(name+"==================");
            //响应的数据
            Map map=new HashMap();
            map.put("a","zhangsan");
            map.put("b","20");
            return map;
        }
    }
    
  4. 写main方法启动tomcat。这时可以访问该项目了。

    注意:

    1. 类名必须叫Application
    2. 类必须建在com.baizhi。只有建在这个包里面,springboot才会扫描本包以及子包中的注解。
    3. 在这类上面添加注解。@SpringBootApplication
    @SpringBootApplication
    public class Application {
        public static void main(String[] args) {
            //启动springboot框架
            SpringApplication.run(Application.class,args);
        }
    }
    
  5. 测试运行。默认tomcat的端口号是8080,我们需要写配置文件对端口号进行修改。

    application.properties放在resources文件夹里面。

    #tomcat的端口号
    server.port=8989
    #项目的项目名,以后我们访问该项目http://ip:port/context-path
    server.servlet.context-path=/springboot_day1
    
    

    springboot的配置文件

    有两种配置方式。

    1. application.properties配置。
    2. application.yml配置。

    两者配置的内容是一样的。只是配置方式不一样。

    yml用来替换properties文件。两者都叫application,放的位置也一样都在resources里面。

    server:
      port: 8989
      servlet:
        context-path: /springboot_day1
    

    yml是通过缩进(两个空格)来指定关系的。

mybatis跟springboot集成

  1. 引入依赖。

    <!--mybatis跟springboot集成的依赖-->
        <dependency>
          <groupId>org.mybatis.spring.boot</groupId>
          <artifactId>mybatis-spring-boot-starter</artifactId>
          <version>1.3.2</version>
        </dependency>
        <!--mybatis要链接mysql数据库,mysql数据库的驱动-->
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.38</version>
        </dependency>
    
  2. 在application.yml里面配置数据源信息。

    #配置数据库的连接信息
    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/idea_day1?useUnicode=true&characterEncoding=utf8
        username: root
        password: 123456
        driver-class-name: com.mysql.jdbc.Driver
    #给实体起别名,设置映射文件的路径。
    mybatis:
      type-aliases-package: com.baizhi.entity
      mapper-locations: classpath:mapper/*.xml
    
  3. 写实体类,dao接口,dao的mapper文件。

    跟以前一样

  4. 在dao接口上面添加注解。

    @Mapper//这个注解是让springboot识别dao接口,自动生成dao的实现类,并让spring管理起来。

    让spring管理dao有两个注解可以选择:

    1. 在dao接口上面添加@Mapper,这种方式需要每个dao都添加。

    2. 在springboot的启动类上面扫描dao包。管理dao对象。

      @SpringBootApplication
      @MapperScan("com.baizhi.dao")//扫描dao包
      public class Application {
          public static void main(String[] args) {
              SpringApplication.run(Application.class,args);
          }
      }
      
  5. 测试dao。

    参考下一个步骤,跟junit集成。

springboot跟junit进行集成测试

  1. 引入依赖。

    <!--junit单元测试的依赖-->
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.12</version>
          <scope>test</scope>
        </dependency>
        <!--springboot做单元测试的依赖-->
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-test</artifactId>
          <version>2.1.4.RELEASE</version>
        </dependency>
    
  2. 在测试类上使用注解。@SpringBootTest

    @RunWith(SpringRunner.class)
    @SpringBootTest(classes = Application.class)
    public class TestDao {
        //飘红不影响使用
        @Autowired
        private StudentDao studentDao;
        @Test
        public void testSelectAll(){
            List<Student> students = studentDao.selectAll();
    
            students.forEach(System.out::println);
        }
        
    }
    

springboot和业务类的相关配置

业务类的作用控制事务,mybatis插件分页。

控制事务

  1. 我们可以在类上面添加注解。@Transactional来标注这个类 中所有的方法都开启事务。
  2. 我们可以在查询方法上面添加 @Transactional(readOnly=true)表示查询方法上面不使用回滚段以此来提高查询速度。
@Service
@Transactional//表示在当前类中所有的方法都要开启事务
public class StudentServiceImpl implements StudentService {
    @Autowired
    private StudentDao studentDao;
    @Transactional(readOnly = true)//查询方法的事务策略是只读
    @Override
    public List<Student> selectAll() {
        return studentDao.selectAll();
    }
    @Transactional(readOnly = true)
    @Override
    public PageInfo<Student> selectByPage(int curPage, int pageSize) {
        PageHelper.startPage(curPage,pageSize);
        List<Student> students = studentDao.selectAll();
        PageInfo<Student> pi=new PageInfo<>(students);
        return pi;
    }
}

使用mybatis的插件实现分页

  1. 引入mybatis插件依赖。跟以前的依赖不一样。
    <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper-spring-boot-starter</artifactId>
      <version>1.2.5</version>
    </dependency>
  1. 业务类的写法跟以前一样。

mybatis-plus跟springboot集成

lombok可以帮助我们生成实体类的get和set方法。我们需要在实体类上面添加注解@Data.使用lombok依赖后,我们的实体类没有显式写出get和set方法,这样我们写代码时,调用get和set方法会报错。我们需要在idea里面下载安装一个lombok的插件。

安装插件:idea的菜单file里面----》setting-----》plugin-----》搜索lombok

在这里插入图片描述

安装好插件后,idea需要重启。

具体步骤:

  1. 引入依赖。

     <!--springboot核心依赖-->
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
          <version>2.1.4.RELEASE</version>
        </dependency>
        <!--mybatis-plus跟springboot集成的依赖-->
        <dependency>
          <groupId>com.baomidou</groupId>
          <artifactId>mybatis-plus-boot-starter</artifactId>
          <version>3.1.2</version>
        </dependency>
        <!--mybatis要链接mysql数据库,mysql数据库的驱动-->
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.38</version>
        </dependency>
        <!--junit单元测试的依赖-->
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.12</version>
          <scope>test</scope>
        </dependency>
        <!--springboot做单元测试的依赖-->
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-test</artifactId>
          <version>2.1.4.RELEASE</version>
        </dependency>
        <!-- 简化实体类开发的一个依赖 -->
        <dependency>
          <groupId>org.projectlombok</groupId>
          <artifactId>lombok</artifactId>
          <version>1.18.0</version>
          <scope>provided</scope>
        </dependency>
    
  2. 在yml配置文件中修改mybatis的相关配置。

    #项目的项目名,以后我们访问该项目http://ip:port/context-path
    server:
      port: 8989
      servlet:
        context-path: /springboot_day102
    #配置数据库的连接信息
    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/idea_day1?useUnicode=true&characterEncoding=utf8
        username: root
        password: 123456
        driver-class-name: com.mysql.jdbc.Driver
    #给实体起别名,设置映射文件的路径。
    mybatis-plus:
      type-aliases-package: com.baizhi.entity
      mapper-locations: classpath:mapper/*.xml
    
  3. 在实体类中我们可以使用lombok,作用就是不用生成get和set方法了。

    import java.util.Date;
    @Data
    public class Student {
        private int id;
        private String name;
        private int age;
        private Date birth;
    }
    
  4. dao接口继承BaseMapper。

  5. 其他的mapper文件和业务类,控制器类跟以前一样。

springboot跟jsp的整合

默认在webapp里面的jsp不能访问到。springboot不推荐使用jsp作为表现层的页面。如果我们想让springboot和jsp在一块工作我们需要对springboot进行配置。

  1. 需要在maven里面安装springboot的插件。修改pom.xml文件。

    <!--pom文件中以前的插件可以删除,用jsp的插件替代-->
      <build>
        <finalName>springboot_day1</finalName>
        <!--引入jsp运行插件-->
        <plugins>
          <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <version>2.1.4.RELEASE</version>
            <!--使用热部署出现中文乱码解决方案-->
            <configuration>
              <fork>true</fork>
              <!--增加jvm参数-->
              <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
            </configuration>
          </plugin>
        </plugins>
      </build>
    

    注意事项:pom文件中以前的插件可以删除掉。这个标签不能放在依赖里面。

  2. 引入jsp需要的依赖。

        <!--整合jsp-->
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-tomcat</artifactId>
          <version>2.1.4.RELEASE</version>
        </dependency>
    
        <dependency>
          <groupId>org.apache.tomcat.embed</groupId>
          <artifactId>tomcat-embed-jasper</artifactId>
          <version>8.5.34</version>
        </dependency>
    
        <dependency>
          <groupId>jstl</groupId>
          <artifactId>jstl</artifactId>
          <version>1.2</version>
        </dependency>
    
  3. jsp要求热部署。需要在springboot进行配置。

    #设置jsp的热部署
    server.servlet.jsp.init-parameters.development=true
    

    在application.properties文件中配置。

  4. 测试。

在这里插入图片描述

使用jsp插件后,我们启动springboot框架时,就不在运行Application类中的主函数了。我们通过springboot的run插件运行springboot框架。

常见错误

  1. 使用spring-boot-maven-plugin插件后报错,报错信息:

    Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.2.1.RELEASE:run (default-cli) on project springboot_day102: Application finished with exit code: 1

    解决办法:先把jsp的热部署配置去除。jsp.init-parameters.development:true

  2. 在mybatis-plus里面使用pageHelper后报错的解决办法:

    NoClassDefFoundError: org/mybatis/logging/LoggerFactory

    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>1.2.5</version>
        <!--pageHelper跟mybatis-Plusjar包冲突,我们排除掉插件依赖的mybatis版本-->
        <exclusions>
            <exclusion>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    

    不同的idea版本查看错误的地方是不一样的。需要自己找一下。

  3. 端口号被占用 address is in use

    检查tomcat是否启动,idea里面检查,看看idea外部是否启动tomcat,到任务管理器里面关闭java.exe进程

jackson

jackson和fastjson都是json转换工具,这些工具可以将java对象转换为json字符串。我们在使用ajax技术的时候需要用到他。常见的转换工具:jackson,fastjson,gson

springboot里面默认使用的json转换工具是jackson。jackson和fastjson的用法基本一样。唯一的区别是常见的注解不一样。

springboot里面使用jackson设置日期属性常见方式有两种:

  1. 在实体类的属性上添加注解。优先级高。

    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date birth;
    
  2. 在yml配置文件中设置全局的日期格式。优先级低

    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/idea_day1?useUnicode=true&characterEncoding=utf8
        username: root
        password: 123456
        driver-class-name: com.mysql.jdbc.Driver
      jackson:
        date-format: yyyy-MM-dd
        time-zone: GMT+8
    

springboot实现文件上传

  1. 写jsp,跟以前一样。有三点:method,enctype,type=file

  2. 控制器。跟以前一样。

    @Controller
    @RequestMapping("/user")
    public class UserController {
        @Value("${imgPath}")//获取springboot配置文件中的变量,把配置文件中的变量赋值给该属性
        private String path;
        @RequestMapping("/upload")
        public String upload(MultipartFile headImg,String username) throws IOException {
    
            headImg.transferTo(new File(path,headImg.getOriginalFilename()));
            return "forward:/success.jsp";
        }
    }
    
    
  3. 把d盘普通文件夹部署到服务器上。

    #配置数据库的连接信息
    spring:
      datasource:
        url: jdbc:mysql://localhost:3306/idea_day1?useUnicode=true&characterEncoding=utf8
        username: root
        password: 123456
        driver-class-name: com.mysql.jdbc.Driver
      resources:
        static-locations: file:${imgPath}
      servlet:
        multipart:
          max-request-size: 3MB  #设置总的请求大小
          max-file-size: 2MB   #设置单个文件上传的大小
    #设置一个路径供配置文件和controller共用
    imgPath: d:\\testImg
    

上传后,通过浏览器访问的路径:

http://ip:port/appName/(testImg文件夹里面图片的名字)

mybatis-plus的代码生成器

mybatis-plus可以根据表生成我们的实体类,dao接口,mapper文件,业务接口,业务类,和一个空的控制器类。

  1. 引入代码生成器的依赖。

    <!--代码生成器的依赖-->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-generator</artifactId>
        <version>3.1.2</version>
    </dependency>
    <dependency>
        <groupId>org.freemarker</groupId>
        <artifactId>freemarker</artifactId>
        <version>2.3.30</version>
    </dependency>
    
  2. 写生成java代码(实体类,dao接口,mapper文件,业务接口,业务类)的代码。

在这里插入图片描述

这个界面可以设置代码生成到model里面。

在这里插入图片描述

  1. 生成后,代码生成器就没有用了。

springboot没有使用log4j记录日志,logback

springboot中是使用了logback来记录日志信息的。我们需要引入logback的配置文件放到resources文件夹里面。来打印执行的sql信息。信息的输出级别ERROR>WARN>INFO>DEBUG

mybatisPlus中的分页方法

mybatisPlus中自带了分页功能,那么我们就可以使用mybatisPlus中的分页替换PageHelper分页。

使用的步骤:

  1. 写配置类。com.baizhi.config 专门放置配置类。存放分页插件的配置类。

    //这是一个配置mybatisplus分页插件的类。
    /*
    * 替换之前的
    * <plugins>
    		<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
    	</plugins>
    * */
    @Configuration//该类是一个配置类
    public class MyBatisPlusPageInterceptor {
        @Bean  //<bean id="paginationInterceptor" class="com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor"/>
        public PaginationInterceptor paginationInterceptor() {
            return new PaginationInterceptor();
        }
    }
    
  2. 在测试类添加分页的测试方法。

    /*分页*/
        @Test
        public void testQuery3(){
            //第一个参数是当前页号,第二个参数是一页显示多少条数据
            Page<Student> page=new Page<>(1,3);
            //增加查询条件
            QueryWrapper<Student> qw=new QueryWrapper<>();
            qw.gt("age",20);
            //返回值里面存储了当前页的所有信息,等价于以前的PageInfo对象
            IPage<Student> p = studentService.page(page,qw);
            //获取当前页数据
            List<Student> records = p.getRecords();
            records.forEach(System.out::println);
        }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值