文档章节

mybatis学习之动态sql

c
 caiyezi
发布于 2016/11/08 20:23
字数 460
阅读 2
收藏 0

mybatis的动态sql语句很强大,在mapper映射文件中使用简单的标签即可实现该效果,下面一个个记录:

1、select查询

简单的select类似如下:

<select id="findById" resultMap="StudentResult" parameterType="Integer">
    select * from t_student where id = #{id}
</select>

1)if(常用于各种查询的条件判断部分)

<select id="searchStudents" parameterType="Map" resultMap="StudentResult">
    select * from t_student 
    where gradeId = #{gradeId}
    <if test="name != null">
        and name like #{name}
    </if>
    <if test="age != null">
        and age = #{age}
    </if>
</select>

结合where标签使用如下:

<select id="searchStudents3" parameterType="Map" resultMap="StudentResult">
    select * from t_student
    <where>
        <if test="gradeId != null">
            gradeId = #{gradeId}
        </if>
        <if test="name != null">
            and name like #{name}
        </if>
        <if test="age != null">
            and age = #{age}
    </if>
    </where>
</select>

2)choose(同if..else..类似)

<select id="searchStudents2" parameterType="Map" resultMap="StudentResult">
    select * from t_student
    <choose>
        <when test="searchBy=='gradeId'">
            where gradeId = #{gradeId}
        </when>
        <when test="searchBy=='name'">
            where name like #{name}
        </when>
        <otherwise>
            where age = #{age}
        </otherwise>
    </choose>
</select>

3)trim

<select id="searchStudents4" parameterType="Map" resultMap="StudentResult">
    select * from t_student
    <trim prefix="where" prefixOverrides="and|or">
        <if test="gradeId != null">
            gradeId = #{gradeId}
        </if>
        <if test="name != null">
            and name like #{name}
        </if>
        <if test="age != null">
            and age = #{age}
        </if>
    </trim>
</select>

prefix前置,prefixOverrides前置覆盖,简单理解为:trim子句中最前面的and或者or用where替换。

4)foreach

<select id="searchStudents5" parameterType="Map" resultMap="StudentResult">
    select * from t_student
    <if test="gradeIds != null">
        <where>
            gradeId in
            <foreach collection="gradeIds" item="gradeId" open="("
                close=")" separator=",">
                #{gradeId}
            </foreach>
        </where>
    </if>
</select>

collections即数组集合,可以是list类型,如arrayList等,open指定左侧拼接方式,close指定右侧,separator指定分隔符,这里拼接后为括号括起来逗号隔开的字符串,从而用于in查询。

2、update

<update id="updateStudent" parameterType="Student">
    update t_student
    <set>
        <if test="name != null">
            name = #{name},
        </if>
        <if test="age != null">
            age = #{age}        <!-- 自动剔除最后的逗号 -->
        </if>
    </set>
    where id = #{id}
</update>
<update id="update" parameterType="Student">
    update t_student set name =
    #{name},age = #{age} where id = #{id}
</update>

3、delete

<delete id="delete" parameterType="Integer">
    delete from t_student where id = #{id}
</delete>

4、insert

<!-- 插入 -->
<insert id="add" parameterType="Student">
    insert into t_student(id,name,age) values(null,#{name},#{age})
</insert>

 

本文转载自:http://www.cnblogs.com/vipzhou/p/5640459.html

c
粉丝 1
博文 108
码字总数 0
作品 0
西安
程序员
私信 提问
MyBatis体系大纲

1.MyBatis优势 2.MyBatis总体流程 3.MyBatis功能架构 4.MyBatis框架架构 5.MyBatis动态SQL语句 5.1.MyBatis动态传入表名,字段名参数 要实现动态传入表名、列名,需要做如下修改 添加属性sta...

微尘鉴
2015/09/17
99
0
MyBaits与Hibernate的区别

相同点:都是持久层的框架,都用于dao层的开发。 不同点: 1. hibernate对sql语句做了封装,使用HQL语句操作数据库。数据库无关性支持好,在项目需要支持多种数据库的情况下,代码开发量少,...

tinder_boy
2018/10/25
18
0
SqlTemplate ——sql模板引擎

遇到过动态拼接sql字符的同学,一定深知其中痛苦,我本人也其中受害者之一。SqlTemplate 是通过模板方法解决动态sql,把模板内容构建成完成的xml,这样可以解析成相关的数据结构, 再结合Ogn...

温佐镜
2013/11/12
4.3K
12
精心整理了15道面试官喜欢问的MyBatis面试题

1、什么是 MyBatis? 答:MyBatis 是一个可以自定义 SQL、存储过程和高级映射的持久层框架。 2、讲下 MyBatis 的缓存 答:MyBatis 的缓存分为一级缓存和二级缓存,一级缓存放在 session 里面,...

Java架构师追风
07/24
0
0
MyBatis基础学习:动态SQL和SQL语句构建器类

Mybatis介绍 MyBatis(http://www.mybatis.org/) 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可...

Jia
2016/09/22
2.2K
0

没有更多内容

加载失败,请刷新页面

加载更多

用户管理

用户管理 如何添加权限组? 为了商城更好的运维,可添加角色管理。 打开后台-设置-用户管理-权限组 1.添加用户组,设置名称和选择权限 2.添加用户(管理员) 管理员用户不可进行操作 普通用户...

Geek-Chic
19分钟前
3
0
Java面试必备知识点梳理:二分查找算法

在计算机世界里“数据结构+算法=程序”,因此算法在程序开发中起着至关重要的作用。虽然我们在开发中自己设计算法的情况不多,在工作中却离不开算法。无论是开发包提供的算法还是我们自己设计...

博文视点Bv
20分钟前
4
0
前端适配rem和px问题

问题描述:pc端屏幕适配问题一直是个难点,选择用rem+媒体查询的方式。但是遇到了问题: 1、给了font-size: 62.5%;结果发现1rem=12px, 2、考虑可能是因为谷歌浏览器支持的最小字号是12px导致...

米依若兮
26分钟前
4
0
【2019年8月版】OCP 071认证考试原题-第33题

Choose three. Which three statements are true about a self join? A) It must be an inner join. B) It can be an outer join. C) The ON clause must be used. D) It must be an equijoi......

oschina_5359
30分钟前
7
0
Java 8 Stream Api 中的 map和 flatMap 操作

1.前言 Java 8 提供了非常好用的 Stream API ,可以很方便的操作集合。今天我们来探讨两个 Stream 中间操作 map(Function<? super T, ? extends R> mapper) 和 flatMap(Function<? super T, ......

码农小胖哥
32分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部