mybatis开发常见SQL使用手册

本文介绍了MyBatis框架中的高级用法,包括foreach循环、条件判断、批量插入及特殊字符处理等内容,并提供了详细的XML配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、mybatis中的foreach条件的使用;
1、在xml文件中写法范例:
<if test="actionTypeList !=null and actionTypeList.size !=0">
        and a.actionType in
        <foreach item="item" index="index" collection="actionTypeList" open="(" separator="," close=")">
             #{item}
        </foreach>
    </if>
2、在dao层使用Map<String,Object> map

3、在java中使用范例:
Map<String,Object> map=new HashMap<String,Object>();
            List<String> actionTypeList=new ArrayList<String>();
            actionTypeList.add("1");//活动
            map.put("actionTypeList", actionTypeList);
            map.put("userId", userId);


二、mybatis针对大于小于等特殊符号写法范例:
<if test="readTime != null and readTime !=''">
        and a.createTime <![CDATA[>=]]> #{readTime,jdbcType=BIGINT}
    </if>

<if test="condition != null and condition =='0'.toString()">
</if>

AND IFNULL(parentId,'')!=''
三、mysql中order by的使用范例:
ORDER BY    CONVERT(ap.joinCount,SIGNED) DESC --针对数字的排序

ORDER BY    CONVERT(v.userName USING gbk) COLLATE gbk_chinese_ci   --中文排序

like 写法:

<if test="keyWord != null and keyWord !=''">
  and (f.docNo like '%${keyWord}%' or f.userName like '%${keyWord}%' )
</if>


四、mybatis中的if else
<choose>  
        <when test="title != null and title !=''">  
            and title = #{title}  
        </when>  
        <when test="content != null and content !=''">  
            and content = #{content}  
        </when>  
        <otherwise>  
            and owner = "owner1"  
        </otherwise>  
    </choose> 

 

五、批量insert写法

List<CompanyModuleAssignee> insertList = new ArrayList<>();//批量插入
for (int i = 0; i < defaultModuleAssignees.size(); i++) {
                    //保存执行人范围模块之间关联
                   CompanyModuleAssignee companyModuleAssignee=new CompanyModuleAssignee();
                    companyModuleAssignee.setCompanyModuleAssigneeId(UUIDUtils.getGUID());
                    companyModuleAssignee.setTaskAssigneeId(taskAssigneeId);
                    companyModuleAssignee.setModuleId(assigneeDto.getModuleId());
                    companyModuleAssignee.setCompanyId(companyId);

                    companyModuleAssignee.setCreateUserId(loginUserId);
                    companyModuleAssignee.setCreateTime(DateUtils.getCurTimestamp());
                    companyModuleAssignee.setUpdateTime(companyModuleAssignee.getCreateTime());
                    companyModuleAssignee.setDelFlag(StringUtils.COMMON_VALUE_0);
                    insertList.add(companyModuleAssignee);
}
companyModuleAssigneeMapper.batchInsert(insertList);

mapper 写法:

/**
 * 批量新增公司模块执行人范围数据
 * @param
 * @return
 * @author ph.lin
 * @date 2017/2/16
 */
int batchInsert(List<CompanyModuleAssignee> list);

xml写法:

<insert id="batchInsert" parameterType="java.util.List">
  insert into ju_gp_company_module_assignee (companyModuleAssigneeId, taskAssigneeId,
  companyId, moduleId, createTime,
  updateTime, createUserId, updateUserId,
  delFlag)
  values
  <foreach collection="list" item="item" index="index" separator="," >
    (#{item.companyModuleAssigneeId,jdbcType=VARCHAR}, #{item.taskAssigneeId,jdbcType=VARCHAR},
    #{item.companyId,jdbcType=VARCHAR}, #{item.moduleId,jdbcType=VARCHAR}, #{item.createTime,jdbcType=BIGINT},
    #{item.updateTime,jdbcType=BIGINT}, #{item.createUserId,jdbcType=VARCHAR}, #{item.updateUserId,jdbcType=VARCHAR},
    #{item.delFlag,jdbcType=VARCHAR})
  </foreach>
</insert>

 

long cur = DateUtils.getTheDayStartTimestamp(srvStartTime).getTime();  //服务开始时间当天0点
long afterTime =  DateUtils.getTheDayEndTimestamp(srvEndTime).getTime();//服务结束时间当天24点

 

SELECT YEAR
  ( FROM_UNIXTIME(create_time/1000) ) '年',
  MONTH ( FROM_UNIXTIME(create_time/1000) ) '月',
  COUNT( u_id ) '会员合计' 
FROM
  kzj_ur_user 
  WHERE sys_flag=0 AND user_status=1
GROUP BY
  YEAR ( FROM_UNIXTIME(create_time/1000) ),
  MONTH ( FROM_UNIXTIME(create_time/1000) )

转载于:https://my.oschina.net/u/2322635/blog/382513

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值