【编程不良人】快速入门SpringBoot学习笔记03--整合MyBatis、本地测试、热部署工具、...

【编程不良人】快速入门SpringBoot学习笔记03--整合MyBatis、本地测试、热部署工具、...,第1张

1. 整合Mybatis框架

配套视频:【编程不良人】2021年SpringBoot最新最全教程_哔哩哔哩_bilibili

【编程不良人】2021年SpringBoot最新最全教程_哔哩哔哩_bilibili

  
  springboot 微框架 = spring 工厂 + springmvc 控制器   微:快速开发框架  通过遵守默认约定  简化项目中样板化配置
  数据库访问框架:  hibernate  jpa  mybatis(框架)
  ​
  回顾: spring框架如何整合mybatis?
  1.引入依赖
      spring 相关
      mysql 相关 驱动 数据源
      mybatis 相关  mybatis核心jar  mybatis和spring框架整合
  ​
  2.spring.xml
      a.开启注解扫描
      b.创建数据源对象
          注入 指定使用那种数据源类型  注入dirverClassName  注入url 注入username password
      c.创建sqlSessionFactory
          注入 数据源  注入mapper配置文件位置  注入实体别名包
      d.创建Dao对象
          注入SqlSessionFactory 以及Dao接口所在包
      e.创建事务管理器      DataSourceTranacationManager 
          注入 数据源对象   
      f.在业务层组件上加入事务注解 @Transacational
          
  ​
  3.测试
      1).建表
      2).开发实体类
      3).开发DAO接口
      4).开发Mapper配置文件
      5).开发Service接口
      6).开发ServiceImpl实现类
      7).测试ServiceImpl
  ===========================================================================
  springboot框架中如何整合mybatis框架?
  1.引入依赖
      spring-boot-stater-web
      mysql相关 mysql驱动  druid数据源
      mybatis相关的 (mybatis-spring-boot-stater) 依赖 (mybatis mybatis-spring)
  ​
  2.书写配置
      a.开启注解扫描 @SpringBootApplication  @ComponentScan  省略
      b.创建数据源  
          1.指定数据源类型
          2.指定数据库驱动
          3.指定url
          4.指定username
          5.指定password
      c.创建SqlSessionFactory
          1.指定mapper配置文件位置
          2.指定实体所在包位置 起别名
      d.创建DAO
          1.指定DAO接口所在包
      e.创建事务管理器  开启注解式事务生效  省略
      
  3.测试
      1).建表
      2).开发实体类
      3).开发DAO接口
      4).开发Mapper配置文件
      5).开发Service接口
      6).开发ServiceImpl实现类
      7).测试ServiceImpl
  ​

1.1 引入依赖
  
  
  
      com.alibaba
      druid
      1.2.4
  
  
      mysql
      mysql-connector-java
      5.1.38
  
  
      org.mybatis.spring.boot
      mybatis-spring-boot-starter
      2.1.4
  
1.2 application.yml编写相关配置
  
  # 公共配置
  server:
    port: 8888 # 修改内置tomcat端口号
    servlet:
      context-path: /spring-boot-day03
  ​
  # 数据源相关配置
  spring:
    datasource:
      type: com.alibaba.druid.pool.DruidDataSource # 指定连接池类型
      driver-class-name: com.mysql.jdbc.Driver # mysql 5.x版本驱动
      # driver-class-name: com.mysql.cj.jdbc.Driver # mysql 8.x版本驱动
      url: jdbc:mysql://localhost:3306/bootssm?characterEncoding=UTF-8 # 指定url
      username: root # 指定用户名和密码
      password: 123456 # 指定密码
      
  # mybatis相关配置
  mybatis:
    mapper-locations: classpath:com/study/mapper/*.xml # 指定mapper配置文件位置
    type-aliases-package: com.study.entity # 指定实体类的包名,默认别名:类名或类名首字母小写两种
  ​
1.3 启动类添加注解扫描
  
  package com.study;
  ​
  import org.apache.ibatis.annotations.Mapper;
  import org.mybatis.spring.annotation.MapperScan;
  import org.springframework.boot.SpringApplication;
  import org.springframework.boot.autoconfigure.SpringBootApplication;
  ​
  //入口类加入如下配置:
  @SpringBootApplication
  /**
   * @Mapper 注解
   * 修饰范围:只能放在DAO接口上
   * 作用:用来在工厂中创建DAO对象
   */
  //@Mapper
  /**
   * @MapperScan 注解
   * 修饰范围:用在类上
   * 作用:用来扫描DAO接口所在包,同时将所有DAO接口在工厂中创建对象
   */
  @MapperScan("com.study.dao")
  public class SpringBootDay03Application {
      public static void main(String[] args) {
          SpringApplication.run(SpringBootDay03Application.class, args);
      }
  }
  ​

1.4 建表
  
  CREATE DATABASE IF NOT EXISTS bootssm;
  USER bootssm;
  CREATE TABLE IF NOT EXISTS t_user(
   id INT(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
   name VARCHAR(40) COMMENT '姓名', 
   birthday TIMESTAMP COMMENT '生日',
   salary DOUBLE(10,2) COMMENT '工资',
   PRIMARY KEY(id)
  )ENGINE=INNODB DEFAULT CHARSET=utf8mb4;

1.5 开发实体类

User

package com.study.entity;

import java.util.Date;

/**
 * @ClassName User
 * @Description TODO
 * @Author Jiangnan Cui
 * @Date 2022/5/3 10:02
 * @Version 1.0
 */
public class User {
    private Integer id;
    private String name;
    private Date birthday;
    private Double salary;

    public User() {
    }

    public User(Integer id, String name, Date birthday, Double salary) {
        this.id = id;
        this.name = name;
        this.birthday = birthday;
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", birthday=" + birthday +
                ", salary=" + salary +
                '}';
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public Double getSalary() {
        return salary;
    }

    public void setSalary(Double salary) {
        this.salary = salary;
    }
}



1.6 开发DAO接口以及Mapper映射文件

UserDAO

  
  package com.study.dao;
  ​
  import com.study.entity.User;
  ​
  import java.util.List;
  ​
  /**
   * @ClassName UserDAO
   * @Description TODO
   * @Author Jiangnan Cui
   * @Date 2022/5/3 10:04
   * @Version 1.0
   */
  public interface UserDAO {
      /**
       * @MethodName findAll
       * @Description 查询所有用户信息
       * @return: java.util.List
       * @Author Jiangnan Cui
       * @Date 2022/5/3 10:04
       */
      List findAll();
  ​
      /**
       * @MethodName save
       * @Description 保存用户信息
       * @param: user
       * @Author Jiangnan Cui
       * @Date 2022/5/3 10:05
       */
      void save(User user);
  }
  ​

UserDAOMapper

  
      
      
  ​
      
      
          insert into t_user values(#{id},#{name},#{birthday},#{salary})
      

1.7 开发Service以及实现类
  package com.study.service;
  ​
  import com.study.entity.User;
  ​
  import java.util.List;
  ​
  /**
   * @ClassName UserService
   * @Description TODO
   * @Author Jiangnan Cui
   * @Date 2022/5/3 10:06
   * @Version 1.0
   */
  public interface UserService {
      /**
       * @MethodName findAll
       * @Description 查询所有用户信息
       * @return: java.util.List
       * @Author Jiangnan Cui
       * @Date 2022/5/3 10:04
       */
      List findAll();
  ​
      /**
       * @MethodName save
       * @Description 保存用户信息
       * @param: user
       * @Author Jiangnan Cui
       * @Date 2022/5/3 10:05
       */
      void save(User user);
  }
  ​

UserServiceImpl

  
  package com.study.service;
  ​
  import com.study.dao.UserDAO;
  import com.study.entity.User;
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.stereotype.Service;
  import org.springframework.transaction.annotation.Propagation;
  import org.springframework.transaction.annotation.Transactional;
  ​
  import java.util.List;
  ​
  /**
   * @ClassName UserServiceImpl
   * @Description TODO
   * @Author Jiangnan Cui
   * @Date 2022/5/3 10:10
   * @Version 1.0
   */
  @Service("userService")
  @Transactional
  public class UserServiceImpl implements UserService{
      private UserDAO userDAO;
  ​
      @Autowired
      public UserServiceImpl(UserDAO userDAO) {
          this.userDAO = userDAO;
      }
  ​
      @Override
      @Transactional(propagation = Propagation.SUPPORTS)
      public List findAll() {
          return userDAO.findAll();
      }
  ​
      @Override
      public void save(User user) {
          userDAO.save(user);
      }
  }
  ​

1.8 开发Controller

UserController

  package com.study.controller;
  ​
  import com.study.entity.User;
  import com.study.service.UserService;
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.web.bind.annotation.RequestMapping;
  import org.springframework.web.bind.annotation.RestController;
  ​
  import java.util.List;
  ​
  /**
   * @ClassName UserController
   * @Description TODO
   * @Author Jiangnan Cui
   * @Date 2022/5/3 10:12
   * @Version 1.0
   */
  @RestController
  @RequestMapping("user")
  public class UserController {
      private UserService userService;
  ​
      @Autowired
      public UserController(UserService userService) {
          this.userService = userService;
      }
  ​
      /**
       * @MethodName findAll
       * @Description 查询所有用户信息
       * @return: java.util.List
       * @Author Jiangnan Cui
       * @Date 2022/5/3 10:14
       */
      @RequestMapping("findAll")
      public List findAll(){
          return userService.findAll();
      }
  ​
      /**
       * @MethodName save
       * @Description 添加用户信息
       * @param: user
       * @Author Jiangnan Cui
       * @Date 2022/5/3 10:15
       */
      @RequestMapping("save")
      public void save(User user){
          userService.save(user);
      }
  }
  ​

1.9 启动项目访问测试

查询所有用户访问地址:http://localhost:8888/spring-boot-day03/user/findAll

添加用户信息访问地址:http://localhost:8888/spring-boot-day03/user/save?name=赵六&birthday=2013/08/04&salary=2800

1.10 @MapperScan和@Mapper注解区别

配套视频:【编程不良人】2021年SpringBoot最新最全教程_哔哩哔哩_bilibili

  /**
   * @Mapper 注解
   * 修饰范围:只能放在DAO接口上,每个接口都需要放置
   * 作用:用来在工厂中创建DAO对象
   */
  ​
  /**
   * @MapperScan 注解 推荐使用
   * 修饰范围:用在类上,可以一次性扫描所有DAO接口所在包中的接口
   * 作用:用来扫描DAO接口所在包,同时将所有DAO接口在工厂中创建对象
   */

2. 本地测试

配套视频:【编程不良人】2021年SpringBoot最新最全教程_哔哩哔哩_bilibili

       往往在开发过程中业务代码课程非常复杂频繁启动服务器测试,非常麻烦!这个时候使用本地测试就是一个很好的解决方案,springboot也提供了本地测试解决方案!

  spring中本地测试
  1.启动工厂
      ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
  2.从工厂中获取指定对象
      UserDao userDao = context.getBean("userDao");
  3.调用方法
      userDao.xxx(参数);
  ​
  ​
  springboot框架中完成本地测试?
  springboot = spring + springmvc
  1.引入结合junit和springboot依赖
      
          org.springframework.boot
          spring-boot-starter-test
          
          test
      
  2.启动springboot应用才能spring工厂启动,注入测试对象
      @SpringBootTest 
      修饰范围: 用在类上
      作用:    在这个类实例化过程中启动springboot应用  

2.1 引入测试依赖
  
  
  
      org.springframework.boot
      spring-boot-starter-test
       test
  

2.2 编写测试类
  • @SpringBootTest

    • 修饰范围:用在类上

    • 作用:用来启动本地Spring环境

项目子带的测试类XxxApplication

  
  package com.study;
  ​
  import org.junit.jupiter.api.Test;
  import org.springframework.boot.test.context.SpringBootTest;
  ​
  @SpringBootTest
  class SpringBootDay03ApplicationTests {
  ​
      @Test
      void contextLoads() {
      }
  ​
  }
  ​

实际中一般都是通过子测试类继承基本测试类来进行测试,具体如下:

BasicTests

  
  package com.study;
  ​
  import org.springframework.boot.test.context.SpringBootTest;
  ​
  /**
   * @ClassName BasicTests
   * @Description SpringBoot基础测试类
   * @Author Jiangnan Cui
   * @Date 2022/5/5 10:27
   * @Version 1.0
   */
  @SpringBootTest
  public class BasicTests {
  }
  ​

UserDAOTests

  
  package com.study;
  ​
  import com.study.dao.UserDAO;
  import org.junit.jupiter.api.Test;
  import org.springframework.beans.factory.annotation.Autowired;
  ​
  /**
   * @ClassName UserDAOTests
   * @Description 测试UserDAO
   * @Author Jiangnan Cui
   * @Date 2022/5/5 10:29
   * @Version 1.0
   */
  public class UserDAOTests extends BasicTests{
      @Autowired
      private UserDAO userDAO;
  ​
      /**
       * @MethodName testFindAll
       * @Description 测试查询所有
       * @Author Jiangnan Cui
       * @Date 2022/5/5 10:31
       */
      @Test
      public void testFindAll(){
          userDAO.findAll().forEach(user -> System.out.println("user = " + user));
      }
  }
  ​

UserServiceTests

  
  package com.study;
  ​
  import com.study.entity.User;
  import com.study.service.UserService;
  import org.junit.jupiter.api.Test;
  import org.springframework.beans.factory.annotation.Autowired;
  ​
  /**
   * @ClassName UserServiceTests
   * @Description 测试UserService
   * @Author Jiangnan Cui
   * @Date 2022/5/5 10:32
   * @Version 1.0
   */
  public class UserServiceTests extends BasicTests{
      @Autowired
      private UserService userService;
  ​
      //测试查询所有
      @Test
      public void testFindAll(){
          for (User user : userService.findAll()) {
              System.out.println("user = " + user);
          }
      }
  }
  ​
3. 热部署工具

待完善

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/798122.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存