mybatis-xml个人使用笔记

like 查询

SELECT  
*  
FROM  
user  
WHERE  
name like CONCAT('%',#{name},'%')

in

<foreach  item="item" collection="listTag" index="index"  open="(" separator="," close=")">

#{item}

</foreach>

if-else

其中choose为一个整体
when是if
otherwise是else

<select id="selectSelective" resultMap="xxx" parameterType="xxx">
    select
    <include refid="Base_Column_List"/>
    from xxx
    where del_flag=0
    <choose>
        <when test="xxx !=null and xxx != ''">
            and xxx like concat(concat('%', #{xxx}), '%')
        </when>
        <otherwise>
            and xxx like '**%'
        </otherwise>
    </choose>
</select>

插入语句并校验是否存在,存在就不执行的例子

数据存在就不插入
DUAL 是个零时表,临时储存数据
insert 默认不反悔id的,需要加上keyColumn=“id” keyProperty=“id” useGeneratedKeys=“true” 这几个参数

<insert id="saveCommentOnlyData" keyColumn="id" keyProperty="id" useGeneratedKeys="true"
            parameterType="shop.easysell.lib.facebook.domain.po.LiveComment">
        insert into l_live_comment (live_id, face_comment_id, from_customer_id, from_id, from_name, to_id, to_name,
                                    content, is_keyword, is_fans, error_msg_status, created)
        select #{liveComment.liveId}        as live_id,
               #{liveComment.faceCommentId} as face_comment_id,
               #{liveComment.fromCustomerId} as from_customer_id,
               #{liveComment.fromId}         as from_id,
               #{liveComment.fromName}      as from_name,
               #{liveComment.toId}          as to_id,
               #{liveComment.toName}        as to_name,
               #{liveComment.content}       as content,
               #{liveComment.isKeyword}     as is_keyword,
               #{liveComment.isFans}        as is_fans,
               #{liveComment.errorMsgStatus} as error_msg_status,
               #{liveComment.created}       as created
        from DUAL
        where not exists(select id
                         from l_live_comment
                         where live_id = #{liveComment.liveId} and face_comment_id = #{liveComment.faceCommentId})
    </insert>

编写动态排序

由于业务之中,出现动态排序的需求,后端不需要平凡改动排序规则,需要前端判断传参

排序实体

package com.ushangxie.cca.common.lib.domain.dto;

import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class SortFieldDTO {

    @ApiModelProperty("字段")
    private String field;

    @ApiModelProperty("字段")
    private Boolean isAsc;

}

传参对象

package com.ushangxie.cca.lib.community.domain.req;

import com.ushangxie.cca.common.lib.domain.dto.SortFieldDTO;
import com.ushangxie.cca.common.lib.domain.dto.req.ApiPageReq;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.util.List;

@EqualsAndHashCode(callSuper = true)
@Data
@ApiModel("admin圈子分页-请求实体")
public class AdminPageCircleReq extends ApiPageReq {

    @ApiModelProperty(value = "关键字")
    private String keyword;

    @ApiModelProperty("排序: user_number(成员数量),post_number(帖子数量)")
    private List<SortFieldDTO> sortFields;

}

xml实体

记住循环的不能使用#{},会报错(超出边界)。得用${}(预防sql注入,加入’')

<select id="adminPage" resultType="com.ushangxie.cca.lib.community.domain.resp.AdminPageCircleResp">
        select c.id as id,
        c.`name` as `name`,
        c.created as created,
        c.create_id as create_id,
        c.create_name as create_name,
        cs.user_number as user_number,
        cs.post_number as post_number
        from cca_circle c
        left join cca_circle_statis cs on c.id = cs.circle_id
        order by
        <choose>
            <when test="adminPageCircleReq.sortFields != null">
                <foreach collection="adminPageCircleReq.sortFields" item="item" separator=",">
                    '${item.field}'
                    <choose>
                        <when test="item.isAsc == true">
                            asc
                        </when>
                        <otherwise>
                            desc
                        </otherwise>
                    </choose>
                </foreach>
            </when>
            <otherwise>
                created desc
            </otherwise>
        </choose>
    </select>

运行效果

2023-02-03 14:34:27.503 DEBUG 18964 --- [           main]  c.u.c.s.c.m.CcaCircleMapper.adminPage    : ==>  Preparing: SELECT COUNT(1) FROM cca_circle c LEFT JOIN cca_circle_statis cs ON c.id = cs.circle_id 
2023-02-03 14:34:27.530 DEBUG 18964 --- [           main]  c.u.c.s.c.m.CcaCircleMapper.adminPage    : ==> Parameters: 
2023-02-03 14:34:27.557 DEBUG 18964 --- [           main]  c.u.c.s.c.m.CcaCircleMapper.adminPage    : ==>  Preparing: select c.id as id, c.`name` as `name`, c.created as created, c.create_id as create_id, c.create_name as create_name, cs.user_number as user_number, cs.post_number as post_number from cca_circle c left join cca_circle_statis cs on c.id = cs.circle_id order by created desc LIMIT ?,? 
2023-02-03 14:34:27.558 DEBUG 18964 --- [           main]  c.u.c.s.c.m.CcaCircleMapper.adminPage    : ==> Parameters: 0(Long), 0(Long)
2023-02-03 14:34:27.564 DEBUG 18964 --- [           main]  c.u.c.s.c.m.CcaCircleMapper.adminPage    : <==      Total: 0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
MyBatis-Plus是一个MyBatis的增强版工具,它在MyBatis的基础上扩展了其他功能,但没有改变其基本功能。它的存在是为了简化开发,提高效率。 要使用MyBatis-Plus,可以采用SpringBoot快速使用的方式。具体步骤如下: 1. 首先,在你的项目中引入MyBatis-Plus的依赖。可以在项目的pom.xml文件中添加MyBatis-Plus的依赖配置。 2. 然后,配置数据库连接信息,可以在项目的配置文件(比如application.properties或application.yml)中配置数据库连接信息,包括数据库驱动、url、用户名和密码等。 3. 接着,创建实体类和Mapper接口。实体类用于映射数据库表结构,Mapper接口用于定义数据库操作的方法。 4. 使用MyBatis-Plus提供的注解或方法,进行数据库的增删改查操作。比如可以使用@TableName注解指定实体类对应的数据库表名,使用@Insert注解进行插入操作,使用@Update注解进行更新操作,使用@Delete注解进行删除操作,使用@Select注解进行查询操作等。 5. 最后,在需要使用数据库操作的地方,注入Mapper接口,并调用方法进行相应的操作。 通过以上步骤,就可以使用MyBatis-Plus进行数据库操作了。这样可以简化开发过程,提高效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Mybatis-plus的使用](https://blog.csdn.net/yr6123/article/details/125890028)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [MyBatis-Plus 笔记](https://blog.csdn.net/i_silence/article/details/106807077)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

尘叶风凌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值