1---------修改tomcat端口
2---------配置静态资源
3---------添加springmvc拦截器
4---------整合事务和数据库连接池
5---------整合mybatis
6---------整合Junit
我们创建了一个基本的springboot工程后,要进一步的整合其他内容,首先我们先来看看springmvc端口和静态资源
1.我们先来尝试修改tomcat端口为80,将以下内容加入到resources目录下的application.yml文件中,没有该文件就创建一个
#tomcat端口 server: port: 80
2.在springboot项目中静态资源访问的目录有以下的几个:
3.然后我们可以添加springmvc的拦截器
我们这里使用日志的方式来看拦截器的效果,但是需要加入lombok的依赖
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency>
logging:
level:
com.atyyc: debug
org.springframework: info
3.1编写拦截器(实现HandlerInterceptor)
@Slf4j public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { log.debug("这是MyInterceptor的preHandler方法。"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { log.debug("这是MyInterceptor的postHandle方法。"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { log.debug("这是MyInterceptor的afterCompletion方法。"); } }
目录结构如下:
3.2编写配置类实现 WebMvcConfigurer,在该类中添加各种组件;
@Configuration public class MvcConfig implements WebMvcConfigurer { //注册拦截器 @Bean public MyInterceptor myInterceptor(){ return new MyInterceptor(); } //添加拦截器到spring mvc拦截器链 @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(myInterceptor()).addPathPatterns("/*"); } }
4.springboot整合事务和连接池
目标
4.1事务配置
我们先添加依赖,事务相关的启动器依赖和mysql相关依赖到pom.xml文件中
<!-- jdbc启动依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <!-- mysql依赖--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.46</version> </dependency>
至于事务,SpringBoot中通过注解来控制。就是我们熟知的 @Transactional 使用的时候设置在对应的类或方法上即可。
4.2整合连接池
数据库连接池使用默认的hikari,在application.yml文件中添加如下配置
spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/springboot_test username: root password: 123
这里的数据库需要自己创建springboot_test,给出如下示例数据来测试:
DROP TABLE IF EXISTS `tb_user`; CREATE TABLE `tb_user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `user_name` varchar(100) DEFAULT NULL COMMENT '用户名', `password` varchar(100) DEFAULT NULL COMMENT '密码', `name` varchar(100) DEFAULT NULL COMMENT '姓名', `age` int(10) DEFAULT NULL COMMENT '年龄', `sex` tinyint(1) DEFAULT NULL COMMENT '性别,1男性,2女性', `birthday` date DEFAULT NULL COMMENT '出生日期', `note` varchar(255) DEFAULT NULL COMMENT '备注', `created` datetime DEFAULT NULL COMMENT '创建时间', `updated` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `username` (`user_name`) ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of tb_user -- ---------------------------- INSERT INTO `tb_user` VALUES ('1', 'zhangsan', '123456', '张三', '30', '1', '1964-08-08', '张三同学在学Java', '2014-09-19 16:56:04', '2014-09-21 11:24:59'); INSERT INTO `tb_user` VALUES ('2', 'lisi', '123456', '李四', '21', '2', '1995-01-01', '李四同学在传智学Java', '2014-09-19 16:56:04', '2014-09-19 16:56:04'); INSERT INTO `tb_user` VALUES ('3', 'wangwu', '123456', '王五', '22', '2', '1994-01-01', '王五同学在学php', '2014-09-19 16:56:04', '2014-09-19 16:56:04'); INSERT INTO `tb_user` VALUES ('4', 'zhangliu', '123456', '张六', '20', '1', '1996-09-01', '张六同学在传智播客学Java', '2014-09-19 16:56:04', '2014-09-19 16:56:04'); INSERT INTO `tb_user` VALUES ('5', 'lina', '123456', '李娜', '28', '1', '1988-01-01', '李娜同学在传智播客学Java', '2014-09-19 16:56:04', '2014-09-19 16:56:04'); INSERT INTO `tb_user` VALUES ('6', 'lilei', '123456', '李雷', '23', '1', '1993-08-08', '李雷同学在传智播客学Java', '2014-09-20 11:41:15', '2014-09-20 11:41:15'); INSERT INTO `tb_user` VALUES ('7', 'hanmeimei', '123456', '韩梅梅', '24', '2', '1992-08-08', '韩梅梅同学在传智播客学php', '2014-09-20 11:41:15', '2014-09-20 11:41:15'); INSERT INTO `tb_user` VALUES ('8', 'itcast', '123456', '传智播客', '21', '2', '2008-07-08', '传智播客搞IT教育', '2014-09-20 11:41:15', '2014-09-20 11:41:15'); INSERT INTO `tb_user` VALUES ('9', 'heima', '123456', '黑马', '18', '2', '2012-08-08', '黑马是传智播客高端品牌', '2014-09-20 11:41:15', '2014-09-20 11:41:15'); INSERT INTO `tb_user` VALUES ('10', 'linus', '123456', '林纳斯', '45', '2', '1971-08-08', '林纳斯搞了linux又搞git', '2014-09-20 11:41:15', '2014-09-20 11:41:15'); INSERT INTO `tb_user` VALUES ('11', 'leijun', '123456', '雷布斯', '33', '2', '1983-08-08', '小爱同学;are you ok', '2014-09-20 11:41:15', '2014-09-20 11:41:15'); INSERT INTO `tb_user` VALUES ('12', 'madaye', '123456', '马大爷', '46', '2', '1980-08-08', '马大爷花呗可以不还吗', '2014-09-20 11:41:15', '2014-09-20 11:41:15');
同时创建一个POJO的User类来与之对应
User.class
@Data public class User { private Long id; private String userName; private String password; private String name; private Integer age; private Integer sex; private Date birthday; private String note; private Date created; private Date updated; }
5.springboot整合mybatis
5.1添加mybatis依赖
<!--mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.0.1</version> </dependency>
5.2配置 application.yml ,常用配置如下:
# mybatis配置 mybatis: # 实体类别名包路径 type-aliases-package: com.atyyc.pojo # 映射文件路径 # mapper-locations: classpath:mappers/*.xml configuration: # 控制台输出执行sql log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
5.3配置Mapper扫描
需要注意,这里没有配置mapper接口扫描包,因此我们需要给每一个Mapper接口添加 @Mapper 注解,才能被识别
@Mapper public interface UserMapper { }
或者,我们也可以不加注解,而是在启动类上添加扫描包注解(推荐)
@SpringBootApplication @MapperScan("com.atyyc.mapper") public class Application { public static void main(String[] args) { //启动代码 SpringApplication.run(Application.class, args); } }
也可以进行通用mapper的整合,可以参考一下内容:
https://www.cnblogs.com/yycstart/p/13770299.html
配置好后,我们对HelloController类进行改造
@RestController public class HelloController { @Autowired private UserService userService; /** * 根据id获取用户 * @param id 用户id * @return 用户 */ @GetMapping("/user/{id}") public User queryById(@PathVariable Long id){ return userService.queryById(id); } }
然后通过浏览器进行测试,输入http://localhost/user/8,返回与id对应的数据则成功。
6.springboot整合Junit
6.1添加启动器依赖spring-boot-starter-test
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency>
6.2在测试包下编写测试类
在测试类上面必须要添加 @SpringBootTest 注解。
package com.atyyc.service; import com.atyyc.pojo.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.Date; @RunWith(SpringRunner.class) @SpringBootTest public class UserServiceTest { @Autowired private UserService userService; @Test public void queryById() { User user = userService.queryById(1L); System.out.println("user = " + user); } @Test public void saveUser() { User user = new User(); user.setUserName("test"); user.setName("test"); user.setPassword("123456"); user.setSex(1); user.setAge(20); user.setCreated(new Date()); userService.saveUser(user); } }
测试代码结构如: