• 【2020-02-16】原生Mybatis的配置以及与SpringBoot的整合


    前言

        今天周日,上午研究了下Mybatis,下午准备的牛客网机试,机试没啥好说的,下面就记录一下今天对Mybatis的学习。下面主要分两部分,第一部分是Mybatis的原生配置方式,第二部分是Mybatis与SpringBoot的整合。

    一、Mybatis的原生配置

        pom.xml中只要引入mybatis和mysql的依赖即可,因为我用了lombok,所以多引入了个lombok的依赖:

           <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.5.1</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.10</version>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.17</version>
            </dependency>

        然后配置了下图所示的类和xml:

         在mybatis-config.xml中,配置数据源和mapper.xml文件的地址:

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE configuration
     3         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
     4         "http://mybatis.org/dtd/mybatis-3-config.dtd">
     5 <configuration>
     6     <environments default="development">
     7         <environment id="development">
     8             <transactionManager type="JDBC"/>
     9             <dataSource type="POOLED">
    10                 <property name="driver" value="com.mysql.jdbc.Driver"/>
    11                 <property name="url" value="jdbc:mysql://localhost:3306/my_project?useUnicode=true&amp;characterEncoding=utf8&amp;serverTimezone=Asia/Shanghai&amp;useSSL=false&amp;allowPublicKeyRetrieval=true"/>
    12                 <property name="username" value="localuser"/>
    13                 <property name="password" value="Jinger!"/>
    14             </dataSource>
    15         </environment>
    16     </environments>
    17     <mappers>
    18         <mapper resource="mybatis/mapper/ManagerInfoMapper.xml"/>
    19     </mappers>
    20 </configuration>

     最后是测试入口类:

     1 package com;
     2 
     3 
     4 import com.mybatisDemo.entity.ManagerInfoEntityDO;
     5 import com.mybatisDemo.mapper.ManagerInfoMapper;
     6 import org.apache.ibatis.io.Resources;
     7 import org.apache.ibatis.session.SqlSession;
     8 import org.apache.ibatis.session.SqlSessionFactory;
     9 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    10 
    11 import java.io.InputStream;
    12 
    13 /**
    14  * 通过原生的方式配置Mybatis
    15  */
    16 public class MybatisDemo1 {
    17     public static void main(String[] args) throws Exception {
    18         String resource = "mybatis/mybatis-config.xml"; // 配置文件的相对地址
    19         InputStream inputStream = Resources.getResourceAsStream(resource);
    20         SqlSessionFactory sqlSessionFactory =
    21                 new SqlSessionFactoryBuilder().build(inputStream);
    22 
    23         SqlSession sqlSession = sqlSessionFactory.openSession();
    24         ManagerInfoEntityDO entityDO = sqlSession.getMapper(ManagerInfoMapper.class).selectByPrimaryKey(5);
    25         System.out.println("ManagerInfoEntityDO:" + entityDO);
    26     }
    27 }

        启动main方法就可以看到能成功访问数据库了。由此可见,Mybatis是可以独立于Spring或者SpringBoot使用的,但平时大家用Mybatis应该大都是基于SpringBoot使用的,所以下面看一下在SpringBoot中是如何引入Mybatis的。

    二、Mybatis与SpringBoot的整合

        pom.xml中增加以下几个依赖,其中spring-boot-starter-web是为了通过页面调用接口而引入的,druid是用来做连接池的,剩下的两个jar包是专为二者整合而存在。

     1        <dependency>
     2             <groupId>org.springframework.boot</groupId>
     3             <artifactId>spring-boot-starter-web</artifactId>
     4         </dependency>
     5         <dependency>
     6             <groupId>org.mybatis.spring.boot</groupId>
     7             <artifactId>mybatis-spring-boot-starter</artifactId>
     8             <version>1.3.2</version>
     9         </dependency>
    10         <dependency>
    11             <groupId>org.mybatis</groupId>
    12             <artifactId>mybatis-spring</artifactId>
    13             <version>2.0.1</version>
    14         </dependency>
    15         <dependency>
    16             <groupId>com.alibaba</groupId>
    17             <artifactId>druid</artifactId>
    18             <version>1.1.13</version>
    19         </dependency>

        yml文件中配置了mapper.xml的位置:

    server:
      port: 8090
    
    mybatis:
      #映射文件路径
      mapper-locations: classpath:mybatis/mapper/*Mapper.xml

        AppConfig中配置的数据库源和对mapper接口的扫描:

     1 @Configuration
     2 @MapperScan("com.mybatisDemo.mapper")
     3 //@ComponentScan("com")
     4 public class AppConfig {
     5 
     6     private String userName = "localuser";
     7     private String password = "Jinger!";
     8     private String url = "jdbc:mysql://localhost:3306/my_project?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false&allowPublicKeyRetrieval=true";
     9     private String driverClassName = "com.mysql.jdbc.Driver";
    10     
    11     @Bean
    12     @Primary
    13     public DataSource dataSource() {
    14         DruidDataSource dataSource = new DruidDataSource();
    15         dataSource.setUrl(url);
    16         dataSource.setUsername(userName);//用户名
    17         dataSource.setPassword(password);//密码
    18         dataSource.setDriverClassName(driverClassName);
    19         dataSource.setInitialSize(5);//初始化时建立物理连接的个数
    20         dataSource.setMaxActive(50);//最大连接池数量
    21         dataSource.setMinIdle(1);//最小连接池数量
    22         dataSource.setMaxWait(60000);//获取连接时最大等待时间,单位毫秒。
    23         dataSource.setTestWhileIdle(true);
    24         dataSource.setTestOnBorrow(false); //
    25         dataSource.setTestOnReturn(false);
    26         dataSource.setPoolPreparedStatements(true); //缓存游标
    27         dataSource.setMaxPoolPreparedStatementPerConnectionSize(20); //游标缓存大小
    28         dataSource.setTimeBetweenEvictionRunsMillis(60000); // 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
    29         dataSource.setMinEvictableIdleTimeMillis(30000); //配置一个连接在池中最小生存的时间,单位是毫秒
    30         dataSource.setValidationQuery("SELECT 1");//用来检测连接是否有效的sql
    31         dataSource.setTestOnBorrow(false);//申请连接时执行validationQuery检测连接是否有效
    32         dataSource.setTestWhileIdle(true);//建议配置为true,不影响性能,并且保证安全性。
    33         dataSource.setPoolPreparedStatements(false);//是否缓存preparedStatement,也就是PSCache
    34         return dataSource;
    35     }
    36 
    37 }

        在MyService中调用了mapper接口:   

    1 @Service
    2 public class MyService {
    3     @Autowired
    4     private ManagerInfoMapper managerInfoMapper;
    5 
    6     public ManagerInfoEntityDO selectByPrimaryKey(Integer id) {
    7         return managerInfoMapper.selectByPrimaryKey(id);
    8     }
    9 }

        最后是测试主类:

     1 **
     2  * SpringBoot与Mybatis整合
     3  */
     4 @SpringBootApplication
     5 @Controller
     6 public class MybatisDemo3 {
     7 
     8     @Autowired
     9     private MyService managerService;
    10 
    11     public static void main(String[] args) {
    12         SpringApplication.run(MybatisDemo3.class, args);
    13     }
    14 
    15     @RequestMapping("/test")
    16     @ResponseBody
    17     public ManagerInfoEntityDO myTest () {
    18         ManagerInfoEntityDO entityDO = managerService.selectByPrimaryKey(5);
    19         System.out.println(entityDO);
    20         return entityDO;
    21     }
    22 }

        启动该类后,访问localhost:8090/test则能正常访问数据库。

    小结

        可以看到,与SpringBoot整合之后,Mybatis只需简单配置两下就可使用,方便至极。今天还研究了一下Mybatis与SpringBoot整合的原理,但未完全搞清楚,就暂时不做详细记录了,只贴一张流程草图,挖个坑。

  • 相关阅读:
    [转]2013豆瓣校园招聘研发类笔试题
    【强烈推荐】《剑指Offer:名企面试官精讲典型编程题》一书中IT名企经典面试题
    [转]2013百度校园招聘-机器学习和数据挖掘工程师-笔试题
    [转]一个应届计算机毕业生的2012求职之路
    图片镜像
    家有学霸的CEO
    盯盯拍Android App 3.0指导
    淘宝领取金币
    儿童散光眼的分类
    女孩被宠坏叫爷爷滚开
  • 原文地址:https://www.cnblogs.com/zzq6032010/p/12319455.html
Copyright © 2020-2023  润新知