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

前言

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

一、Mybatis的原生配置

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

       
            org.mybatis
            mybatis
            3.5.1
        
        
            org.projectlombok
            lombok
            1.18.10
        
        
            mysql
            mysql-connector-java
            8.0.17
        

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

【2020-02-16】原生Mybatis的配置以及与SpringBoot的整合_第1张图片

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

 1 
 2 DOCTYPE configuration
 3         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4         "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5 
 6     
 7         
 8             
 9             
10                 
11                 
12                 
13                 
14             
15         
16     
17     
18         
19     
20 

 最后是测试入口类:

 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        
 2             org.springframework.boot
 3             spring-boot-starter-web
 4         
 5         
 6             org.mybatis.spring.boot
 7             mybatis-spring-boot-starter
 8             1.3.2
 9         
10         
11             org.mybatis
12             mybatis-spring
13             2.0.1
14         
15         
16             com.alibaba
17             druid
18             1.1.13
19         

    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整合的原理,但未完全搞清楚,就暂时不做详细记录了,只贴一张流程草图,挖个坑。

【2020-02-16】原生Mybatis的配置以及与SpringBoot的整合_第2张图片

 

你可能感兴趣的:(【2020-02-16】原生Mybatis的配置以及与SpringBoot的整合)