zoukankan      html  css  js  c++  java
  • SpringBoot整合mybatis

    SpringBoot整合mybatis

    1 版本说明
      springboot:2.0

      jdk:1.8

      

    2 创建springBoot项目
      创建项目时勾选必要web,MySQL,mybatis相关依赖

      创建完成后再pom文件中添加自动部署、lombok相关依赖

      2.1 编写测试类
        技巧01:项目创建成功后先将mybatis和mysql相关的jar注释掉,在到控制层中创建一个简单的测试类来确认项目是否创建成功

    复制代码
    package cn.test.demo.mybatis_demo02.controller;

    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;

    /**

    • @author 王杨帅

    • @create 2018-04-08 7:53

    • @desc 控制层测试类
      **/
      @RestController
      @RequestMapping(value = "/test")
      public class TestController {

      @GetMapping(value = "/test01")
      public String test01() {
      return "HELLO BOY";
      }
      }
      复制代码
        2.2 配置文件信息
      复制代码
      server.port=9999
      server.servlet.path=/dev

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://127.0.0.1:3306/testdemo?useUnicode=true&characterEncoding=UTF-8&&useSSL=false
    jdbc.username=root
    jdbc.password=root

    mabatis_config_file=mybatis-config.xml
    mapper_path=/mapper/**.xml
    entity_package=cn.test.demo.mybatis_demo02.entity
    复制代码

    3 创建数据库
      根据springboot的配置信息,创建一个数据库;并在数据库中创建一个表

      技巧01:必须在springboot配置文件中配置的那个数据库中进行数据表的创建

    复制代码
    /*
    Navicat MySQL Data Transfer

    Source Server : mysql5.4
    Source Server Version : 50540
    Source Host : localhost:3306
    Source Database : testdemo

    Target Server Type : MYSQL
    Target Server Version : 50540
    File Encoding : 65001

    Date: 2018-04-08 13:33:08
    */

    SET FOREIGN_KEY_CHECKS=0;


    -- Table structure for tb_area


    DROP TABLE IF EXISTS tb_area;
    CREATE TABLE tb_area (
    area_id int(2) NOT NULL AUTO_INCREMENT,
    area_name varchar(200) NOT NULL,
    priority int(2) NOT NULL DEFAULT '0',
    create_time datetime NOT NULL,
    last_edit_time datetime NOT NULL,
    PRIMARY KEY (area_id)
    ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;


    -- Records of tb_area


    INSERT INTO tb_area VALUES ('1', '东苑', '0', '2018-03-07 08:50:37', '2018-04-08 13:28:58');
    INSERT INTO tb_area VALUES ('2', '南苑', '1', '2018-04-08 09:44:48', '2018-04-08 09:44:48');
    复制代码

    4 创建实体类
      技巧01:可以利用mybatis提供的生成器来自动生成entity、dao、xml、service、controller对应的代码,具体步骤请参见上一篇博文

      技巧02:在编写代码时可以开启代码提示

        

    View Code
      

    5 配置部分
      5.1 POM配置
        保证pom.xml文件中有mybatis、mysql、mysql驱动这三个对应的依赖

    复制代码


    mysql
    mysql-connector-java
    runtime



    com.mchange
    c3p0
    0.9.5.2



    org.mybatis.spring.boot
    mybatis-spring-boot-starter
    1.3.2

    复制代码
      5.2 mybatis相关配置
        在ersources文件夹中创建一个mybatis-config.xml文件用来mybatis相关的配置

        技巧01:在项目启动的时候会自动加载resources中的文件进行全局的配置,所有mybatis的配置文件也会被加载

        5.2.1
          开启JDBC的getGeneratedKeys获取数据库自增主键,即:当我们新增一条数据时会自动设置主键值

        5.2.2
          使用列标签替换列别名

        5.2.3
          开启驼峰转换,即:数据库中的字段名全部是小写和下划线组成,实体类中的属性全部使用驼峰原则时他们之间就会是一一对应的关系

    复制代码

    复制代码   5.3 DataSource配置和SqlSessionFactory配置     由于我们使用c3p0作为数据库连接池,所以我们在配置DataSource直接对成c3p0的连接信息进行配置即可

        5.3.1 创建一个DataSourceConfiguration类来配置DataSource
          注意:类名可以随便取

          技巧01:在启动类同一级别或启动类下面级别的地方创建一个config包来存放java配置类

            

          技巧02:java配置类需要在类上添加@Configuration注解来指明该类是一个配置类

          技巧03:DataSourceConfiguration配置类说明

            》生成一个DataSource实例并注入到Bean容器中

              技巧01:向数据库连接信息,我们可以把它放到springboot的全局配置文件中去,然后在需要用到的地方通过@Value注解来获取获取,这样就可以做到一改全改的作用  

      

              技巧02:DataSource配置类上还需要利用@MapperScan注解来配置mapper映射器的扫描路径,例如:

    @MapperScan("cn.test.demo.mybatis_demo02.dao") // mapper映射器的扫描路径
              

    View Code
        5.3.2 创建一个crateSqlSessionFactoryBean类来配置SqlSessionFactory
          注意:类名可以随便取

          技巧01:java配置类需要在类上添加@Configuration注解来指明该类是一个配置类

          技巧02:在配置SqlSessionFactoryBean时需要用到DataSrouce实例,所以需要在配置SqlSessionFactoryBean的配置类依赖注入DataSrouce实例,例如:

    @Autowired
    @Qualifier("dataSource")
    private DataSource dataSource;
    

          技巧03:配置说明

            》SqlSessionFactoryBean并注入到Bean容器中

              

    View Code
            》将扫描路径配置到springboot的全局配置配置文件中,然后利用@Value去获取即可,这样既可以实现一改全改的效果;例如:

          

          

            》@Autowired进行依赖注入的时候可以利用@Qualifier指定名字,例如:   

    @Autowired
    @Qualifier("dataSource")
    private DataSource dataSource;
    

    6 创建Dao层代码
      Dao层在使用mybatis实现时也叫作Mapper映射器,其实Mapper映射器就是一个接口而已

    复制代码
    package cn.test.demo.mybatis_demo02.dao;

    import cn.test.demo.mybatis_demo02.entity.Area;
    import com.sun.applet2.preloader.event.InitEvent;

    import java.util.List;

    /**

    • @author 王杨帅
    • @create 2018-04-08 8:42
    • @desc
      **/
      public interface AreaDao {
      List queryArea();
      Area queryById(Integer areaId);
      Integer insertArea(Area area);
      Integer updateArea(Area area);
      Integer deleteArea(Integer areaId);
      }
      复制代码

    7 创建XML文件代码
      一个XML文件和一个Mapper映射器对应,具体这么对应请参见mybatis先关博文

    View Code

    8 创建Dao层测试类
      坑01:在测试类中进行依赖注入时可能会报错,报错信息为:找不到相关的Bean

      原因:IDEA是一个比较智能的编辑器,所以在进行依赖注入的时候就会检查需要注入的Bean在容器中是否存在,如果不存在就会报出这样的错误;但是由于IDEA的该功能还不够完善所以即使Bean容器有对应的Bean也会报出找不到相关Bean的错误

      解决办法:将IDEA这个功能的报错级别调低,调成warning即可,例如:

        

    View Code
    package cn.test.demo.mybatis_demo02.dao;

    import cn.test.demo.mybatis_demo02.entity.Area;
    import lombok.extern.slf4j.Slf4j;
    import org.junit.Ignore;
    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;
    import java.util.List;

    import static org.junit.Assert.*;

    @RunWith(SpringRunner.class)
    @SpringBootTest
    @Slf4j
    public class AreaDaoTest {

    @Autowired
    private AreaDao areaDao;
    
    @Test
    public void queryArea() throws Exception {
        List<Area> areaList = areaDao.queryArea();
    

    // assertEquals(1, areaList.size());
    log.info("获取到的数据为:{}", areaList);
    }

    @Test
    public void queryById() throws Exception {
        Area area = areaDao.queryById(1);
        log.info("获取到的数据为:{}",area.toString());
    }
    
    @Test
    

    // @Ignore
    public void insertArea() throws Exception {
    Area area = new Area();
    area.setAreaName("南苑");
    area.setPriority(1);
    area.setCreateTime(new Date());
    area.setLastEditTime(new Date());
    Integer result = areaDao.insertArea(area);
    log.info("插入完成的数据为:{}", result);
    }

    @Test
    public void updateArea() throws Exception {
        Area area = new Area();
        area.setAreaName("东苑");
        area.setLastEditTime(new Date());
        area.setAreaId(1);
        Integer result = areaDao.updateArea(area);
        log.info("更新完成后得到的结果为:{}", result);
    }
    
    @Test
    public void deleteArea() throws Exception {
    }
    

    }

  • 相关阅读:
    Nginx proxy_pass后的url加不加/的区别
    Magento通过产品ID和SKU获取产品信息
    magento删除产品时删除产品图片
    Magento开发常用函数
    Memcached常用函数说明
    Magento使用Memcached分布式缓存系统
    PHP+Memcache统计当前在线人数
    关于表单编号的考虑
    DataGridView中DataGridViewComboBoxColumn的一些相关应用(一)让其值改变时触发事件-转
    关于何时使用构造函数,何时使用初始化函数
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/8763318.html
Copyright © 2011-2022 走看看