1、Could not autowire. No beans of 'UserMapper' type found.
解:對應的mapper接口寫@Repository
@Repository // 代表持久層
public interface UserMapper extends BaseMapper<User> {
// 所有的CRUD操作都已經編寫完成了
// 你不需要像以前的配置一大堆文件了!
}
2、Error querying database. Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: The SQL execution time is too large, please optimize !
解:mybatisplus的性能分析攔截器,用於輸出每條 SQL 語句及其執行時間,在MyBatisPlusConfig中修改參數:maxTime,它是 SQL 執行最大時長,超過自動停止運行
/**
* SQL執行效率插件
*/
@Bean
@Profile({"dev","test"})// 設置 dev test 環境開啟,保證我們的效率
public PerformanceInterceptor performanceInterceptor() {
PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
performanceInterceptor.setMaxTime(800); //ms 設置sql執行的最大時間,如果超過了則不執行
performanceInterceptor.setFormat(true);
return performanceInterceptor;
}
3、Error attempting to get column 'create_time' from result set. Cause: java.sql.SQLException: Zero date value prohibited(0000-00-00 00:00:00)
解:在數據源源配置(application.properties)中的spring.datasource.url末尾添加: &zeroDateTimeBehavior=convertToNull
# 數據庫連接配置
spring.datasource.username=root
spring.datasource.password=199829.
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&zeroDateTimeBehavior=convertToNull
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
4、數據庫不能設計表的datetime字段的默認值為CURRENT_TIMRSTAMP,可以考慮將datetime改為timestamp,並且可能需要在my.ini配置文件中添加sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
character-set-server=utf8
bind-address = 0.0.0.0
port = 3306
basedir=D:\MySQL\mysql-5.7.29-winx64
datadir=D:\MySQL\mysql-5.7.29-winx64\data
max_connections=2000
default-storage-engine=INNODB
[mysql]
default-character-set=utf8
[mysql.server]
default-character-set=utf8
[client]
default-character-set=utf8
5、@EnableTransactionManagement 這個注解是開啟事務管理的,默認開啟,可寫可不寫,相關鏈接:https://blog.csdn.net/qq_32370913/article/details/105924209
6、lombok的幾個注解:
@Data:使用這個注解,就不用再去手寫Getter,Setter,equals,canEqual,hasCode,toString等方法了,注解后在編譯時會自動加進去。
@AllArgsConstructor:使用后添加一個有參構造函數
@NoArgsConstructor:使用后創建一個無參構造函數
@Builder:作用之一是為了解決在某個類有很多構造函數的情況,也省去寫很多構造函數的麻煩,在設計模式中的思想是:用一個內部類去實例化一個對象,避免一個類出現過多構造函數
7、@Autowired與@Resource的區別:
@Autowired只按照byType 注入;
@Resource默認按byName自動注入,也提供按照byType 注入
詳細點:
(1)@Autowired:按類型裝配依賴對象,默認情況下它要求依賴對象必須存在,如果允許null值,可以設置它required屬性為false。
如果我們想使用按名稱裝配,可以讓它結合@Qualifier注解一起使用。
(2)@Resource有兩個中重要的屬性:name和type。name屬性指定byName,
如果沒有指定name屬性,當注解標注在字段上,即默認取字段的名稱作為bean名稱尋找依賴對象,
當注解標注在屬性的setter方法上,即默認取屬性名作為bean名稱尋找依賴對象。
需要注意的是,@Resource如果沒有指定name屬性,並且按照默認的名稱仍然找不到依賴對象時, @Resource注解會回退到按類型裝配。但一旦指定了name屬性,就只能按名稱裝配。
(3)@Resource裝配順序
1. 如果同時指定了name和type,則從Spring上下文中找到唯一匹配的bean進行裝配,找不到則拋出異常
2. 如果指定了name,則從上下文中查找名稱(id)匹配的bean進行裝配,找不到則拋出異常
3. 如果指定了type,則從上下文中找到類型匹配的唯一bean進行裝配,找不到或者找到多個,都會拋出異常
4. 如果既沒有指定name,又沒有指定type,則自動按照byName方式進行裝配;如果沒有匹配,則回退為一個原始類型進行匹配,如果匹配則自動裝配;
(4)5. 推薦使用@Resource注解在字段上,這樣就不用寫setter方法了.並且這個注解是屬於J2EE的
作者:秦子軒
鏈接:https://www.zhihu.com/question/39356740/answer/1297401530
來源:知乎
8、Mybatis plus 中數據庫中字段有SQL關鍵字的處理方法
mysql的數據表中有一個字段desc,如果使用mybatis plus來訪問數據庫,使用繼承BaseMapper<>的方法。自己如果不書寫xml,自動構成的sql會出錯。(特殊字段需要轉義,在實體類對應的屬性上加@TableField("`屬性名`"))
例:
@TableField("`desc`")
private String desc;
9、Mybatis的xml文件不支持注釋,沒用的代碼一定要刪掉噢
10、@Param與@RequestParam,形似意不同
@RequestParam 用於controller層
(1)解決前台參數名稱與后台接收參數變量名稱不一致的問題,等價於request.getParam
(2)可設置value:指定參數名 default:指定變量初始值 require(true默認/false):指定參數是否為必傳
@Param 用於dao層
個人理解為修飾參數,使得mapper.xml中的參數與后台的參數對應上,也增強了可讀性
如果兩者參數名一致得話,spring會自動進行封裝,不一致的時候就需要手動去使其對應上。
@Param是mybatis中的注解,用注解來簡化xml配置的時候,@Param注解的作用是給參數命名,參數命名后就能根據名字得到參數值,正確的將參數傳入sql語句中