網頁

2019/2/7

使用SpringBoot打造記帳簿專案(十九)MyBatis設定

Spring Boot的MyBatis設定。


先參考使用SpringBoot打造記帳簿專案(十七)使用Eclipse MyBatis Generator plugin自動產生存取資料表的檔案

前一篇中已經加入了MyBatis-Spring-Boot-Starter的依賴並生成Mapper及Entity檔如下。



MyBatis需要指定資料庫來原(dataSource),而Spring Boot的dataSource設定applicatoin.properties檔。加入以下spring.datasource開頭的各項設定:

#datasource
spring.datasource.url=jdbc:mysql://localhost:3306/moneynote
spring.datasource.username=matt
spring.datasource.password=12345
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

並在applicatoin.properties加入mybatis.mapper-locations來指定mapper(xml)檔的位置,值為Ant-style pattern格式(參考SqlSessionFactoryBean - Properties)。

#mybatis
mybatis.mapper-locations=classpath*:idv/matt/mapper/**/*Mapper.xml

如果沒有設定mapper xml的位置,會出現org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)錯誤。


其他mybatis的設定請參考mybatis-spring-boot-autoconfigure - Configurationmybatis - Configuration - settings


如果在Spring MVC時代你有用過MyBatis,必須在配置檔設定org.mybatis.spring.SqlSessionFactoryBeanorg.mybatis.spring.SqlSessionTemplate,但MyBatis-Spring-Boot-Starter幫我們自動進行了這些配置,所以不用另外設定。

此外MyBatis-Spring-Boot-Starter還會自動掃描有@Mapper註釋的mapper interface並註冊為bean(如果是用Java config的mapper),但本範例是以xml設定的mapper,所以除了設定上面的mybatis.mapper-locations,還需要在Spring Boot Application(此專案為MoneynoteApplication)中設定@MapperScan。請參考mybatis-spring - Injecting Mappers

MoneynoteApplication.java

package idv.matt.application;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan(basePackages = { "idv.matt.controller, idv.matt.aop" })
@MapperScan(basePackages = "idv.matt.dao") // <-- 這裡
public class MoneynoteApplication {

    public static void main(String[] args) {
        SpringApplication.run(MoneynoteApplication.class, args);
    }

}

@MapperScan的屬性basePackages值設為Dao interface的package位置idv.matt.dao,如此Spring Boot便會將指定package位置下的mapper interface註冊為bean。


到此就完成基本的設定了,此時可以正常起動專案並透過程式對資料庫進行存取。

接著請參考使用SpringBoot打造記帳簿專案(二十)MyBatis測試


2 則留言:


  1. mysql
    mysql-connector-java
    runtime



    org.springframework.boot
    spring-boot-starter-jdbc

    回覆刪除

  2. org.mybatis.spring.boot
    mybatis-spring-boot-starter
    2.1.1

    回覆刪除