SpringBoot 集成 mybatis的四种方式

关于springBoot集成mybatis的方式,其实有很多,网上也有很多的案例,经过一系列参考和实践,大致有以下几种方式。

方式一

(使用注解形式,全程无MyBatis与Spring的配置文件)

1、添加依赖

<!-- mybatis -->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.2</version>
</dependency>

<!-- mysql -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

2、配置文件 application.yml

#配置数据源
spring:
  datasource:
     url: jdbc:mysql://127.0.0.1:3306/test1?useUnicode=true&characterEncoding=utf8&useSSL=false
     username: root
     password: 123456
     driver-class-name: com.mysql.jdbc.Driver

3、Controller

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.chenqi.springboot.service.TestService;
@RestController
public class SpringBootController {
    
    @Autowired
    TestService testService;
    @GetMapping("/hello")
    public String hello(){
        return testService.test();
    }
}

4、service

public interface TestService {
    
    public String test();
}

5、serviceImpl

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.chenqi.springboot.dao.TestMapper;
import com.chenqi.springboot.service.TestService;
@Service
public class TestServiceImpl implements TestService {
    
    @Autowired
    TestMapper testMapper;
    @Override
    public String test() {
        return testMapper.test();
    }
}

6、dao

import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
@Mapper
public interface TestMapper {
    
    @Select("select * from test")
    String test();
}

7、数据库
在这里插入图片描述

这里就简单建一张表 一个字段

启动项目后,浏览器输入:
http://localhost:8080/hello
返回:
在这里插入图片描述

方式二(使用注解+xml)
在上面的基础上修改

1、配置文件 application.yml

#配置数据源
spring:
  datasource:
     url: jdbc:mysql://127.0.0.1:3306/test1?useUnicode=true&characterEncoding=utf8&useSSL=false
     username: root
     password: 123456
     driver-class-name: com.mysql.jdbc.Driver
     
#指定mybatis映射文件的地址
mybatis:
  mapper-locations: classpath:mapper/*.xml

2、dao

import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface TestMapper {
String test();
}

3、mapper.xml (注意文件名需与dao中的mapper相同)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.chenqi.springboot.dao.TestMapper" >
      <select id="test" resultType="java.lang.String">
        select * from test
    </select>
</mapper>

启动项目后,浏览器输入:
http://localhost:8080/hello
返回:
在这里插入图片描述

方式三(自定义dataSource,适合集成springcloud-config)

1、添加依赖

<!-- druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>${druid.version}</version>
        </dependency>

2、配置文件application.properties

#jdbc
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/test1?useSSL=false&useUnicode=true&characterEncoding=utf8
jdbc.username=root
jdbc.password=123456
jdbc.maxActive=50
jdbc.maxWait=30000

3、自定义配置类

DataSourceConfiguration.java

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import com.alibaba.druid.pool.DruidDataSource;
@Configuration
@PropertySource("classpath:application.properties")
public class DataSourceConfiguration {
  @Value("${jdbc.driver}")
  private String driver;
  @Value("${jdbc.url}")
  private String url;
  @Value("${jdbc.username}")
  private String username;
  @Value("${jdbc.password}")
  private String password;
  @Value("${jdbc.maxActive}")
  private int maxActive;
  @Value("${jdbc.maxWait}")
  private long maxWait;
  
  @Bean
  public DruidDataSource dataSource(){
      DruidDataSource dataSource = new DruidDataSource();
      dataSource.setDriverClassName(driver);
      dataSource.setUrl(url);
      dataSource.setUsername(username);
      dataSource.setPassword(password);
      dataSource.setMaxActive(maxActive);
      dataSource.setMaxWait(maxWait);
      return dataSource;
  }
}

MyBatisConfig.java

import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
import org.springframework.transaction.annotation.TransactionManagementConfigurer;
@Configuration
@EnableTransactionManagement
public class MyBatisConfig implements TransactionManagementConfigurer {
    @Autowired
    private DataSource dataSource;
    @Override
    public PlatformTransactionManager annotationDrivenTransactionManager() {
         return new DataSourceTransactionManager(dataSource);
    }
    @Bean(name = "sqlSessionFactory")
    public SqlSessionFactory sqlSessionFactoryBean() {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        //添加XML目录
        ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        try {
            bean.setMapperLocations(resolver.getResources("classpath:mapper/*.xml"));
            return bean.getObject();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
    @Bean
    public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

MyBatisMapperScannerConfig.java

import org.mybatis.spring.mapper.MapperScannerConfigurer;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
//因为这个对象的扫描,需要在MyBatisConfig的后面注入,所以加上下面的注解
@AutoConfigureAfter(MyBatisConfig.class)
public class MyBatisMapperScannerConfig {
    
    
 @Bean
 public MapperScannerConfigurer mapperScannerConfigurer() {
     MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
     //获取之前注入的beanName为sqlSessionFactory的对象
     mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory");
     //指定dao的路径
     mapperScannerConfigurer.setBasePackage("com.chenqi.springboot.dao");
     return mapperScannerConfigurer;
 }
}

启动项目后,浏览器输入:
http://localhost:8080/hello
返回:

在这里插入图片描述

方式四(多数据源的mybatis)

1、配置文件 application.yml

mysql:
  server:
    test1:
      url: jdbc:mysql://127.0.0.1:3306/test1?useSSL=false&useUnicode=true&characterEncoding=utf8
      username: root
      password: 123456
      driverClassName: com.mysql.jdbc.Driver
      initialSize: 1
      minIdle: 5
      maxActive: 50
    test2:
      url: jdbc:mysql://127.0.0.1:3306/test2?useSSL=false&useUnicode=true&characterEncoding=utf8
      username: root
      password: 123456
      driverClassName: com.mysql.jdbc.Driver
      initialSize: 1
      minIdle: 5
      maxActive: 50

2、数据库创建
在这里插入图片描述

3、dao 和 xml

Test1Mapper.java

package com.chenqi.springboot.dao.test1;
public interface Test1Mapper {
    
    String test();
}

Test2Mapper.java

package com.chenqi.springboot.dao.test2;
public interface Test2Mapper {
    
    String test();
}

Test1Mapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.chenqi.springboot.dao.test1.Test1Mapper" >
      <select id="test" resultType="java.lang.String">
        select * from test
    </select>
</mapper>

Test2Mapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.chenqi.springboot.dao.test2.Test2Mapper" >
      <select id="test" resultType="java.lang.String">
        select * from test
    </select>
</mapper>

3、serviceImpl

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.chenqi.springboot.dao.test1.Test1Mapper;
import com.chenqi.springboot.dao.test2.Test2Mapper;
import com.chenqi.springboot.service.TestService;
@Service
public class TestServiceImpl implements TestService {
    
    @Autowired
    Test1Mapper test1Mapper;
    @Autowired
    Test2Mapper test2Mapper;
    @Override
    public String test() {
        return test1Mapper.test() + "---" + test2Mapper.test();
    }
}

4、 启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import com.chenqi.springboot.config.MyBadisLoader;
@MyBadisLoader({"test1 = com.chenqi.springboot.dao.test1 = classpath:mapper/test1/*xml" , 
"test2 = com.chenqi.springboot.dao.test2 = classpath:mapper/test2/*.xml"})
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
public class SpringbootApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootApplication.class, args);
    }
}

启动项目后,浏览器输入:
http://localhost:8080/hello
返回:
在这里插入图片描述

好了,暂时就写这么多了,这四种足够应付大部分使用场景了


版权声明:本文为weixin_40623736原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。