【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包是专为二者整合而存在。

扫描二维码关注公众号,回复: 9205035 查看本文章
 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整合的原理,但未完全搞清楚,就暂时不做详细记录了,只贴一张流程草图,挖个坑。

猜你喜欢

转载自www.cnblogs.com/zzq6032010/p/12319455.html
今日推荐