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
@Configurationclass of typeWebMvcConfigurerbut without@EnableWebMvc. If you wish to provide custom instances ofRequestMappingHandlerMapping,RequestMappingHandlerAdapter, orExceptionHandlerExceptionResolver, you can declare aWebMvcRegistrationsAdapterinstance to provide such components.If you want to take complete control of Spring MVC, you can add your own
@Configurationannotated with@EnableWebMvc.
翻译:
如果你想要保持Spring Boot 的一些默认MVC特征,同时又想自定义一些MVC配置(包括:拦截器,格式化器, 视图控制器、消息转换器 等等),你应该让一个类实现
WebMvcConfigurer,并且添加@Configuration注解,但是千万不要加@EnableWebMvc注解。如果你想要自定义HandlerMapping、HandlerAdapter、ExceptionResolver等组件,你可以创建一个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)

浙公网安备 33010602011771号