当前位置: 首页 > news >正文

律师网站深圳网站设计地方网站系统

律师网站深圳网站设计,地方网站系统,千图网免费素材图库海报,网站ui设计师培训在介绍MyBatis动态SQL实现原理之前,我们先来了解一下MyBatis动态SQL的使用。顾名思义,动态SQL指的是事先无法预知具体的条件,需要在运行时根据具体的情况动态地生成SQL语句。 假设我们有一个获取用户信息查询操作,具体的查询条件…

在介绍MyBatis动态SQL实现原理之前,我们先来了解一下MyBatis动态SQL的使用。顾名思义,动态SQL指的是事先无法预知具体的条件,需要在运行时根据具体的情况动态地生成SQL语句。

假设我们有一个获取用户信息查询操作,具体的查询条件是不确定的,取决于Web前端表单提交的数据,可能根据用户的Id进行查询,也可能根据用户手机号或姓名进行查询,还有可能是这几个条件的组合。这个时候就需要使用MyBatis的动态SQL特性了。下面是使用MyBatis动态SQL进行条件查询的一个案例,代码如下:

  <select id="getUserByEntity"  resultType="com.blog4java.mybatis.example.entity.UserEntity">select<include refid="userAllField"/>from user<where><if test="id != null">AND id = #{id}</if><if test="name != null">AND name = #{name}</if><if test="phone != null">AND phone = #{phone}</if></where></select>

在上面的Mapper配置中,当我们不确定查询条件时,可以使用<where>和<if>标签,通过OGNL表达式判断参数内容是否为空,如果表达式结果为true,则MyBatis框架会自动拼接<if>标签内的SQL内容,否则会对<if>标签内的SQL片段进行忽略。

如上面配置中的<where>标签用于保证至少有一个查询条件时,才会在SQL语句中追加WHERE关键字,同时能够剔除WHERE关键字后相邻的OR和AND关键字。

除了<if>和<where>标签外,MyBatis动态SQL相关的标签还有下面几个。<choose|when|otherwise>:这几个标签需要组合使用,类似于Java中的switch语法,使用如下:

    <select id="getUserInfo"  resultType="com.blog4java.mybatis.example.entity.UserEntity">select<include refid="userAllField"/>from user where 1 = 1<choose><when test="id != null">AND  id = #{id}</when><when test="name != null">AND  name = #{name}</when><otherwise>AND phone is not null</otherwise></choose></select>

这组标签与<if>标签不同的是,所有的<when>标签和<otherwise>标签是互斥的,当任何一个<when>标签满足条件时,其他标签均视为条件不成立。

<foreach>:该标签用于对集合参数进行遍历,通常用于构建IN条件语句或者INSERT批量插入语句。例如,当我们需要根据一组手机号查询用户信息时,可以使用如下配置:

  <select id="getUserByPhones"  resultType="com.blog4java.mybatis.example.entity.UserEntity">select<include refid="userAllField"/>from userwhere phone in<foreach item="phone" index="index" collection="phones"open="(" separator="," close=")">#{phone}</foreach></select>

<trim|set>:这两个标签的作用和<where>标签的作用类似,用于WHERE子句中因为不同的条件成立时导致AND或OR关键字多余,或者SET子句中出现多余的逗号问题。

假如我们使用<if>标签进行动态SQL配置,具体配置内容如下:

    <select id="getUserByEntity"  resultType="com.blog4java.mybatis.example.entity.UserEntity">select<include refid="userAllField"/>from userwhere<if test="id != null">AND id = #{id}</if><if test="name != null">AND name = #{name}</if><if test="phone != null">AND phone = #{phone}</if></select>

当调用Mapper时传入的id参数和name参数都不为空时,生成的SQL是没问题的。但是当没有传入id参数或传入的id为空,而name参数不为空时,生成的SQL语句如下:

select * from user where AND name=?

显然这种情况下生成的SQL语句是存在语法问题的,此时除了使用<where>标签外,还可以使用<trim>标签来解决这个问题。<trim>标签的使用如下:

 <select id="getUserByEntity"  resultType="com.blog4java.mybatis.example.entity.UserEntity">select<include refid="userAllField"/>from user<trim><if test="id != null">AND id = #{id}</if><if test="name != null">AND name = #{name}</if><if test="phone != null">AND phone = #{phone}</if></trim></select>

<set>标签的作用和<trim>标签类似,用于避免SET子句中出现多余的逗号。这里就不做过多介绍了,可参考MyBatis官方文档。

http://www.yayakq.cn/news/695529/

相关文章:

  • 网站都要备案吗义乌市网站建设
  • 建立房产门户网站需要多少钱厦门百城建设有限公司网站
  • 怎么在自己电脑上建网站ftp怎么做网站
  • 2015年做网站行不行帮别人做网站 开票内容是什么
  • 国内优秀门户网站设计seo外包公司费用
  • php网站开发过程深圳网站建设 东毅虎
  • 网站 开发 周期免费的关键词挖掘工具
  • 广州培训+网站开发上海网站空间
  • 售房网站开发 .net微信聊天记录删除了怎么恢复
  • 做翻译的网站中国新闻社天津分社招聘
  • 网站设计论文分类号定制平台有哪些
  • 一级a做爰片在线看网站仿卢松松博客wordpress
  • 公司如何建立微网站查看WordPress网站插件
  • 网站开发费用计入科目建设工程计价
  • 网站认证空间网站的用户体验主要有那些类型
  • 做网站的app设计网站大全免费下载
  • 网站建设的学校网站被k是怎么回事
  • vs做网站用3层架构东道设计公司
  • 辽宁建设执业信息网站工业产品设计有哪些
  • 华大集团 做网站网站建设业务好做吗
  • 怎样在内网建设一个网站html5做网站导航
  • 商城网站开发企业网站开发职业要求
  • 手机网站出现广告豆瓣 wordpress
  • 自己可以自己做公司的网站吗中国十大管理咨询公司
  • 织梦网站地图模板样式适合友情链接的网站
  • 华大 网站建设网站内容 优化
  • 永修建设局网站自己做APP需要网站吗
  • 网站开发 托管合同自己做网站创业
  • 网站开发方式演进网站服务器有哪些种类
  • 湖南送变电建设公司 网站重庆多个区划定风险区