spring boot整合mybatis,曾經的幾個小困惑和踩的坑。html
1、mybatis的結構mysql
mybatis和spring boot的整合,網上無數的教程,都是教你一步步集成,照着作沒問題,但作下來令我這半桶水有些知其然不知其因此然的感受。總結一下:spring
- 結構:實體層(pojo類)+數據訪問層(dao接口)+服務層(service類),而後就是在action層(controller類)使用service。
- 數據綁定:dao層有兩種方法將sql與方法鏈接起來,即xml或註解,各有各的好。
- dao層標註:dao層須要被框架掃描到。能夠在dao類中直接用@Mapper標註,也能夠在啓動類(XXXApplication)中用@MapperScan("xxx.dao")統一標註標註,也是各有各好
- service層:有的人喜歡用interface+class implements的方式,先定義一個接口,而後再用繼承接口方式來實現service。也能夠簡單一點直接定義service類。也是各有各好,我的認爲簡單項目就別整接口+繼承的方式。不過不管哪一種方法,都須要在service類中使用@Service註解來標註,不然不能被框架掃描到。
- 參考連接:https://blog.csdn.net/winter_chen001/article/details/7724902九、https://www.cnblogs.com/goloving/p/9126187.html。推薦後者,邏輯比較清晰。
2、mysql的自增字段sql
oracle中有序列號來保證id字段惟1、自增且能在代碼中獲取。mysql也能,建表時先定義主鍵、自增:create table log (id int(8) not null primary key auto_increment,...);服務器
在mybatis的插入配置中定義自增類:useGeneratedKeys="true" keyProperty="id"mybatis
在使用的時候注意:執行插入方法返回的並非新記錄的id值,新記錄的id值須要從實體類中的id屬性獲取。oracle
3、mysql的jdbc報錯app
mysql的服務端和客戶端jdbc須要匹配,主要有幾個問題:框架
- 6以上的jdbc,須要將com.mysql.jdbc.Driver 改成com.mysql.cj.jdbc.Driver
- 5.5以上的服務器要求默認要求創建SSL鏈接,此時經過設置useSSL=false來顯式禁用SSL鏈接:jdbc:mysql://localhost:3306/dev?useSSL=false
- 8的服務器若是用低版本客戶端鏈接報caching-sha2-password錯誤,須要修改相登陸戶名的密碼規則:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';FLUSH PRIVILEGES;
- 服務器版本和客戶端版本不一致時可能報錯:Unknown system variable 'query_cache_size',就須要在maven中根據服務器設置合適的jdbc版本