這篇文章主要是記錄這2個月我對mybatis的學習之後的一些感觸和一些若是我是架構師會怎麼在項目裏使用mybatis的一些大膽的想法.java
1.首先根據以前的學習我已經知道了mybatis generator這個插件..能夠自動生成代碼,幫咱們節約很多力氣..因此項目可使用.sql
咱們在數據庫裏創建表之後咱們可使用mybatis generator自動生成mapper dto xml文件.數據庫
這些包括了絕大部分單表的CRUD操做.能夠節約很是多的時間.mybatis
2.前面自動生成的mapper對應的XML我想把他名字改爲XXX2.xml架構
而後我再手寫一個XXX.xmlapp
這2個mapper XML裏的namespace都是同樣的,都對應那個mapper類.(我以爲這是mybatis很是好的一個特性,1個mapper類能夠對應多個XML,這樣我能夠分類把不一樣SQL些到不一樣XML文件裏便於維護)框架
爲何這樣分2個XML文件呢?由於若是下次數據庫修改過了.我就從新生成XML覆蓋XXX2.xml,而XXX.xml是由咱們本身維護,寫一些除了自動生成的CRUD之外的SQL.學習
這樣至關因而把自動生成的代碼和手動生成的代碼分離開了.下次改動表的時候維護起來會簡單不少.spa
3.在XXX.xml(本身維護的那個XML文件)裏我通常會寫幾個SQL插件
第一個SQL是
1 <sql id="baseColumn"> 2 id, a_b as aB, c_d as cD .............5 </sql>
就是表所有列名和對應的DTO的字段.列名能夠從自動生成的2.XML裏CV過來而後添加DTO的字段便可.下次數據庫改了直接在這裏修改就好了.
第二個SQL是
1 <sql id="basesql"> 2 select t.* from 3 (select 4 <include refid="baseColumn"></include> 5 from table_name ) t 6 </sql>
這個SQL其實就是select * from XXX.可是下次數據庫字段修改的時候這裏是不須要寫的.只要改以前的baseColumn便可.比較方便
第三個和第四個SQL是
1 <select id="queryBySql" resultType="cn.evun.tms.tm.dto.TmBatchDto" parameterType="java.util.Map"> 2 select t.* from ( 3 <include refid="basesql"></include> 4 ) t where 1=1 5 9 10 <if test="order !=null and order!=''"> 11 ORDER BY ${order} 12 </if> 13 LIMIT #{offset},#{limit} 14 </select> 15 16 <select id="countBySql" resultType="int" parameterType="java.util.Map"> 17 select count(1) from ( 18 <include refid="basesql"></include> 19 ) t where 1=1 23 </select>
這2個SQL主要是給界面上查詢前20條記錄那種datagrid用的.其實自動生成的代碼有方法能夠達到相似的查詢.可是我更喜歡本身寫.由於那種mybatis generator自動生成的方法須要再service裏拼接條件.
可能會產生大量if( .... !=null){拼接XXX條件}
我以爲仍是在這裏在dao裏本身寫可能複用性更高.
以上即是我這2個月對mybatis學習的一些思考和若是本身是架構師會怎麼用這個框架的一些大膽的想法.