mybatis中的转义字符

Mybatis转义字符表
&lt; < 小于
&gt; > 大于
&amp; &
&apos; ' 单引号
&quot; " 双引号

需要注意的是分号是必不可少的。 比如 a > b 我们就写成  a &gt; b

二、常用的sql语句写法
1、模糊查询

user_name like CONCAT("%",#{userName},"%") and

2、月份查询

输入月份(2019-01),查找属于这个月份的记录

DATE_FORMAT(start_time,'%Y-%m') <![CDATA[ <= ]]> DATE_FORMAT(#{theMonth},'%Y-%m')
and
DATE_FORMAT(end_time,'%Y-%m') <![CDATA[ >= ]]>DATE_FORMAT( #{theMonth},'%Y-%m')
and

提示:DATE_FORMAT正则表达式(%Y-%m-%d %H:%i:%S)

3、时间区间查找

DATE_FORMAT(create_time,'%Y-%m-%d')  <![CDATA[ >= ]]> DATE_FORMAT(#{startTime},'%Y-%m-%d') 
and
DATE_FORMAT(create_time,'%Y-%m-%d')  <![CDATA[ <= ]]> DATE_FORMAT(#{endTime},'%Y-%m-%d') 
and    

全部格式化成年月日格式进行时间对比。

4、resultMap嵌套

复制代码
<resultMap id="UserInfoResultMap" type="com..entity.User">
        <id column="id" property="id" />
        <result column="user_name" property="userName" />
        <result column="password" property="password" />
        
        <collection ofType="com.entity.Image" property="imageList">
            <id column="image_id" property="id" />
            <result column="image_path" property="imagePath" />
            <result column="image_size" property="imageSize" />
        </collection>
    </resultMap>
复制代码

collection 嵌套:
如user类中有一个image图片类的集合List imageList,要将每个人的图片都嵌套存放在各自的imageList属性中。

ofType:嵌套类的类名。这里就写图片类名称Image。
property:主类中属性名。这里就填user类中的imageList。
5、查询

复制代码
<select id="selectUserList"
        parameterType="com.param.UserParam"
        resultMap="BaseResultMap">
        SELECT *
        FROM
        user
        <trim prefix="where"  suffixOverrides="and">
            <if test="userName != null">
                user_name LIKE CONCAT("%",#{userName},"%") and
            </if>
            
            <if test="startTime != null">
                DATE_FORMAT(create_time,'%Y-%m-%d')  <![CDATA[ >= ]]>  DATE_FORMAT(#{startTime},'%Y-%m-%d') 
                and
            </if>
            <if test="endTime != null">
                DATE_FORMAT(create_time,'%Y-%m-%d')  <![CDATA[ <= ]]> DATE_FORMAT(#{endTime},'%Y-%m-%d') 
                and
            </if>
            
            <trim prefix="id in(" suffix=")and" suffixOverrides=",">
                <foreach collection="idList" item="tiem">
                    #{tiem},
                </foreach>
            </trim>
            
        </trim>
    </select>
复制代码

 

6、批量添加

复制代码
<insert id="insertBatch"
        parameterType="com.entity.User"
        useGeneratedKeys="true" keyProperty="id">
        insert into
        user
        <trim prefix="(" suffix=")" suffixOverrides=",">
        
            name,
            age
            
        </trim>
        values
        <foreach collection="list" item="item" index="index"
            separator=",">
            <trim prefix="(" suffix=")" suffixOverrides=",">
            
                #{item.name},
                #{item.age},
                
            </trim>
        </foreach>
    </insert>
复制代码

相当于insert into user (name,age)values (张,20),(李,21),(王,22)·····

7、批量更新

复制代码
<update id="updateBatch"
        parameterType="com.safety.exam.entity.StaffAccount"
        useGeneratedKeys="true" keyProperty="id">
        update user  set 
        name =
        <foreach collection="list" item="item" index="index"
            open="case id" close="end">
            
            when #{item.id} then #{item.name}
            
        </foreach>,
        
        age =
        <foreach collection="list" item="item" index="index"
            open="case id" close="end">
            
            when #{item.id} then #{item.age}
            
        </foreach>
        
        where id in
        <foreach collection="list" index="index" item="item"
            separator="," open="(" close=")">
            #{item.id}
        </foreach>
        
    </update>
复制代码

注意: set关键字只有一个;每个foreach之间有个逗号。
最后sql是这样:

复制代码
UPDATE categories SET
        display_order = CASE id
            WHEN 1 THEN 3
            WHEN 2 THEN 4
            WHEN 3 THEN 5
        END,
        title = CASE id
            WHEN 1 THEN 'New Title 1'
            WHEN 2 THEN 'New Title 2'
            WHEN 3 THEN 'New Title 3'
        END
    WHERE id IN (1,2,3)
复制代码

 

posted @   大空白纸  阅读(13763)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示