spring-boot和mybatis的整合

在idea裏建立一個spring-boot工程 選依賴的時候把web裏的web勾上,sql裏的mysql和mybatis也勾上 ,這樣就會自動幫咱們生成依賴 在其中咱們須要給mysql的依賴加上版本,否則它會自動去用最新版的(目前mysql最新版已經到了八以上了),咱們如今用五點幾的就好,有錯誤也能在網上找到解決方法,採用最新版的若是出現錯誤,那麼解決起來也麻煩java

而後在加上druid依賴, 若是是要用到多數據源,就得用 druid-spring-boot-startermysql

而後在build裏設置下配置文件的掃描路徑,pom.xml具體依賴以下web

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.liy</groupId>
    <artifactId>mybatisProject</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mybatisProject</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.0.1</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
            <version>5.1.30</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
       <resources>
           <resource>
               <directory>src/main/java</directory>
               <includes>
                   <include>**/*.xml</include>
               </includes>
           </resource>
           <resource>
               <directory>src/main/resources</directory>
           </resource>
       </resources>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>`

而後在application.properties配置文件中配置數據源信息(我這裏打算用兩個數據源)spring

spring.datasource.one.username=root
spring.datasource.one.password=root
spring.datasource.one.url=jdbc:mysql:///again
spring.datasource.one.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.one.driver-class-name=com.mysql.jdbc.Driver


spring.datasource.two.username=root
spring.datasource.two.password=root
spring.datasource.two.url=jdbc:mysql:///demo
spring.datasource.two.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.two.driver-class-name=com.mysql.jdbc.Driver

若是隻是一個數據源 前綴是spring.datasource.username 這也是默認的掃描前綴sql

由於咱們這裏採用兩個數據源,因此爲了區別兩個數據源咱們分別給他們加上了 spring.datasource.**one.**username=root數據庫

spring.datasource.**two.**username=rootspringboot

可是咱們把前綴改了,那麼spring-boot也就找不到默認的前綴,那麼這兩個數據源的配置信息也就不會去掃描mybatis

因此咱們得本身去寫個配置類,來獲取和區別這兩個數據源 DatasourceConfig.javaapp

@Configuration
public class DataSourceConfig {

    @Bean
    @ConfigurationProperties("spring.datasource.one")
    DataSource dsOne(){
        return DruidDataSourceBuilder.create().build();
    }

    @Bean
    @ConfigurationProperties("spring.datasource.two")
    DataSource dsTwo(){
        return DruidDataSourceBuilder.create().build();
    }
}

而後得把數據源分別弄給咱們的mybatis配置類去 寫兩個mybatis配置類,內容基本同樣,可是用於區分兩個數據源 MybatisConfig1maven

@Configuration
@MapperScan(basePackages = "com.liy.mapper",sqlSessionFactoryRef = "sqlSessionFactoryBean1",
sqlSessionTemplateRef = "sqlSessionTemplate1")
public class MyBatisConfig1 {

    @Resource(name = "dsOne")
    DataSource dsOne;

    @Bean
    SqlSessionFactory sqlSessionFactoryBean1(){
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(dsOne);
        SqlSessionFactory factory = null;
        try {
            factory = factoryBean.getObject();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return factory;
    }

    @Bean
    SqlSessionTemplate sqlSessionTemplate1(){
        return new SqlSessionTemplate(sqlSessionFactoryBean1());
    }

}

MybatisConfig1

@Configuration
@MapperScan(basePackages = "com.liy.mapper2",sqlSessionFactoryRef = "sqlSessionFactoryBean2",
sqlSessionTemplateRef = "sqlSessionTemplate2")
public class MyBatisConfig2 {

    @Resource(name = "dsTwo")
    DataSource dsTwo;

    @Bean
    SqlSessionFactory sqlSessionFactoryBean2(){
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(dsTwo);
        SqlSessionFactory factory = null;
        try {
            factory = factoryBean.getObject();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return factory;
    }

    @Bean
    SqlSessionTemplate sqlSessionTemplate2(){
        return new SqlSessionTemplate(sqlSessionFactoryBean2());
    }

}

而後分別寫兩個mapper包裏對應的接口和映射文件

咱們就只測試一下,那就分別查詢下

UserMapper 普通的sql語句也能夠直接用註解來,不過不推薦

public interface UserMapper {
    //@Select("select * from user")
    public List<User> selectAll();
}

UserMapper.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.liy.mapper.UserMapper">
    <select id="selectAll" resultType="com.liy.bean.User">
        select * from user
    </select>
</mapper>

另外一個mapper2的代碼也就不發了,也是基本和mapper裏的同樣

只是些路徑和數據庫查詢的表名不太同樣

記得寫個bean類接收 , 我找了兩個類似的表來查詢,全部就只用寫一個bean類來接收就行

setter和getter方法就省略了

public class User {
    private int id;
    private String name;
    private int age;
    private String address;

基本都準備好了,那麼就開始測試吧

直接在spring-boot工程自帶的測試類裏測試便可

@RunWith(SpringRunner.class)
@SpringBootTest
public class MybatisApplicationTests {
    @Autowired
    UserMapper um;

    @Autowired
    UserMapper2 um2;
    @Test
    public void contextLoads() {
        List<User> user = um.selectAll();
        System.out.println(user);

        List<User> users = um2.selectAll();
        System.out.println(users);
    }

}

um 和 um2上應該都有紅色波浪線,只是springboot未找到仍是啥的,可是仍是注入進來了

兩個表的數據也都查詢出來了

相關文章
相關標籤/搜索