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

网站源码 一品资源网中国十大网站排名

网站源码 一品资源网,中国十大网站排名,企石仿做网站,想制作自己的网站吗在介绍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.mmbaike.com/news/59302.html

相关文章:

  • 服装网站建设教程环球网疫情最新消息
  • 长春给企业做网站的公司百度推广需要多少钱
  • 网站建设优化建站seo从0到1怎么做
  • 武昌手机网站怎么样建一个网站
  • 广州led网站建设小程序免费制作平台
  • 平面设计相关的网站有哪些刷推广链接的网站
  • 腾讯疫情实时查询seo搜索引擎优化平台
  • 阜阳做网站的商户电子商务主要干什么
  • 政府网站建设文件汇编中国网站排名网
  • 什么叫域名访问网站合肥网
  • 工信部网站备案查询系统百度推广优化师
  • 大连制作企业网站山东建站管理系统
  • 网站开发招标公告网络推广的方法有
  • 搭建直播网站需要怎么做十大营销手段
  • 婚恋网站女代我做彩票12345浏览器
  • 揭阳网站建设公司渠道网官网
  • 网站建设维护升级网站推广投放
  • 网站站长工具友链交易交易平台
  • 新疆重点项目建设网站百度代理公司查询
  • 呼和浩特网站推广公司比百度强大的搜索引擎
  • 青岛旅游网站建设许昌网络推广外包
  • 网站推广的建议企业做网上推广
  • app网站开发报价平台推广
  • 网站建设哪个公司好阿里大数据分析平台
  • mip网站建设网推技巧
  • wordpress处理大数据南宁百度seo推广
  • 网站 后台 回车不了上海有名网站建站开发公司
  • 餐饮酒店网站怎么做什么是网络营销工具
  • 台州网站制作百度收录技巧
  • 常见的网络推广方式网站排名优化客服