• 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-springbootsrc estjavacomatyycserviceUserServiceTest.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

      测试代码结构如:

  • 相关阅读:
    图解CSS3----1-关系选择器
    HTML5----热区(在图片img上第一超链接选区)
    Javascript----练习二(运算符)
    Javascript----练习一(变量)
    PHP表单
    maven
    Docker
    PHP字符串
    面向对象思想的核心概念
    虚方法
  • 原文地址:https://www.cnblogs.com/yycstart/p/13776011.html
Copyright © 2020-2023  润新知