完美的mybatis通用dao實現

2021-08-03 04:54:15 字數 902 閱讀 9507

場景:

於是開始了自己探索實現mybatis通用dao之路。

思路一:

annotation sqlproviderannotation = method.getannotation(sqlproviderannotationtype);

//todo modified by zhoujiaping,at 2017-05-14 修改原始碼,支援sqlprovider寫帶標籤的動態sql

if(providerhelper.isscriptsqlprovider(sqlproviderannotation, sqlproviderannotationtype)),parametertype,languagedriver);

}else

}return null;

功能確實是實現了,有個小問題,每次都重複執行生成sql的**。效率可能會受影響(沒測過效率),不過這可以通過快取生成的sql解決。

更大的問題是,修改了原始碼。修改原始碼意味著**可靠性下降。盡量不要把修改的原始碼用於生產環境。但是我的初衷就是用於生產環境啊。

思路二:

思路三:

基於mybatis***外掛程式機制實現。

這個思路其實是最開始的思路,但是由於一開始對mybatis原理一點都不理解(用mybatis不久),所以嘗試了也沒找到方法。後來,根據前面的實現,再看了兩次原始碼,發現這個思路是可行的。於是又開始嘗試。

這個版本算是最終版本了。優點,單錶操作的配置量極少,就實現了強大的功能。重構時非常方便。使用、理解起來也非常方便。一致的api、保證專案中各成員寫的**邏輯一致。強大的功能,使我們在做單表處理時的業務邏輯,盡可能的寫在業務層而不用寫在sql中。對效能的影響,幾乎可以忽略不計。除非外掛程式機制本身帶來的效能問題,該外掛程式不會降低效能。因為生成sql的語句,只在第一次對應介面被呼叫時執行。外掛程式易用,學習成本非常低。

完美的代價

問題描述 回文串,是一種特殊的字串,它從左往右讀和從右往左讀是一樣的。小龍龍認為回文串 才是完美的。現在給你乙個串,它不一定是回文的,請你計算最少的交換次數使得該串變成乙個完美 的回文串。交換的定義是 交換兩個相鄰的字元,例如 mamad 第一次交換 ad mamda 第二次交換 md madma ...

完美的序列

題目描述 lyk 認為乙個完美的序列要滿足這樣的條件 對於任意兩個位置上的數都不相同。然而並不是所有的序列都滿足這樣的條件。於是 lyk 想將序列上的每乙個元素都增加一些數字 當然也可以選擇不增加 使得整個序列變成美妙的序列。具體地,lyk 可以花費 1 點代價將第 i 個位置上的數增加 1,現在 ...

完美的素數

time limit 1000ms memory limit 65536kb submit statistic discuss problem description 素數又稱質數。指乙個大於1的自然數,除了1和此整數自身外,不能被其他自然數整除的數。我們定義 如果乙個素數是完美的素數,當且僅當它的...