Mapper的xml文件基础语法笔记,增删改查,遍历

Mapper的xml文件基础语法笔记,增删改查,遍历

文章目录

  • 1、sql 标签
  • 2、select 标签
  • 3、where标签
  • 4、insert 标签
  • 5、update 标签
  • 6、delete 标签
  • 7、set标签
  • 8、include 标签
  • 9、if标签
  • 10、trim标签
  • 11、foreach标签
  • 12、choose标签
  • xml文件值比较处理

1、sql 标签

  • 表示单纯的一条sql语句,可以直接写一条可以执行的sql语句,也可以写一条给其他sql语句引用的sql语句
<sqlid="Base_Column_List"><!--@mbg.generated-->id, busi_object_id, busi_object_code, app_id, title, page_id, form_data, page_data, creator_id, updator_id, created_time, updated_time</sql>

2、select 标签

  • 表示这是一条查询语句
NcdpFormDefineselectByBusiObjectId(LongbusiObjectId);//mapper接口中对应的方法
<selectid="selectByBusiObjectId"parameterType="java.lang.Long"resultMap="BaseResultMap">select * from ncdp_form_define where busi_object_id = #{busiObjectId,jdbcType=BIGINT}</select>

3、where标签

  • 如果where内如果没有任何语句,where则直接去除,比如下面这个例子如果if判定为false这时where里面没有语句,则不会生成where
<where><iftest="departmentChecks != null">bu.department_id in<foreachcollection="departmentChecks"item="item"open="("close=")"separator=",">#{item}</foreach></if></where>
  • where标签可以自动添加where,同时处理sql语句中第一个and关键字,如下面的sql语句,第一个AND会被优化剔除
<!-- 代码块 2-4 --><!-- 根据条件查询用户 --><selectid="queryUserByWhere"parameterType="user"resultType="user">SELECT id , gender ,nickname ,mobile ,avatar From dts_user<!-- where标签可以自动添加where,同时处理sql语句中第一个and关键字 --><where><iftest="gender != null">AND gender = #{gender}</if><iftest="mobile != null and mobile != ''">AND mobile LIKE '%${mobile}%'</if></where></select>

4、insert 标签

intinsert(NcdpFormDefinerecord);
<insertid="insert"parameterType="com.iwhalecloud.bassc.ncdp.entity.form.NcdpFormDefine"><!--@mbg.generated-->insert into ncdp_form_define (id, busi_object_id, busi_object_code, app_id, title, page_id, form_data, page_data, creator_id, updator_id, created_time, updated_time) values (#{id,jdbcType=BIGINT}, #{busiObjectId,jdbcType=BIGINT}, #{busiObjectCode,jdbcType=VARCHAR}, #{appId,jdbcType=BIGINT}, #{title,jdbcType=VARCHAR}, #{pageId,jdbcType=VARCHAR}, #{formData,jdbcType=VARCHAR}, #{pageData,jdbcType=VARCHAR}, #{creatorId,jdbcType=BIGINT}, #{updatorId,jdbcType=BIGINT}, #{createdTime,jdbcType=TIMESTAMP}, #{updatedTime,jdbcType=TIMESTAMP})</insert>

5、update 标签

intupdateByPrimaryKeySelective(LcdpAppGroupInforecord);
<updateid="updateByPrimaryKeySelective"parameterType="com.iwhalecloud.bassc.ncdp.entity.form.NcdpFormDefine"><!--@mbg.generated-->update ncdp_form_define<set><iftest="busiObjectId != null">busi_object_id = #{busiObjectId,jdbcType=BIGINT},</if><iftest="busiObjectCode != null">busi_object_code = #{busiObjectCode,jdbcType=VARCHAR},</if><iftest="appId != null">app_id = #{appId,jdbcType=BIGINT},</if><iftest="title != null">title = #{title,jdbcType=VARCHAR},</if><iftest="pageId != null">page_id = #{pageId,jdbcType=VARCHAR},</if><iftest="formData != null">form_data = #{formData,jdbcType=VARCHAR},</if><iftest="pageData != null">page_data = #{pageData,jdbcType=VARCHAR},</if><iftest="creatorId != null">creator_id = #{creatorId,jdbcType=BIGINT},</if><iftest="updatorId != null">updator_id = #{updatorId,jdbcType=BIGINT},</if><iftest="createdTime != null">created_time = #{createdTime,jdbcType=TIMESTAMP},</if><iftest="updatedTime != null">updated_time = #{updatedTime,jdbcType=TIMESTAMP},</if></set>where id = #{id,jdbcType=BIGINT}</update>

6、delete 标签

  • 表示这是一条删除语句
intdeleteByPrimaryKey(LonggroupId);
<deleteid="deleteByPrimaryKey"parameterType="java.lang.Long"><!--@mbg.generated-->delete from ncdp_form_define where id = #{id,jdbcType=BIGINT}</delete>

7、set标签

  • 感觉没啥用,很垃圾。目前没发现它的用处
intupdateByPrimaryKeySelective(LcdpAppGroupInforecord);
<updateid="updateByPrimaryKeySelective"parameterType="com.iwhalecloud.bassc.ncdp.entity.form.NcdpFormDefine"><!--@mbg.generated-->update ncdp_form_define<set><iftest="busiObjectId != null">busi_object_id = #{busiObjectId,jdbcType=BIGINT},</if><iftest="busiObjectCode != null">busi_object_code = #{busiObjectCode,jdbcType=VARCHAR},</if><iftest="appId != null">app_id = #{appId,jdbcType=BIGINT},</if><iftest="title != null">title = #{title,jdbcType=VARCHAR},</if><iftest="pageId != null">page_id = #{pageId,jdbcType=VARCHAR},</if><iftest="formData != null">form_data = #{formData,jdbcType=VARCHAR},</if><iftest="pageData != null">page_data = #{pageData,jdbcType=VARCHAR},</if><iftest="creatorId != null">creator_id = #{creatorId,jdbcType=BIGINT},</if><iftest="updatorId != null">updator_id = #{updatorId,jdbcType=BIGINT},</if><iftest="createdTime != null">created_time = #{createdTime,jdbcType=TIMESTAMP},</if><iftest="updatedTime != null">updated_time = #{updatedTime,jdbcType=TIMESTAMP},</if></set>where id = #{id,jdbcType=BIGINT}</update>

8、include 标签

sql语句设置一个id(Base_Column_List),include通过这个id引用这个sql语句,引用过程为字符串拼接

NcdpFormDefineselectByBusiObjectId(LongbusiObjectId);//mapper接口中对应的方法
<sqlid="Base_Column_List"><!--@mbg.generated-->id, busi_object_id, busi_object_code, app_id, title, page_id, form_data, page_data, creator_id, updator_id, created_time, updated_time</sql><selectid="selectByBusiObjectId"parameterType="java.lang.Long"resultMap="BaseResultMap">select<includerefid="Base_Column_List"/>from ncdp_form_define where busi_object_id = #{busiObjectId,jdbcType=BIGINT}</select>

9、if标签

  • 表示updatedTime 不为null时,标签中的内容拼接进sql语句
<iftest="updatedTime != null">updated_time,</if>
  • 表示list不为空,同时不为 null
<iftest="list != null and list.size()!=0">
  • type 为 1 则为真
<iftest="type == '1'.toString()">

10、trim标签

实际上就是表示剪切的意思,对字符串进行稍微的处理

  • prefix 给sql语句拼接的前缀
  • suffix 给sql语句拼接的后缀
  • prefixOverrides 去除sql语句前面的关键字或者字符,该关键字或者字符由prefixOverrides属性指定,假设该属性指定为"AND",当sql语句的开头为"AND",trim标签将会去除该"AND"
  • suffixOverrides 去除sql语句后面的关键字或者字符,该关键字或者字符由suffixOverrides属性指定
intinsertSelective(LcdpAppGroupInforecord);
<insertid="insertSelective"keyColumn="group_id"keyProperty="groupId"parameterType="com.iwhalecloud.bassc.ncdp.entity.appManage.LcdpAppGroupInfo"useGeneratedKeys="true">insert into "ncdp_app_group_info"<trimprefix="("suffix=")"suffixOverrides=","><iftest="orgId != null">org_id,</if><iftest="groupName != null">group_name,</if><iftest="sort != null">sort,</if><iftest="creatorId != null">creator_id,</if><iftest="createdTime != null">created_time,</if><iftest="updateId != null">update_id,</if><iftest="updateTime != null">update_time,</if></trim><trimprefix="values ("suffix=")"suffixOverrides=","><iftest="orgId != null">#{orgId,jdbcType=BIGINT},</if><iftest="groupName != null">#{groupName,jdbcType=VARCHAR},</if><iftest="sort != null">#{sort,jdbcType=SMALLINT},</if><iftest="creatorId != null">#{creatorId,jdbcType=BIGINT},</if><iftest="createdTime != null">#{createdTime,jdbcType=TIMESTAMP},</if><iftest="updateId != null">#{updateId,jdbcType=BIGINT},</if><iftest="updateTime != null">#{updateTime,jdbcType=TIMESTAMP},</if></trim></insert>

11、foreach标签

  • collection 表示传入的对象名,默认为list,如果需要更改需要加注解@Param;如果传入的是数组 collection=“list” ,改为 collection=“array” 即可
  • item 表示遍历的每个对象
  • index表示索引
  • open该语句以什么开始,
  • close以什么结束
  • separator在每次进行迭代之间以什么符号作为分隔符,
voidupdateSort(List<LcdpAppGroupInfo>list);
<updateid="updateSort"parameterType="java.util.List"><foreachcollection="list"item="item"index="index"open=""close=""separator=";">update ncdp_app_group_info<set>sort = #{item.sort}</set>where group_id = #{item.groupId}</foreach></update>

12、choose标签

  • 在这个例子中,MyBatis会根据传入参数判断哪个条件满足,然后只执行相应的块里的SQL片段。如果没有条件满足,则执行块的内容。
<selectid="getUserDetailsBasedOnCondition"parameterType="map"resultType="User">SELECT * FROM users<choose><whentest="username != null">WHERE username = #{username}</when><whentest="email != null">WHERE email = #{email}</when><otherwise><!-- 如果以上条件都不满足,可以定义一个默认行为或者干脆不做任何事情 --></otherwise></choose></select>

xml文件值比较处理

  • 直接用转义包裹更直观
<![CATA[email<=#{email}]]>
原符号<<=>>=&"
替换符号&lt;&lt;=&gt;&gt;=&amp;&apos;&quot;