更多的语法请参考官网

http://www.mybatis.org/mybatis-3/dynamic-sql.html#

环境:MySQL5.6,jdk1.8

建议:所有的参数加上@Param

resultMap的意义:将查询中得到的结果通过属性的setter方法注入属性里。如果未定义resultMap,则虽然数据库查询成功了但会返回null

insert

插入自增主键

如果设置了自增主键,那插入时,主键字段的值必须为0,否则不会自增;

插入字段后返回自增主键的值

<insert id="insert" parameterType="com.iss.blog.po.Article" useGeneratedKeys="true" keyProperty="article.articleId">
INSERT INTO ub_article
(article_id,......
article_create_time,article_modify_time
)
VALUES (#{article.articleId},#{article.userId},......
#{article.articleCreateTime,jdbcType=TIMESTAMP}, #{article.articleModifyTime,jdbcType=TIMESTAMP})
</insert>

设置useGeneratedKeys="true"并且制定主键keyProperty;这样在插入成功后就会调用keyProperty的setter方法回填主键。注意,必须加上@Param,否则会报错。

插入成功返回成功操作的条目数;失败返回 0

插入时间字段

三步:

类字段使用java.util.Date,数据库字段使用DATETIME,在插入的value值使用timestamp,比如#{article.articleCreateTime,jdbcType=TIMESTAMP}

MySQL5.7版本在时间字段上处理不好,如果有问题可以参考 mysql 5.7之后版本datetime默认值设置'0000-00-00'

不存在则插入

 insert IGNORE into bd_article_tag_map (article_id,article_tag_id)
values (#{articleTagMap.articleId}, #{articleTagMap.articleTagId})

关键是设置数据库字段为unique,这里设置了联合2个字段unique;根据unique字段来判断是否插入,插入成功返回操作成功的条目数,失败返回 0;

update

如果字段非空,则更新

<update id="updateByArticleId" parameterType="com.iss.blog.po.Article">
UPDATE ub_article
<set>
<if test="articleTitle!=null">
article_title =#{articleTitle},
</if>
<if test="articleSummary!=null">
article_summary=#{articleSummary},
</if>
<if test="articleClick!=-1">
article_click=#{articleClick},
</if>
</set>
WHERE article_id=#{articleId}
</update>

注意:字段后面的逗号,不可省略

delete

foreach的用法

接口方法

public int deleteIfNotExist(@Param("articleId")int articleId,@Param("list") List<Integer> tagIdList);

xml

<delete id="deleteIfNotExist" parameterType="java.util.List">
DELETE FROM bd_article_tag_map
WHERE article_id=#{articleId}
AND article_tag_id NOT IN
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
</delete>

select

left join 联合查询

join的意义:把两个表的属性加起来

left join 的意义:左表的属性会全部显示,右表的属性缺少则填null

<select id="selectByArticleId" resultMap="TagResultMap" parameterType="int">
SELECT * FROM bd_article_tag t1
LEFT JOIN bd_article_tag_map t2 ON t1.article_tag_id = t2.article_tag_id
WHERE t2.article_Id = #{articleId}
</select>

下面的article_id字段在两个表中都存在,必须加上表前缀;这里表前缀需要写成表的别名,否则会报错找不到此字段。

  <select id="selectArticleListByArticleTagId" resultMap="ArticleResultMap" parameterType="int">
SELECT t1.article_id,user_id,article_archive_id,
article_title,
article_summary,article_click,article_status,
article_type,article_publish,article_original,
article_create_time,article_modify_time
FROM ub_article t1
LEFT JOIN bd_article_tag_map t2 ON t1.article_id = t2.article_id
WHERE t2.article_tag_id = #{articleTagId}
</select>

判断语句

判断是否为空

 <if test="maxEprTestValueId != null">
</if>

注意,不能写成NULL,否则报错org.apache.ibatis.binding.BindingException: Parameter 'NULL' not found

大于等于

>=

小于等于

&lt;=

Mybatis各语句高级用法(未完待续)的更多相关文章

  1. 我的SQL总结---未完待续

    我的SQL总结---未完待续 版权声明:本文为博主原创文章,未经博主允许不得转载. 总结: 主要的SQL 语句: 数据操作(select, insert, delete, update) 访问控制(g ...

  2. 一篇文章让Oracle程序猿学会MySql【未完待续】

    一篇文章让Oracle DB学会MySql[未完待续] 随笔前言: 本篇文章是针对已经能够熟练使用Oracle数据库的DB所写的快速学会MySql,为什么敢这么说,是因为本人认为Oracle在功能性方 ...

  3. Go web编程学习笔记——未完待续

    1. 1).GOPATH设置 先设置自己的GOPATH,可以在本机中运行$PATH进行查看: userdeMacBook-Pro:~ user$ $GOPATH -bash: /Users/user/ ...

  4. Hibernate二级缓存(未完待续)

    1.Hibernate的cache介绍: Hibernate实现了良好的Cache机制,可以借助Hibernate内部的Cache迅速提高系统的数据读取性能.Hibernate中的Cache可分为两层 ...

  5. MVC丶 (未完待续······)

         希望你看了此小随 可以实现自己的MVC框架     也祝所有的程序员身体健康一切安好                                                     ...

  6. 2017-2-17,c#基础,输入输出,定义变量,变量赋值,int.Parse的基础理解,在本的初学者也能看懂(未完待续)

    计算机是死板的固定的,人是活跃的开放的,初学c#第一天给我的感觉就是:用人活跃开放式的思维去与呆萌的计算机沟通,摸清脾气,有利于双方深入合作,这也是今晚的教训,细心,仔细,大胆 c#基础 1.Hell ...

  7. AutoMapper介绍(未完待续、部分没实现)

    实体间转换工具.其实也可以用Json来实现同名属性.异名属性(用JsonProperty指明)的自动转换 最新版本6.11 需要使用vs2013以上.vs2012下载新版 nuget会遇到问题.只能旧 ...

  8. java泛型基础、子类泛型不能转换成父类泛型--未完待续

    参考http://how2j.cn/k/generic/generic-generic/373.html 1.使用泛型的好处:泛型的用法是在容器后面添加<Type>Type可以是类,抽象类 ...

  9. [document.cookie]为什么cookie不在window下的呢.奇怪了[未完待续]

    什么是cookie,怎么就叫cookis,它能干嘛 我猜吧,就是登录页面的时候传值,二次登录的时候可以给你说句'hello xxx'; 下面这堆比较啰嗦,随意看吧 //cookie 用户储存在用户本地 ...

随机推荐

  1. [256个管理学理论]003.鳄鱼法则(Alligator Principle)

    鳄鱼法则(Alligator Principle) 来自于大洋彼岸的让你看不懂的解释: 这是经济学交易技术法则之一,也叫“鳄鱼效应”,它的意思是:假定一只鳄鱼咬住你的脚,如果你用手去试图挣脱你的脚,鳄 ...

  2. 几种常见的app推广形式

    *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bottom: 0 !important; } ...

  3. 线程的同步机制:同步代码块&同步方法

    解决存在的线程安全问题:打印车票时出现重票,错票 使用同步代码块的解决方案 TestWindow2 package com.aff.thread; /* 使用实现Runnable接口的方式,售票 存在 ...

  4. Excel表格中无法中间插入新行列! 提示:在当前工作表的最后一行或列中,存在非空单元格,解决方案

    excel中新增行列时报错: 提示:在当前工作表的最后一行或列中,存在非空单元格,所以无法插入新行或新列.

  5. JAVA自学笔记(3)

    JAVA的心动之旅 Day1 字符串String 1.0 字符串的特点以及创建一个字符串 public class Practice {//构建字符串的3+1种方法 public static voi ...

  6. 【Storm】安装教程

    1.下载tar.gz包 2.上传解压,tar -zxvf 包 -C 路径 3.修改conf/storm.yaml storm.zookeeper.servers: - "bigboss1&q ...

  7. MAVEN添加本地仓库和注意事项!

    将jer包加载本地仓库导命令 注意:电脑配置了maven的环境变量, 安装指定文件到本地仓库命令:mvn install:install-file -Dfile=       : 指定jar文件路径与 ...

  8. ActiveMQ 笔记(三)JMS规范和落地产品、小知识Broker

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.JMS规范概述 1.JavaEE 概述及主要核心规范 JavaEE是一套使用Java进行企业级应用开 ...

  9. Java实现 LeetCode 15 三数之和

    15. 三数之和 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组. 注意:答案中不可以 ...

  10. 关于VMware虚拟机启动EFI/UEFI支持

    作为较新计算机和操作系统用于引导计算机的技术,可扩展固件接口 (EFI) 正在取代 BIOS.EFI 有时称为统一可扩展固件接口 (UEFI). 使用VMware创建虚拟机,默认还是会使用传统的BIO ...