资讯专栏INFORMATION COLUMN

mybatis动态sql

anyway / 2437人阅读

摘要:枚举类型提供了提供了持久化的枚举类型。假设表结构的列,使用类型存储或,对象使用枚举类型标识当执行语句时,或会存储到列,如果想要存储的时枚举值而不是枚举名字,就需要配置类型处理器和提供了对和的内检支持,将映射为,将映射为数组。

mybatis中静态sql语句有时不足以满足用户的需求,因此其提供了动态sql标签。

IF标签

if标签通过条件测试,动态插入sql片段,例如:

保证之间的内容作为一般的字符处理,不做特殊处理。

choose标签
choose标签用于选择第一个选择条件,例如:

where标签
有时,所有的查询条件可能都是可选的,但是其中至少有一个查询是需要的,但是若有多个查询条件都满足条件,这时就需要在查询条件添加and 或or。mybatis提供了where标签用于支持建立这种类型的sql语句,当第一个满足的条件前面有and 或 or 等连接词时,会自动删除连接词。例子如下所示:


trim标签
trim标签比where标签更加灵活,因为它可以在条件前面加上连接词或删除连接词 也可以在条件后面加上连接词或删除连接词;举例如下:



foreach标签
foreach元素的属性主要有 item,index,collection,open,separator,close。
item表示集合中每一个元素进行迭代时的别名.
index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置.
open表示该语句以什么开始.
separator表示在每次进行迭代之间以什么符号作为分隔 符.
close表示以什么结束.
举例如下:





set标签
set标签类似于where标签,会在返回的条件前面插入set关键字,并移除最后一个条件的后面符号,举例如下所示:

  update students 
  
       name=#{name},
      email=#{email},
      phone=#{phone},
  


如果三个条件都是ture,phone后面的逗号将被移除。

枚举类型
mybatis提供了提供了持久化的枚举类型。假设 Student表结构的gender列,使用varchar类型存储MALE或FEMALE,Student对象使用枚举类型标识gender.
public enum Gender{
    FEMALE,MALE
}

public class Student
{
    ....
    private Gender gender;
    ....
}

    insert into student (id,name,gender)
    values(#{id},#{name},#{gender})

当执行insert语句时,MALE或FEMALE会存储到gender列,如果想要存储的时枚举值而不是枚举名字,就需要配置类型处理器:


CLOB和BLOB
mybatis提供了对clob和blob的内检支持,将clob映射为java.lang.String,将blob映射为byte[]数组。因此用户可以像原始类型那样处理clob和blob类型。

传递多个参数
mybatis提供了传递多个参数的内建功能,并通过#{param}语法引用参数。举例如下:

List findAllStudentByNameEmail(String name,String email);



将多行数据存储到map中,并以某个列值作为key
要完成上述功能,需要使用sqlSession的selectMap方法;
举例如下:



Map studentMap=sqlSession.selectMap("com.mybatis3.mappers.StudentMapper.findAllStudent","studId");


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/70214.html

相关文章

  • Mybatis常见面试题

    摘要:执行没有,批处理不支持,将所有都添加到批处理中,等待统一执行,它缓存了多个对象,每个对象都是完毕后,等待逐一执行批处理。 Mybatis常见面试题 #{}和${}的区别是什么? #{}和${}的区别是什么? 在Mybatis中,有两种占位符 #{}解析传递进来的参数数据 ${}对传递进来的参数原样拼接在SQL中 #{}是预编译处理,${}是字符串替换。 使用#{}可以有效的防止...

    liuchengxu 评论0 收藏0
  • 面试官都会问的Mybatis面试题,你会这样回答吗?

    摘要:最终能和面试官聊的开心愉快投缘的叫面霸。能够与很好的集成提供映射标签,支持对象与数据库的字段关系映射提供对象关系映射标签,支持对象关系组件维护。使用可以有效的防止注入,提高系统安全性。 showImg(https://segmentfault.com/img/bVbsSlt?w=358&h=269); 一、概述 面试,难还是不难?取决于面试者的底蕴(气场+技能)、心态和认知及沟通技巧。...

    seanHai 评论0 收藏0
  • mybatis深入理解(一)之 # 与 $ 区别以及 sql 预编译

    摘要:在动态解析阶段,和会有不同的表现解析为一个预编译语句的参数标记符。其次,在预编译之前已经被变量替换了,这会存在注入问题。预编译语句对象可以重复利用。默认情况下,将对所有的进行预编译。总结本文主要深入探究了对和的不同处理方式,并了解了预编译。 mybatis 中使用 sqlMap 进行 sql 查询时,经常需要动态传递参数,例如我们需要根据用户的姓名来筛选用户时,sql 如下: sele...

    shadowbook 评论0 收藏0
  • Mybatis入门看这一篇就够了

    摘要:什么是本是的一个开源项目年这个项目由迁移到了,并且改名为。如下的代码,如果有多个条件的话,那么拼接起来很容易出错查询语句根据是否为来判断是否是条件查询。而如果我们使用的话,就可以免去查询助手类了。 什么是MyBatis MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,...

    livem 评论0 收藏0
  • Mybatis系列】从源码角度理解Mybatis的$和#的作用

    摘要:原因就是传入的和原有的单引号,正好组成了,而后面恒等于,所以等于对这个库执行了查所有的操作。类比的执行流程和原有的我们使用的方法就是。可以理解为就是用来解析定制的符号的语句。后续的流程,就和正常的流程一致了。 前言 在JDBC中,主要使用的是两种语句,一种是支持参数化和预编译的PrepareStatement,能够支持原生的Sql,也支持设置占位符的方式,参数化输入的参数,防止Sql注...

    yanwei 评论0 收藏0

发表评论

0条评论

anyway

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<