主题

  这篇文章主要是记录这2个月我对mybatis的学习以后的一些感触和一些如果我是架构师会怎么在项目里使用mybatis的一些大胆的想法.

感想

1.首先根据之前的学习我已经知道了mybatis generator这个插件..可以自动生成代码,帮我们节约不少力气..所以项目可以使用.

我们在数据库里建立表以后我们可以使用mybatis generator自动生成mapper dto xml文件.

这些包括了绝大部分单表的CRUD操作.可以节约非常多的时间.

2.前面自动生成的mapper对应的XML我想把他名字改成XXX2.xml

然后我再手写一个XXX.xml

这2个mapper XML里的namespace都是一样的,都对应那个mapper类.(我觉得这是mybatis非常好的一个特性,1个mapper类可以对应多个XML,这样我可以分类把不同SQL些到不同XML文件里便于维护)

为什么这样分2个XML文件呢?因为如果下次数据库修改过了.我就重新生成XML覆盖XXX2.xml,而XXX.xml是由我们自己维护,写一些除了自动生成的CRUD以外的SQL.

这样相当于是把自动生成的代码和手动生成的代码分离开了.下次改动表的时候维护起来会简单很多.

3.在XXX.xml(自己维护的那个XML文件)里我一般会写几个SQL

第一个SQL是

     <sql id="baseColumn">
id, a_b as aB, c_d as cD ............. </sql>

就是表全部列名和对应的DTO的字段.列名可以从自动生成的2.XML里CV过来然后添加DTO的字段即可.下次数据库改了直接在这里修改就行了.

第二个SQL是

     <sql id="basesql">
select t.* from
(select
<include refid="baseColumn"></include>
from table_name ) t
</sql>

这个SQL其实就是select * from XXX.但是下次数据库字段修改的时候这里是不需要写的.只要改之前的baseColumn即可.比较方便

第三个和第四个SQL是

     <select id="queryBySql" resultType="cn.evun.tms.tm.dto.TmBatchDto" parameterType="java.util.Map">
select t.* from (
<include refid="basesql"></include>
) t where 1=1 <if test="order !=null and order!=''">
ORDER BY ${order}
</if>
LIMIT #{offset},#{limit}
</select> <select id="countBySql" resultType="int" parameterType="java.util.Map">
select count(1) from (
<include refid="basesql"></include>
) t where 1=1
</select>

这2个SQL主要是给界面上查询前20条记录那种datagrid用的.其实自动生成的代码有方法可以达到类似的查询.但是我更喜欢自己写.因为那种mybatis generator自动生成的方法需要再service里拼接条件.

可能会产生大量if( .... !=null){拼接XXX条件}

我觉得还是在这里在dao里自己写可能复用性更高.

以上便是我这2个月对mybatis学习的一些思考和如果自己是架构师会怎么用这个框架的一些大胆的想法.

mybatis 用法分享的更多相关文章

  1. 用c#开发微信 (10) JS-SDK 基本用法- 分享接口“发送到朋友”

    微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包.通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统的能力,同时可以直接使用微信分享. ...

  2. 用c#开发微信(10) JSSDK 基本用法 分享接口“发送到朋友”

    微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包.通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统的能力,同时可以直接使用微信分享. ...

  3. Mybatis用法小结

    select 1.基本用法 <select id="selectTableOne" resultType="com.test.entity.tableOne&quo ...

  4. mybatis用法

    转载:https://www.cnblogs.com/xdp-gacl/p/4261895.html 一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架 ...

  5. requirejs模块化框架用法分享

      我采用的是一个非常流行的库require.js. 一.为什么要用require.js? 最早的时候,所有Javascript代码都写在一个文件里面,只要加载这一个文件就够了.后来,代码越来越多,一 ...

  6. Bash Shell中Shift用法分享

    这篇文章主要介绍了Bash Shell中Shift的使用方法,需要的朋友可以参考下 shift可以用来向左移动位置参数.Shell的名字 $0第一个参数 $1第二个参数 $2第n个参数 $n所有参数 ...

  7. 用c#开发微信 (12) 微统计 - 阅读分享统计系统 2 业务逻辑实现

    微信平台自带的统计功能太简单,有时我们需要统计有哪些微信个人用户阅读.分享了微信公众号的手机网页,以及微信个人用户访问手机网页的来源:朋友圈分享访问.好友分享消息访问等.本系统实现了手机网页阅读.分享 ...

  8. 初识 tk.mybatis.mapper

    在博客园发表Mybatis Dynamic Query后,一位园友问我知不知道通用mapper,仔细去找了一下,还真的有啊,比较好的就是abel533写的tk.mybatis.mapper. 本次例子 ...

  9. 初识 tk.mybatis.mapper 通用mapper

    在博客园发表Mybatis Dynamic Query后,一位园友问我知不知道通用mapper,仔细去找了一下,还真的有啊,比较好的就是abel533写的tk.mybatis.mapper. 本次例子 ...

随机推荐

  1. 线性回归 Linear regression(2)线性回归梯度下降中学习率的讨论

    这篇博客针对的AndrewNg在公开课中未讲到的,线性回归梯度下降的学习率进行讨论,并且结合例子讨论梯度下降初值的问题. 线性回归梯度下降中的学习率 上一篇博客中我们推导了线性回归,并且用梯度下降来求 ...

  2. 一图说明offsetTop、top、clientTop、scrollTop等

    offsetParent:该属性返回一个对象的引用,这个对象是距离调用offsetParent的元素最近的(在包含层次中最靠近的),已进行过CSS定位的容器元素. 如果这个容器元素未进行CSS定位, ...

  3. 20179223《Linux内核原理与分析》第十一周学习笔记

    缓冲区溢出漏洞实验 一.实验简介 缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况.这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段.这一漏洞的出现是由于数据缓冲器和 ...

  4. 《selenium2 python 自动化测试实战》(10)——下拉框和alert

    # coding: utf-8 from selenium import webdriverfrom selenium.webdriver.common.action_chains import Ac ...

  5. Linux CentOS6.5 命令修改网络配置

    登陆成功后,编辑网络信息文件: 命令:vi /etc/sysconfig/network-scripts/ifcfg-eth0 修改配置如下图并保存,子网掩码.ip.默认网关根据自己网络进行调整: 永 ...

  6. 2018-10-09 可用的前端 CDN

    2018-10-09 可用的前端 CDN 360 前端静态资源库 https://cdn.baomitu.com/ 新浪的前端 CDN http://lib.sinaapp.com/ 又拍云的前端库慢 ...

  7. jeecg中ajax传值的前端js和后台代码

    前端js: var b=1; $.ajax({ type : "POST", --Post请求方式 url : 'orderController.do?wuliao', --路径 ...

  8. HDOJ5521(巧妙构建完全图)

    Meeting Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  9. mac 终端命令行操作

    1,root 切换 sudo su 2,安装brew curl -L http://github.com/mxcl/homebrew/tarball/master | tar xz --strip 1 ...

  10. java代码--------构造方法的调用

    总结: package com.sads; //构造方法何时被调用, //构造方法里的内容先执行 public class Sdw { static { System.out.println(&quo ...