这篇文章主要是记录这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学习的一些思考和若是本身是架构师会怎么用这个框架的一些大胆的想法.