SpringBoot实践

在数据库中引入一张数据表tb_user

CREATE TABLE `tb_user` (
	`id` int ( 11 ) NOT NULL,
	`username` varchar ( 10 ) DEFAULT NULL,
	`password` varchar ( 100 ) DEFAULT NULL,
PRIMARY KEY ( `id` ) 
) ENGINE = InnoDB DEFAULT CHARSET = utf8;

一、Lombok

//官网介绍
Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.
Never write another getter or equals method again, with one annotation your class has a fully featured builder, Automate your logging variables, and much more.
Project Lombok是一个java库,可以自动插入编辑器并构建工具,为您的java增添色彩。
永远不要再写另一个getter或equals方法,使用一个注释,您的类具有一个功能齐全的构建器,自动化您的日志记录变量等等。

1.1、导入pom依赖

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

1.2、常用注解介绍

        @Data注解在类上,会为类的所有属性自动生成setter/getter、equals、canEqual、hashCode、toString方法.

        @Getter/@Setter注解,此注解在属性上,可以为相应的属性自动生成Getter/Setter方法

        @ToString注解,Lombok会生成一个toString()方法,默认情况下,会输出类名、所有属性,用逗号来分割。

二、整合SpringMVC

2.1、修改默认配置,在application.yaml中修改

#端口修改
server:
  port: 80
#日志级别修改
logging:
  level:
    cn.waggag: debug
    org.springframework: debug
#访问路径修改
spring:
  mvc:
    servlet:
      path: /

2.2、静态资源的访问(默认存放的位置)

三、配置Spring

spring中的jdbc连接和事务是配置中的重要一环,在SpringBoot中该如何处理呢?答案是不需要处理,我们只要找到SpringBoot提供的启动器即可:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
​​​​​​​<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

至于事务,SpringBoot中通过注解来控制。就是我们熟知的@Transactional

3.1、数据库连接池四大参数的配置

  #数据库连接4大参数
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/springboot
    username: waggag
    password: 225514

3.2、使用Druid数据库连接池,pom文件中使用Druid官方提供的启动器

<!-- Druid连接池 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.1.6</version>
</dependency>
#初始化连接数
spring.datasource.druid.initial-size=1
#最小空闲连接
spring.datasource.druid.min-idle=1
#最大活动连接
spring.datasource.druid.max-active=20
#获取连接时测试是否可用
spring.datasource.druid.test-on-borrow=true
#监控页面启动
spring.datasource.druid.stat-view-servlet.allow=true

3.3、添加拦截器

拦截器也是我们经常需要使用的,在SpringBoot中该如何配置呢?

拦截器不是一个普通属性,而是一个类,所以就要用到java配置方式了。在SpringBoot官方文档中有这么一段说明:

If you want to keep Spring Boot MVC features and you want to add additional MVC configuration (interceptors, formatters, view controllers, and other features), you can add your own @Configuration class of type WebMvcConfigurer but without @EnableWebMvc. If you wish to provide custom instances of RequestMappingHandlerMapping, RequestMappingHandlerAdapter, or ExceptionHandlerExceptionResolver, you can declare a WebMvcRegistrationsAdapter instance to provide such components.

If you want to take complete control of Spring MVC, you can add your own @Configuration annotated with @EnableWebMvc.

翻译:

如果你想要保持Spring Boot 的一些默认MVC特征,同时又想自定义一些MVC配置(包括:拦截器,格式化器, 视图控制器、消息转换器 等等),你应该让一个类实现WebMvcConfigurer,并且添加@Configuration注解,但是千万不要@EnableWebMvc注解。如果你想要自定义HandlerMappingHandlerAdapterExceptionResolver等组件,你可以创建一个WebMvcRegistrationsAdapter实例 来提供以上组件。

如果你想要完全自定义SpringMVC,不保留SpringBoot提供的一切特征,你可以自己定义类并且添加@Configuration注解和@EnableWebMvc注解

总结:通过实现WebMvcConfigurer并添加@Configuration注解来实现自定义部分SpringMvc配置。

3.3.1、自定义一个拦截器

package cn.waggag.interceptor;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * @description:
 * @author: waggag
 * @time: 2019/7/26 19:07
 * @Company http://www.waggag.cn
 */
@Slf4j
public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        log.debug("preHandle method is now running!");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) {
        log.debug("postHandle method is now running!");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        log.debug("afterCompletion method is now running!");
    }
}

3.3.2、 定义配置类,注册拦截器

package cn.waggag.config;

import cn.waggag.interceptor.MyInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * @description: 拦截器注解来实现SpringMVC的配置
 * @author: waggag
 * @time: 2019/7/26 19:10
 * @Company http://www.waggag.cn
 */
@Configuration
public class MvcConfig implements WebMvcConfigurer {
        /**
         * 通过@Bean注解,将我们定义的拦截器注册到Spring容器
         */
        @Bean
        public MyInterceptor loginInterceptor(){
            return new MyInterceptor();
        }

        /**
         * 重写接口中的addInterceptors方法,添加自定义拦截器
         */
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            // 通过registry来注册拦截器,通过addPathPatterns来添加拦截路径
            registry.addInterceptor(this.loginInterceptor()).addPathPatterns("/**");
        }
}

四、整合Mybatis

4.1、mybatis

SpringBoot官方并没有提供Mybatis的启动器,Mybatis官网自己实现了:

<!--mybatis -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.0</version>
</dependency>
#配置,基本没有需要配置的:
# mybatis 别名扫描
mybatis.type-aliases-package=com.heima.pojo
# mapper.xml文件位置,如果没有映射文件,请注释掉
mybatis.mapper-locations=classpath:mappers/*.xml

需要注意,这里没有配置mapper接口扫描包,因此我们需要给每一个Mapper接口添加@Mapper注解,才能被识别。

package cn.waggag.mapper;
import org.apache.ibatis.annotations.Mapper;
/**
 * @description:
 * @author: waggag
 * @time: 2019/7/26 18:59
 * @Company http://www.waggag.cn
 */
@Mapper
public interface UserMapper{

}

4.2、通用mapper

通用Mapper都可以极大的方便开发人员。可以随意的按照自己的需要选择通用方法,还可以很方便的开发自己的通用方法。通用Mapper的作者也为自己的插件编写了启动器,我们直接引入即可:

<!-- 通用mapper -->
<dependency>
    <groupId>tk.mybatis</groupId>
    <artifactId>mapper-spring-boot-starter</artifactId>
    <version>2.1.5</version>
</dependency>

不需要做任何配置就可以使用了。

实体类的配置

package cn.waggag.domain;

import lombok.Data;
import tk.mybatis.mapper.annotation.KeySql;

import javax.persistence.Id;
import javax.persistence.Table;

/**
 * @description:
 * @author: waggag
 * @time: 2019/7/26 17:22
 * @Company http://www.waggag.cn
 */
@Data
//映射具体的表名
@Table(name = "tb_user")
public class User {
    /*指定主键和主键自增*/
    @Id
    @KeySql(useGeneratedKeys = true)
    private int id;
    private String username;
    private String password;
}
package cn.waggag.mapper;

import cn.waggag.domain.User;
import org.apache.ibatis.annotations.Mapper;

/**
 * @description:
 * @author: waggag
 * @time: 2019/7/26 18:59
 * @Company http://www.waggag.cn
 */
@Mapper
public interface UserMapper extends tk.mybatis.mapper.common.Mapper<User>{

}

测试通用mapper

package cn.waggag.mapper;

import cn.waggag.domain.User;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.List;


@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTest {
    @Autowired
    private UserMapper mapper;

    @Test
    public void testQuery(){
        List<User> userList = mapper.selectAll();
        System.out.println(userList.get(0));
    }
    
}

Demo链接: https://share.weiyun.com/5f7Nd7R (密码:Up2w)

posted @ 2019-07-26 20:11  王港  阅读(86)  评论(0)    收藏  举报