環境搭建以及前置知識回顧
SpringBoot中有兩種start的形式:
- 官方:spring-boot-starter-*
- 第三方:*-spring-boot-starter
Mybatis屬於第三方,所以我們需要找他的官網、配置文件等。
貼心連結:Github
進入後記得切換tags
作者使用的版本是最新的2.2.0;
找到它下面的pom.xml,可以得到:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
在網頁下方,找到快速開始文件:
回顧前面mybatis的使用過程:
- 匯入mybatis依賴和資料庫驅動
- 連線資料庫
- 增加全域性配置檔案,一般是(mybatis-config.xml)
- 編寫工具類:SqlSessionFactory
- 使用sqlSession
- 編寫Mapper
- .......
Druid的配置:Druid
分析Mybatis啟動器自動配置
找到MybatisAutoConfiguration,
@ConditionalOnSingleCandidate(DataSource.class)
只允許一個資料來源在容器中。
@EnableConfigurationProperties(MybatisProperties.class)
@EnableConfigurationProperties(類.class)
- 開啟類配置繫結功能
- 把這個類這個元件自動註冊到容器中
我們進入MybatisProperties.class中檢視:
由上圖可知,我們只需要在配置檔案中使用mybatis為前置,就可以使用了。
使用配置搞清楚後,我們來看下啟動器給我們自動裝配了什麼功能:
-
@Bean @ConditionalOnMissingBean public SqlSessionFactory sqlSessionFactory(DataSource dataSource)
對應的是之前的使用過程第4步,現在自動配置好了
-
@Bean @ConditionalOnMissingBean public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory)
對應之前的使用過程第5步,可以進入**SqlSessionTemplate **看下,SqlSessionTemplate組合了SqlSession。
-
@Import(AutoConfiguredMapperScannerRegistrar.class),只要我們寫的操作MyBatis的介面,標註了 @Mapper 就會被自動掃描進來,對應之前的使用過程第6步。
整合Mybatis
目錄結構:
首先建立一個全域性配置檔案(mybatis-config.xml):
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
</configuration>
Configuration中包含:包括獲取資料庫連線例項的資料來源(DataSource)以及決定事務作用域和控制方式的事務管理器(TransactionManager)。因為我們的資料來源已經通過Druid配置好了,所以這裡直接清空就好。
實體類
建立實體類,儘可能與資料庫欄位名保持一致。
import lombok.Data;
@Data
public class User {
private int id;
private String username;
private String password;
}
Mapper層(對照Dao)
建立GetUserMapper介面;
import com.xbhog.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper
public interface GetUserMapper {
public User getUserid(int id);
}
實現介面:
建立getUserMapper.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.xbhog.Mapper.GetUserMapper">
<select id="getUserid" resultType="com.xbhog.pojo.User">
select * from user where id = #{id}
</select>
</mapper>
其中id對應的是GetUserMapper介面中抽象方法getUserid,結果集型別對應的返回值型別User。
其實我們現在可以建立controller來實現訪問了,為了方便後序功能的擴充套件,我們可以建立一個service層,有一句話說的好,出現問題,沒有加一層解決不了的,有的話那就再加一層。
Service層:DemoService
import com.xbhog.Mapper.GetUserMapper;
import com.xbhog.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class DemoService {
@Autowired
GetUserMapper getUserMapper;
public User getUser(int id){
return getUserMapper.getUserid(id);
}
}
從容器中取出GetUserMapper,在service層進行呼叫。如果只是測試,可以直接省略建立Controller.
建立Controller:
@Controller
public class Mycontro {
@Autowired
DemoService demoService;
@ResponseBody
@GetMapping("/user")
public User getById(@RequestParam("id") int id){
return demoService.getUser(id);
}
}
上述步驟完成後需要在mybatis中註冊,在Springboot中需要在配置檔案中:
mybatis:
config-location: classpath:mybatis/mybatis-config.xml #全域性配置檔案位置
mapper-locations: classpath:mybatis/Mapper/*.xml #sql對映檔案位置
完整配置:
spring:
datasource:
url: jdbc:mysql://localhost:3306/vuesite
username: root
password: 123456
driver-class-name: com.mysql.jdbc.Driver
druid:
aop-patterns: com.xbhog.*
filters: stat,wall
stat-view-servlet:
enabled: true
login-password: admin
login-username: admin
reset-enable: false
web-stat-filter:
enabled: true
url-pattern: /*
exclusions: '*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*'
filter:
stat:
slow-sql-millis: 1000
log-slow-sql: true
enabled: true
wall:
enabled: true
config:
drop-table-allow: false
mybatis:
config-location: classpath:mybatis/mybatis-config.xml
mapper-locations: classpath:mybatis/Mapper/*.xml
測試:
輸入:localhost:8080/user?id=2 查詢id為2的使用者
結果:
{"id":2,"username":"demo","password":"123456"}
如果之前也配置了Druid,可以檢視http://localhost:8080/druid/
注意點
駝峰命名:
如果資料庫中的欄位是駝峰命名(Camel-Case),那麼我們需要在mybatis中開啟駝峰命名,不開啟的話,是無法查詢到對應的資料。
在全域性配置檔案中:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
全域性配置設定:
其實在springBoot中的mybatis-start中已經有全域性配置屬性了。
找到MybatisProperties配置屬性類。
進入Configuration,發現我們需要的配置已經在裡面設定好了,以後只需要在配置檔案中設定屬性即可:
所以我們可以刪除全域性配置檔案。在yaml或者properties中配置:
mybatis:
# config-location: classpath:mybatis/mybatis-config.xml
mapper-locations: classpath:mybatis/Mapper/*.xml
configuration: #全域性配置檔案
map-underscore-to-camel-case: true
總結mybatis整合過程:
-
匯入mybatis官方starter
-
編寫mapper介面。標準@Mapper註解
-
編寫sql對映檔案並繫結mapper介面
-
在application.yaml中指定Mapper配置檔案的位置,以及指定全域性配置檔案的資訊 (建議;配置在mybatis.configuration)
結束:
如果你看到這裡或者正好對你有所幫助,希望能點個關注或者推薦,感謝;
有錯誤的地方,歡迎在評論指出,作者看到會進行修改。