文档章节

mybatis学习之动态sql

c
 caiyezi
发布于 2016/11/08 20:23
字数 460
阅读 2
收藏 0
点赞 0
评论 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
72
0
SqlTemplate ——sql模板引擎

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

温佐镜
2013/11/12
0
12
MyBatis基础学习:动态SQL和SQL语句构建器类

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

Jia
2016/09/22
1K
0
面试 mybatis 中 # 与 $ 区别

mybatis 框架使用好处之一就是可以动态的改变 sq l语句,而动态的 sql 语法 #{ } 和 ${ } 则有所不同。 #:因为mybatis是基于 jdbc 封装的,# 解析为jdbc预编译(preparedstatement)的参数标...

举个_栗子
2017/11/11
0
0
mybatis学习笔记(2)-mybatis概述

mybatis学习笔记(2)-mybatis概述 标签: mybatis [TOC] 本文对mybatis做一个简单介绍,包括框架原理,执行过程,开发方法,输入输出映射以及动态sql,我会在后续的系列文章中一一详细说明 my...

brianway
2016/02/27
334
0
Java面试----2018年MyBatis常见实用面试题整理

Java面试----2018年MyBatis常见实用面试题整理 1、什么是MyBatis? 答:MyBatis是一个可以自定义SQL、存储过程和高级映射的持久层框架。 2、讲下MyBatis的缓存 答:MyBatis的缓存分为一级缓存...

优惠券活动
04/29
0
0
MyBatis入门学习教程 MyBatis快速入门1-8(2)

上一章:http://my.oschina.net/u/2608629/admin/edit-blog?blog=715422 上一篇MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个...

筱飞
2016/07/21
78
0
基于注解的Mybatis mapper 接口注意事项

原文:http://my.oschina.net/doctor2014/blog/411580 基于注解的Mybatis mapper 接口功能没有mapper xml配置文件丰富,而且动态sql语句的灵活性不能和xml配置相比。 这里只说一下基于注解的...

Beaver_
2015/05/06
6.3K
2
Mybatis - 学习指南一

Mybatis 学习指南1-Hello Mybatis 前言 传统的 JDBC 代码存在的问题。 先看看一下传统 JDBC 开发的代码 Class.forName("com.mysql.jdbc.Driver"); // 通过驱动管理类获取数据库链接connectio...

Hunter_1
07/15
0
0
MyBatis 代码生成器--Mybatis-Generator

mybatis.generator 解决问题 mybatis.generator 后续简称 dalgen,解决mybatis代码自动生成的缺失. 对比其他代码生成工具 mybatis-generator-maven-plugin mybatis比较官方的代码生成器,生成...

匆匆里
2017/09/13
693
1

没有更多内容

加载失败,请刷新页面

加载更多

下一页

切分log日志

新建logback.xml放到resource里面 <?xml version="1.0" encoding="utf-8"?><configuration> <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"> <......

talen
3分钟前
0
0
spring @Resource 和 @Autowired 的使用区别

这两个 注解 @Resource 和 @Autowired , 常识都知道 @Resource 是 JAVAEE 自带的,@Autowired 是 spring 的自定义注解。 一般情况下, 使用 bean的时候, 这两个注解 随便使用一个即可。 但...

之渊
8分钟前
0
0
崛起于Springboot2.X之集成MongoDB使用Repository增删改查(26)

1、pom依赖 <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.7</version></dependency><dependency> <groupId>log4j</......

木九天
10分钟前
0
0
springboot集成elasticsearch客户端问题记录

1背景说明 服务端ES版本为5.5.2,springboot版本为1.5.6。 工程中添加如下依赖 2问题记录 2.1 NetworkPlugin类找不到 报错java.lang.ClassNotFoundException: org.elasticsearch.plugins.Net...

zjg23
10分钟前
0
0
快速构建ceph可视化监控系统

前言 ceph的可视化方案很多,本篇介绍的是比较简单的一种方式,并且对包都进行了二次封装,所以能够在极短的时间内构建出一个可视化的监控系统 本系统组件如下: ceph-jewel版本 ceph_expor...

万建宁
10分钟前
0
0
Java构造器使用注意

public class 父类A {int age = 10;protected void say() {System.out.println("父类A");}public 父类A() {override();}public void override() {Syst...

咸鱼AI
10分钟前
0
0
TensorFlow 线性分类

构造直线 z = 2 * x - 3 * y + 4 x0*w0+x1*w1+b=0 x1=-x0* w0/w1-b/w1 斜率 k= -w0/w1 截距 -b/w1 随机生成数据,加入一定的偏差,用直线将二维平面分为两部分 使用线性模型拟合参数 损失函数...

阿豪boy
13分钟前
0
0
翻译冒泡排序测试

翻译一个冒泡排序: var a = [1,3,2,4,6,5];var f = 0;var n = a.length ;for( var i =1; i<= n; i++) { for( var j = n-1 ; j >= i; j --) { if(a[j] < a[j+1]) { ......

钟元OSS
15分钟前
0
0
maven父、子级版本号同时修改

命令: mvn versions:set -DnewVersion=0.0.2-SNAPSHOT

沉默的懒猫
16分钟前
0
0
Spring boot中的异常处理之注解响应

Controller层 return patientRepository.findById(id) .orElseThrow(() -> new NotFoundException(String.format("Patient %d not found", id))); Exception类 @ResponseS......

亚林瓜子
17分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部