springboot的整合篇-springmvc,mybatis,数据库等

1---------修改tomcat端口

2---------配置静态资源

3---------添加springmvc拦截器

4---------整合事务和数据库连接池

5---------整合mybatis

6---------整合Junit

我们创建了一个基本的springboot工程后,要进一步的整合其他内容,首先我们先来看看springmvc端口和静态资源

1.我们先来尝试修改tomcat端口为80,将以下内容加入到resources目录下的application.yml文件中,没有该文件就创建一个

#tomcat端口
server:
  port: 80

2.在springboot项目中静态资源访问的目录有以下的几个:

 我们将资源放到这几个目录下,都是可以通过浏览器访问到的,需要注意的是,这里的resources目录并不是我们的项目中的resources目录,需要单独创建出来,我们尝试将图片Koala.jpg放到classpath:/static/目录下,然后通过浏览器进行访问http://localhost/Koala.jpg,出现图片访问成功。

3.然后我们可以添加springmvc的拦截器

我们这里使用日志的方式来看拦截器的效果,但是需要加入lombok的依赖

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

虽然默认配置已经可以使用SpringMVC了,不过我们有时候需要进行自定义配置。 可以在 application.yml 文件中配置日志级别控制:

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方法。");

    }
}
View Code

目录结构如下: 

 

   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("/*");
    }
}
View Code

4.springboot整合事务和连接池

  目标:配置Spring Boot自带默认的hikari数据库连接池和使用@Transactional注解进行事务配置

  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>
View Code

  至于事务,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');
View Code

  同时创建一个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;
}
View Code

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 注解。

编写测试类 yyc-springboot\src\test\java\com\atyyc\service\UserServiceTest.java

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);
    }
}
View Code

  测试代码结构如:

 

posted @ 2020-10-06 23:48  yyc串  阅读(212)  评论(0编辑  收藏  举报