关于mybatis中mapper.xmlSQL语句书写的心得
本文主要针对MySQL
----------------------------------------------------------------------------------------------------------
用generatorConfig.xml工具生成我有总结过:http://www.cnblogs.com/fengchaoLove/p/5790352.html
了解的可以去看看。
本文主要针对纯手写。
-----------------------------------------------------------------------------------------------------------
mapper.xml-->dao接口-->service-->Controller
Entity实体类
增删改查,我们先说查select
select *(要查询的字段)from 表名 where id='',and ...
mapper.xml;
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--客户映射 指定到dao接口 -->
<mapper namespace="com.hebg3.mobiledealer.modules.client.sales.dao.CustomerDao">
<!--id与dao接口的方法名一直,指定结果类型,和参数类型 -->
<select id="get" resultType="TCustomer" paramType="string">
SELECT
*
FROM t_customer a
WHERE a.id = #{id}<!--主键 -->
但在工作中,我们发现其实我们要查的没有那么简单,和我学习时候的几点出入:
1.实体类要用驼峰命名,而数据库中的字段是下划线割开,导致unknown错误。
2.我们往往不是通过一个字段来查询,是好几个字段,甚至还有动态查询(有这个字段就查,没有就忽略)。
3.条件查询中有List,需要循环查找
4.条件中有关模糊查询。
先来解决第一个问题:
<!-- 库存映射 -->
<mapper namespace="com.hebg3.mobiledealer.modules.client.store.order.dao.OrderDao"> <sql id="tOrderColumns">
a.id AS "id",<!-- 主键 -->
a.order_no AS "orderNo",<!-- 订单编号 -->
a.t_customer_id AS "customer.id",<!-- 客户编号 -->
a.sys_office_id AS "companyOffice.id",<!-- 公司编号 -->
a.order_date AS "orderDate",<!-- 订单日期 -->
a.document_status AS "documentStatus",<!-- 订单状态 -->
a.send_date AS "sendDate",<!-- 发送时间 -->
a.open_id AS "openId",<!-- 微信编号 -->
a.create_by AS "createBy.id",<!-- 建立人 -->
a.create_date AS "createDate",<!-- 建立时间 -->
a.update_by AS "updateBy.id",<!-- 更新人 -->
a.update_date AS "updateDate",<!-- 更新时间 -->
a.remarks AS "remarks",<!-- 备注 -->
a.del_flag AS "delFlag",<!-- 删除标志 --> </sql> <!-- 根据条件取得 订单信息列表 -->
<select id="findPageOrder" resultType="TOrder">
SELECT
<!-- refid属性与上面spl标签的Id一致 -->
<include refid="tOrderColumns" />
FROM t_order a
<include refid="tOrderJoins" />
<where> <if test="Id!=null and id!=''">
id=#{Id}
</if> </select>
<if>标签实现动态查询。
如果想再加入一个查询条件;
在if标签 下面加入
<if test="documentStatus!=null and documentStatus!=''">
AND a.document_status =#{documentStatus}
</if>
如果查询条件中有List集合,可以在参数类中加入List类型的属性,比如是List<String> documentStatusList:并生成get,set方法;
<if test="documentStatusList != null"><!-- 根据单据状态查找 -->
AND a.document_status in
<!-- foreach标签需要指定四个属性,item,index下标,collection要与指定的属性名一直,open指定断开符号和结束符号 -->
<foreach item="item" index="index" collection="documentStatusList" open="(" separator="," close=")">
#{item}
</foreach> </if>
当然如果你想排序的话
<choose>
<when test="page !=null and page.orderBy != null and page.orderBy != ''"><!-- 根据 排序字段 排序 -->
ORDER BY ${page.orderBy}
</when>
<otherwise>
ORDER BY a.create_date DESC
</otherwise>
</choose>
几个注意的细节例如

这其中customer都是实体类。
希望对大家有所帮助。。
关于mybatis中mapper.xmlSQL语句书写的心得的更多相关文章
- Mybatis中动态SQL语句中的parameterType不同数据类型的用法
Mybatis中动态SQL语句中的parameterType不同数据类型的用法1. 简单数据类型, 此时#{id,jdbcType=INTEGER}中id可以取任意名字如#{a,jdbcType ...
- MyBatis 中实现SQL语句中in的操作 (11)
MyBatis 中实现SQL语句中in的操作 概括:应用myBatis实现SQL查询中IN的操作 1.数据库结构及其数据 2.mapper.xml文件 <?xml version="1 ...
- mybatis中的查询语句in用法的相关问题
在开发的时候,mybatisl中使用in的时候会遇到一些问题,如果我们传的参数是String类型,以“,”来进行隔开的,例如:参数是0,1,2字符串,mybatis中的语句如下 <select ...
- 逆向工程生成的mybatis中mapper文件。mapper接口,实例化成对象
逆向工程生成的mybatis中mapper文件中,*mapper文件只是接口,而不是类文件.但是却可以通过spring的容器获得实例. 例如: //1.获得mapper代理对象,从spring容器获得 ...
- 控制台输出 mybatis 中的sql语句
控制台输出 mybatis 中的sql语句 在 log4j.xml 文件中 增加如下配置 <!-- mybatis 输出的sql,DEBUG级别 --> <logger name=& ...
- MyBatis中动态SQL语句完成多条件查询
一看这标题,我都感觉到是mybatis在动态SQL语句中的多条件查询是多么的强大,不仅让我们用SQL语句完成了对数据库的操作:还通过一些条件选择语句让我们SQL的多条件.动态查询更加容易.简洁.直观. ...
- MyBatis 中 Mapper 接口的使用原理
MyBatis 中 Mapper 接口的使用原理 MyBatis 3 推荐使用 Mapper 接口的方式来执行 xml 配置中的 SQL,用起来很方便,也很灵活.在方便之余,想了解一下这是如何实现的, ...
- mybatis 中mapper 的namespace有什么用
原文:http://zhidao.baidu.com/link?url=ovFuTn7-02s7Qd40BOnwHImuPxNg8tXJF3nrx1SSngNY5e0CaSP1E4C9E5J6Xv5f ...
- 关于使用mybatis中mapper instrances,通过session另一种操作方式
String resource = "mybatis-config.xml"; InputStream inputStream = null; try { // 获取SqlSess ...
随机推荐
- TabControl 伸缩式菜单 仿照 uwp SplitView
留下备用笔记 之前用的Frame+Page的切换content<类似于一个contentControl 干多个事情>,但是发现页面content内容控件多的时候,每一次切换都有点卡,点击了 ...
- MySQL实现两张表数据的同步
有两张表A和B,要求往A里面插入一条记录的同时要向B里面也插入一条记录,向B里面插入一条记录的同时也向A插入一条记录.两张表的结构不同,需要将其中几个字段对应起来.可以用下面的触发器实现. 表A的触发 ...
- Python 基础之四初识Python数据类型
数字 Int,整型 Float,浮点型 Long,长整型 布尔 字符串 列表 元组 字典 1.数字 INT(整型) 在32位系统上,整数的位数为32位,取值范围为-2**31~2**31-1,即-21 ...
- 细谈Slick(5)- 学习体会和将来实际应用的一些想法
通过一段时间的学习和了解以及前面几篇关于Slick的讨论后对Slick这个函数式数据库编程工具有了些具体的了解.回顾我学习Slick的目的,产生了许多想法,觉着应该从实际的工作应用角度把我对Slick ...
- HTML5 数据集属性dataset
有时候在HTML元素上绑定一些额外信息,特别是JS选取操作这些元素时特别有帮助.通常我们会使用getAttribute()和setAttribute()来读和写非标题属性的值.但为此付出的代价是文档将 ...
- MVC Api 的跨项目路由
现有Momoda.Api项目,由于团队所有人在此项目下开发,导致耦合度太高,现从此接口项目中拆分出多个子项目从而避免对Momda.Api的改动导致“爆炸” MVCApi的跨项目路由和MVC有解决方式有 ...
- Struts2入门(四)——数据输入验证
一.前言 1.1.什么是输入验证?为什么需要输入验证? 在上一篇文章中,我们学习了数据类型转换,我们提到了表示层数据处理的两个方法,也提到了用户输入数据需要进行类型转换才能得到我们想要的数据,那么,我 ...
- opts=opts | |{}
var opts=opts || {}这个语句是一个赋值或者初始化语句 该语句在opts已经被初始化过后opts的值不变,即执行var opts=opts这一部分. 当opts未被初始化,即typeo ...
- JavaScript学习笔记5 之 计时器 & scroll、offset、client系列属性 & 图片无缝滚动
一.计时器 setInterval ( 函数/名称 , 毫秒数 )表示每经过一定的毫秒后,执行一次相应的函数(重复) setTimeout ( 函数/名称 , 毫秒数 ) 表示经过一定的毫秒后,只执行 ...
- TextField和TextView的限制输入长度
TextField的限制代理方法 只需要在这个代理方法里面code这样的代码就可以了 16 是长度可以自己设置 - (BOOL)textField:(UITextField *)textField s ...