mybatis中怎么动态的获取表的字段

mybatis中怎么动态的获取表的字段,第1张

//对象publicclassEntity{privateStringid=nullprivateintvalue=nullprivateTimestampcreateTime=null//getterandsetter}//数据表CREATETABLEqai_entity(idCHAR(10)NOTNULL,valueINTNOTNULLDEFA

MyBatis提供了一套动态SQL标签,协助我们完成 SQL 语句的拼接工作。我们在日常工作中经常需要对 SQL 进行拼接:入参循环遍历, where 条件拼接时的分隔符处理等等。

本文介绍以下几个较常用的动态SQL标签:

我们经常会遇到 where 条件中需要根据是否传入参数来确定是否添加条件。

为了解决上面所遇到的问题,MyBatis 为我们提供了 <where>标签。

<foreach>用于遍历输入参数中集合对象。

我们的 Mapper 文件,在 select 或者是 where 经常会出现重复内容,我们可以把重复的内容抽取为一个 <sql>片段,需要使用的地方,使用 <include>标签就可以引入进来。

1、动态SQL片段

通过SQL片段达到代码复用

<!-- 动态条件分页查询 -->

<sql id="sql_count">

select count(*)

</sql>

<sql id="sql_select">

select *

</sql>

<sql id="sql_where">

from icp

<dynamic prepend="where">

<isNotEmpty prepend="and" property="name">

name like '%$name$%'

</isNotEmpty>

<isNotEmpty prepend="and" property="path">

path like '%path$%'

</isNotEmpty>

<isNotEmpty prepend="and" property="area_id">

area_id = #area_id#

</isNotEmpty>

<isNotEmpty prepend="and" property="hided">

hided = #hided#

</isNotEmpty>

</dynamic>

<dynamic prepend="">

<isNotNull property="_start">

<isNotNull property="_size">

limit #_start#, #_size#

</isNotNull>

</isNotNull>

</dynamic>

</sql>

<select id="findByParamsForCount" parameterClass="map" resultClass="int">

<include refid="sql_count"/>

<include refid="sql_where"/>

</select>

<select id="findByParams" parameterClass="map" resultMap="icp.result_base">

<include refid="sql_select"/>

<include refid="sql_where"/>

</select>

2、数字范围查询

所传参数名称是捏造所得,非数据库字段,比如_img_size_ge、_img_size_lt字段

<isNotEmpty prepend="and" property="_img_size_ge">

<![CDATA[

img_size >= #_img_size_ge#

]]>

</isNotEmpty>

<isNotEmpty prepend="and" property="_img_size_lt">

<![CDATA[

img_size <#_img_size_lt#

]]>

</isNotEmpty>

多次使用一个参数也是允许的

<isNotEmpty prepend="and" property="_now">

<![CDATA[

execplantime >= #_now#

]]>

</isNotEmpty>

<isNotEmpty prepend="and" property="_now">

<![CDATA[

closeplantime <= #_now#

]]>

</isNotEmpty>

3、时间范围查询

<isNotEmpty prepend="" property="_starttime">

<isNotEmpty prepend="and" property="_endtime">

<![CDATA[

createtime >= #_starttime#

and createtime <#_endtime#

]]>

</isNotEmpty>

</isNotEmpty>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10014253.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存