1、新增时获得主键
<insert ...>
  <selectKey resultType="java.lang.Integer" keyProperty="id" order="AFTER">
  SELECT LAST_INSERT_ID()
  </selectKey>
  INSERT INTO ...
</insert>

<insert id="insert" parameterType="com.test.User" keyProperty="id" useGeneratedKeys="true" >
  INSERT INTO ...
</insert>

2、Boolean判断
<if test="isReturnReport !=null and isReturnReport.toString() == 'true'.toString()">
...
</if>

3、大于、小于符号转义
      & &amp;
      " &quot;
      ' &apos;
大于号: >  &gt;   或 <![CDATA[ > ]]>
小于号: <     &lt;   或 <![CDATA[ < ]]>
eg.
  AND DATE_FORMAT(create_date,'%Y-%m-%d') &gt;= #{beginDate, jdbcType=VARCHAR}
  AND DATE_FORMAT(create_date,'%Y-%m-%d') <![CDATA[ >= ]]> #{beginDate, jdbcType=VARCHAR}

4、参数为逗号隔开的字符串
  FIND_IN_SET(field,param)函数:
  AND FIND_IN_SET(user_id,#{_parameter})
  _parameter:
  获取传入的原参数值,不作预编译处理

5、模糊查询
AND settle_name LIKE CONCAT('%',#{settleName,jdbcType=VARCHAR},'%')

6、级联查询
一对多查询:
一中的xml:
<collection property="optionsList"
  column="id"
  ofType="com.hs.qmct.app.web.model.question.QuestionOptions"
  select="com.hs.qmct.app.web.dao.question.QuestionOptionsMapper.selectByQuestionId">
</collection>
多中的dao:
List<QuestionOptions> selectByQuestionId(Integer questionId);

传递多个参数时:
一中的xml:
  column= "{prop1=col1,prop2=col2}"
多中的xml:
  <select parameterType="java.util.Map" ....>
  select .... where val1=prop1 and val2=prop2
  </select>

多对一查询:
一中的xml:
<association property="district"
  column="receive_district_id"
  javaType="com.hs.qmct.app.web.model.district.District"
  select="com.hs.qmct.app.web.dao.district.DistrictMapper.selectByPrimaryKey">
</association>
另一个一中的dao:
  District selectByPrimaryKey(Integer id);

7、传参占位符#{}和${}的区别
#{} 具有预编译效果,一般作为条件传参时使用,可防止sql注入
${} 不具有预编译效果,一般在排序中会用到,偶尔也会作为条件传参
eg1.
  SELECT id from tables where id=#{id} 解析为:SELECT id from tables where id=?
  SELECT id from tables where id='${id}' 解析为:SELECT id from tables where id=原参数值
eg2.
  ORDER BY ${param} 此时param是一个列名
  ORDER BY #{_parameter} 此时传入的参数有且仅为一个列名

8、批量新增使用forEach
int batchInsert(List<Event> records);

<!--批量新增事件-->
<insert id="batchInsert">
  insert into
    hserp_sys_event(id, event_name_parent, event_name,event_desc, class_path, interface_path,create_by, create_date)
  values
    <foreach item="item" index="index" collection="list" separator=",">
    (#{item.id}, #{item.eventNameParent}, #{item.eventName},
    #{item.eventDesc}, #{item.classPath}, #{item.interfacePath},
    #{item.createBy}, sysdate())
  </foreach>
  on DUPLICATE key update last_update_date = sysdate()
</insert>

传参主要有一下3种情况:
1. 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
2. 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
3. 如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了

9、解决int类型返回报错
  IFNULL(MAX(SORT),0)

10、一次执行多条sql
  需要在xml中加入
  <property name="url" value="jdbc:mysql://localhost:3306/how2java?characterEncoding=UTF-8&allowMultiQueries=true"/>
  或在配置文件中加入
  hikariConfig.security.jdbcUrl=jdbc:mysql://xx.xx.xx:3306/xxxxx?characterEncoding=utf-8&autoReconnect=true&failOverReadOnly=false&allowMultiQueries=true

mybatis 常用的更多相关文章

  1. Mybatis 常用注解

    Mybatis常用注解对应的目标和标签如表所示: 注解 目标 对应的XML标签 @CacheNamespace 类 <cache> @CacheNamespaceRef 类 <cac ...

  2. MyBatis 常用写法

    MyBatis 常用写法 1.forEach 循环   forEach 元素的属性主要有 item, idnex, collection, open, separator, close. collec ...

  3. Mybatis常用xml

    工作中mybatis常用的xml代码 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE ma ...

  4. MyBatis - 常用标签与动态Sql

    MyBatis常用标签 ● 定义sql语句:select.insert.delete.update ● 配置JAVA对象属性与查询结构及中列明对应的关系:resultMap ● 控制动态sql拼接:i ...

  5. Mybatis 常用标签

    MyBatis 的强大特性之一便是它的动态 SQL.如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦.拼接的时候要确保不能忘了必要的空格,还要注意省掉 ...

  6. mybatis常用配置

    前面两篇博客我们简单介绍了mybatis的使用,但是在mybatis的配置问题上我们只是使用了最基础的配置,本文我们就来说说其他一些常用的配置.如果小伙伴对mybatis尚不了解,可以先参考这两篇博客 ...

  7. [Mybatis]Mybatis 常用标签及功能整理

    Mybatis中生成动态SQL的标签有四类,分别是: if choose (when, otherwise) trim (where, set) foreach 1.if 当需要动态生成where条件 ...

  8. mybatis常用标签

    1. 定义sql语句 1.1 select 标签 属性介绍: id :唯一的标识符. parameterType:传给此语句的参数的全路径名或别名 例:com.test.poso.User或user ...

  9. MyBatis常用对象SqlSessionFactory和SqlSession介绍和运用

    学习框架一个比较好的路径阅读源码.本文介绍的SqlSessionFactory和SqlSession.可以通过了解SqlSessionFactory接口和SqlSession接口以及两个的实现类入手, ...

  10. [Mybatis]Mybatis常用操作

    Mybatis是目前国内比较流行的ORM框架,特点是可以写灵活的SQL语句,非常适合中小企业的面向数据库开发. 本文总结自己开发过程中常用的Mybatis操作. 一.插入操作 主键自增插入单条 < ...

随机推荐

  1. C# AESCBC256 与 java AESCBC256 加解密

    和某上市公司对接接口,他们试用 java AES CBC PKCS5 256 加解密.网上C# 基本不合适. 注意:C# PKCS7 对应 java PKCS5 /// <summary> ...

  2. C#导入Excel、Excel导入、导入.xls 、导入.xlsx、Excel2003版本、Excel2007版本

    C#导入Excel: 1.选择Excel 03版文件 2.选择需要读取数据的Excel工作表   3.选择工作表中需要读取的列 源码地址在图片下面,不要点击图片,点击下载地址跳转下载.

  3. call,apply,bind的用法与区别

    1.call/apply/bind方法的来源 首先,在使用call,apply,bind方法时,我们有必要知道这三个方法究竟是来自哪里?为什么可以使用的到这三个方法? call,apply,bind这 ...

  4. JavaScript 变量及类型

    在JavaScript中,所有的number都是以64位浮点型数据来存储的.所有的编程语言,包括js,对浮点型数据的精度都很难确定. var a = 0.1 + 0.2; console.log(a ...

  5. jQuery效果之jQuery实现图片的依次加载图片

    css代码: ;;} ul#portfolio li{float: left;margin:0 5px 0 0;width:250px;height: 250px;list-style: none;} ...

  6. 如何用ABP框架快速完成项目(13) - 用ABP遇到难题项目受阻时如何避免项目延迟

    只有一个人在开发ABP, 遇到难题时可以: 最根本的, 简化问题, 不要盖楼式结构 前端优先用VSCode看文档, 后端看官网文档. 看ABP源码/issues 到QQ群和微信群里寻求外援.   我建 ...

  7. 解决在TP5中无法使用快递鸟的即时查询API

    快递鸟的接口对接其实很简单,先去官网注册账号,登陆把基本信息填好,然后在产品管理中订购一下“物流查询”,免费,不过其他产品是收费,免费的有对接口调用频率限制,结合自己的应用流量够用就可以. 使用前复制 ...

  8. 安装docker17.06.0版本报错和解决方法

    本人在自己电脑的虚拟机里安装docker ce 17.06.0版本的时候报如下错误: [root@manager2 yum.repos.d]# yum install docker-ce-17.06. ...

  9. Jump Flood Algorithms for Centroidal Voronoi Tessellation

    Brief Implemented both CPU and GPU version, you could consider this as the basic playground to imple ...

  10. <解决方法>Centos安装使用Chromedriver

    一.安装Chrome 我安装好Centos系统后,就在网上去找Chrome浏览器的安装方法,使用过yum,rpm都安装不上,会报错,然后询问公司的运维,他给我了个包,然后使用:yum localins ...