Spring
整合 Mybatis
需要定義很多設定類
SpringConfig
設定類
匯入 JdbcConfig
設定類
匯入 MybatisConfig
設定類
@Configuration
@ComponentScan("com.itheima")
@PropertySource("classpath:jdbc.properties")
@Import({JdbcConfig.class,MyBatisConfig.class})
public class SpringConfig {
}
JdbcConfig
設定類
定義資料來源(載入properties設定項:driver、url、username、password)
public class JdbcConfig {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String userName;
@Value("${jdbc.password}")
private String password;
@Bean
public DataSource getDataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(userName);
ds.setPassword(password);
return ds;
}
}
MybatisConfig
設定類
定義 SqlSessionFactoryBean
定義對映設定
@Bean
public MapperScannerConfigurer getMapperScannerConfigurer(){
MapperScannerConfigurer msc = new MapperScannerConfigurer();
msc.setBasePackage("com.itheima.dao");
return msc;
}
@Bean
public SqlSessionFactoryBean getSqlSessionFactoryBean(DataSource dataSource){
SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
ssfb.setTypeAliasesPackage("com.itheima.domain");
ssfb.setDataSource(dataSource);
return ssfb;
}
建立新模組,選擇 Spring Initializr
,並設定模組相關基礎資訊
選擇當前模組需要使用的技術集(MyBatis、MySQL)
在 com.itheima.domain
包下定義實體類 Book
,內容如下
public class Book {
private Integer id;
private String name;
private String type;
private String description;
//setter and getter
//toString
}
在 com.itheima.dao
包下定義 BookDao
介面,內容如下
public interface BookDao {
@Select("select * from tbl_book where id = #{id}")
public Book getById(Integer id);
}
在 test/java
下定義包 com.itheima
,在該包下測試類,內容如下
@SpringBootTest
class Springboot08MybatisApplicationTests {
@Autowired
private BookDao bookDao;
@Test
void testGetById() {
Book book = bookDao.getById(1);
System.out.println(book);
}
}
我們程式碼中並沒有指定連線哪兒個資料庫,使用者名稱是什麼,密碼是什麼。所以這部分需要在 SpringBoot
的組態檔中進行配合。
在 application.yml
組態檔中設定如下內容
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_db
username: root
password: root
執行測試方法,我們會看到如下錯誤資訊
錯誤資訊顯示在 Spring
容器中沒有 BookDao
型別的 bean
。為什麼會出現這種情況呢?
原因是 Mybatis
會掃描介面並建立介面的程式碼物件交給 Spring
管理,但是現在並沒有告訴 Mybatis
哪個是 dao
介面。而我們要解決這個問題需要在BookDao
介面上使用 @Mapper
,BookDao
介面改進為
@Mapper
public interface BookDao {
@Select("select * from tbl_book where id = #{id}")
public Book getById(Integer id);
}
注意:
SpringBoot
版本低於2.4.3(不含),Mysql驅動版本大於8.0時,需要在url連線串中設定時區jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
,或在MySQL資料庫端設定時區解決此問題
現在我們並沒有指定資料來源,SpringBoot
有預設的資料來源,我們也可以指定使用 Druid
資料來源,按照以下步驟實現
匯入 Druid
依賴
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
在 application.yml
組態檔設定
可以通過 spring.datasource.type
來設定使用什麼資料來源。組態檔內容可以改進為
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
username: root
password: root
type: com.alibaba.druid.pool.DruidDataSource
本文來自部落格園,作者:|舊市拾荒|,轉載請註明原文連結:https://www.cnblogs.com/xiaoyh/p/16468159.html