Mybatis动态sql以及缓存

一.动态sql

什么是动态sql?

动态sql就是根据用户输入的不同,产生不同的sql语句

使用场景:

比如下图:我们有一个用户管理系统,我们可以根据姓名、籍贯、邮箱信息查询用户,我们输入的信息不同查询出来的结果就不同,我们可以只通过姓名查询,也可以通过籍贯,也可以三个条件都输入进行查询。

 mybatis为了实现动态sql,为我们提供了动态标签:

主要有:

  • if
  • where
  • foreach
  • sql

动态sql的实现:

条件查询:

    <select id="selectByUserCondition" parameterType="user" resultType="user">
        select * from tb_userinfo
        <where><!--这里的where标签会自动去除第一个and-->
            <if test="user!=null">
                <if test="user.name!=null and user.name!=''">  <!--只有满足test中的条件 if标签中的内容才会拼接上去-->
                    and name like #{user.name}
                </if>
                <if test="user.address!=null and user.address!=''">
                    and address = #{user.address}
                </if>
                <if test="user.email!=null and user.email!=''">
                    and email = #{user.email}
                </if>
            </if>
        </where>
    </select>

效果:

foreach的使用:

我们这个用户管理中的批量删除使用到了foreach标签

批量删除:

    <delete id="delseleceAll">
        delete from tb_userinfo where
        <foreach collection="array" item="id" open="id in(" separator="," close=")">
            <!--注意如果parameterType是List的话,则在标签体内引用这个List,只能用变量名list,如果parameterType是数组,则只能用变量名array-->
            #{id}
        </foreach>
    </delete>

效果:

删除前:

选中:

删除:

sql标签可以将重复的SQL片段提取出来,然后在需要的地方,使用<include>标签进行引用

<select id="findUser" parameterType="user" resultType="user">
	SELECT * FROM user
	<include refid="whereClause"/>
</select>

<sql id="whereClause">
     <where>
         <if test="user != null">
         	AND username like '%${user.name}%'
         </if>
     </where>
</sql>

二.mybatis缓存

一级缓存:

默认开启,只用同一个SqlSesion能够访问,在同一个SqlSesion生命周期内,如果执行两次相同的sql语句,则第二次sql会直接从缓存中拿取数据,不会走数据库,减小了数据库的压力,但是,如果第一次sql之后,执行了增、删、改,一级缓存就会被清空,第二次sql仍然会走数据库。

二级缓存:

默认关闭,可通过全局配置文件中的<settings name="cacheEnabled" value="true"/>开启二级缓存总开关,然后在某个具体的mapper.xml中增加<cache />,即开启了该mapper.xml的二级缓存。二级缓存是mapper级别的缓存,只有有提交SqlSesion后二级缓存才会有数据。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值