本文主要针对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语句书写的心得的更多相关文章

  1. Mybatis中动态SQL语句中的parameterType不同数据类型的用法

    Mybatis中动态SQL语句中的parameterType不同数据类型的用法1. 简单数据类型,    此时#{id,jdbcType=INTEGER}中id可以取任意名字如#{a,jdbcType ...

  2. MyBatis 中实现SQL语句中in的操作 (11)

    MyBatis 中实现SQL语句中in的操作 概括:应用myBatis实现SQL查询中IN的操作 1.数据库结构及其数据 2.mapper.xml文件 <?xml version="1 ...

  3. mybatis中的查询语句in用法的相关问题

    在开发的时候,mybatisl中使用in的时候会遇到一些问题,如果我们传的参数是String类型,以“,”来进行隔开的,例如:参数是0,1,2字符串,mybatis中的语句如下 <select ...

  4. 逆向工程生成的mybatis中mapper文件。mapper接口,实例化成对象

    逆向工程生成的mybatis中mapper文件中,*mapper文件只是接口,而不是类文件.但是却可以通过spring的容器获得实例. 例如: //1.获得mapper代理对象,从spring容器获得 ...

  5. 控制台输出 mybatis 中的sql语句

    控制台输出 mybatis 中的sql语句 在 log4j.xml 文件中 增加如下配置 <!-- mybatis 输出的sql,DEBUG级别 --> <logger name=& ...

  6. MyBatis中动态SQL语句完成多条件查询

    一看这标题,我都感觉到是mybatis在动态SQL语句中的多条件查询是多么的强大,不仅让我们用SQL语句完成了对数据库的操作:还通过一些条件选择语句让我们SQL的多条件.动态查询更加容易.简洁.直观. ...

  7. MyBatis 中 Mapper 接口的使用原理

    MyBatis 中 Mapper 接口的使用原理 MyBatis 3 推荐使用 Mapper 接口的方式来执行 xml 配置中的 SQL,用起来很方便,也很灵活.在方便之余,想了解一下这是如何实现的, ...

  8. mybatis 中mapper 的namespace有什么用

    原文:http://zhidao.baidu.com/link?url=ovFuTn7-02s7Qd40BOnwHImuPxNg8tXJF3nrx1SSngNY5e0CaSP1E4C9E5J6Xv5f ...

  9. 关于使用mybatis中mapper instrances,通过session另一种操作方式

    String resource = "mybatis-config.xml"; InputStream inputStream = null; try { // 获取SqlSess ...

随机推荐

  1. 【译】Asp.net mvc 使用ITextSharp PDF to HTML (解决img标签问题)

    前言:因项目需求,需要将HTML代码转成PDF.大致上已经实现了,可以是发现使用ITextSharp(我现在的版本是5.5.9)的时候,img标签中的src只能跟绝对路径. 在百度上找了一个上午,有一 ...

  2. 使用java泛型设计通用方法

    泛型是Java SE 1.5的新特性, 泛型的本质是参数化类型, 也就是说所操作的数据类型被指定为一个参数. 因此我们可以利用泛型和反射来设计一些通用方法. 现在有2张表, 一张user表和一张stu ...

  3. 记录一次bug解决过程:git深入学习和JDK8新特性

    一 总结 熟悉廖雪峰git基础; 由于git跟踪的是修改,而不是版本号:因此对于修改撤销的操作,文件在eclipse中依旧有>修改标记,这点不同于svn. 二 BUG描述:熟悉Git基础 在Gi ...

  4. 2015年软件测试STATE报告

    STATE OF TESTING 2015 Report 测试职业的地理位置分配 大部分有5年以上工作经验 大部分是Test Leader   测试工程师角色   测试工程师怎么工作的? 测试中的软件 ...

  5. 《连载 | 物联网框架ServerSuperIO教程》1.4种通讯模式机制。附小文:招.NET开发,结果他转JAVA了,一切都是为了生活

    参考文章: 1.SuperIO通讯框架介绍,含通信本质 2.C#跨平台物联网通讯框架ServerSuperIO(SSIO) 一.感慨 上大学的时候,没有学过C#,花了5块钱在地坛书市买了一本教程,也就 ...

  6. DataView详解

    dataview可以用于对你的datatable筛选,搜索,排序,编辑和导航.可以方便对databale的操作. 先来看一下它有哪些属性: 接下来是方法: 我们怎么使用它呢? public datat ...

  7. swift 学习笔记[1]

    最近在IMOOK(网站)上自学了下swift , 总结下swift相对其他语言的不同之处 , 方便熟悉其他语言的程序员,熟悉swift语言的特性. 1. swift 的特别之处就是可以在原有的类上 , ...

  8. [AlwaysOn Availability Groups]AlwaysOn Ring Buffers

    AlwaysOn Ring Buffers 一些AlwaysOn的诊断信息可以从SQL Server ring buffers.或者从sys.dm_os_ring_buffers.ring buffe ...

  9. JavaScript错误/异常处理

    JavaScript Try...Catch 语句 介绍:JavaScript中的try...carch语句的作用和C#中的try...catch语句的作用一样, 都是捕获并处理异常. 语法: try ...

  10. 介绍几个好用的vs插件

    1.打开扩展管理器. 1.jsenhancement插件. 参考文章:http://www.cnblogs.com/dudu/archive/2011/02/27/vs2010_extension_J ...