Mybatis抓取策略

抓取策略(对象导航查询)

fetchType(抓取类型):lazy:懒加载   eager:及时加载

一对多查询,一方查询多方时默认开启懒加载,但idea工具监测能力较强所以两条预计都回执行

但多对一查询时默认是及时查询的(只对应一条数据对性能没有太大影响)

  1. 及时查询
  2. 懒加载

一对多映射,从一方查询多方时,默认只查询一方,什么时候查询对方,什么时候能发宋多方的sql

一旦两者间出现什么问题(如会话关闭)会出现错误(注意Mybatis底层用线程池解决了这个问题)

动态SQL

<select id="getUsersif" resultType="com.zx.entity.User" parameterType="com.zx.entity.User">

    select * from t_user where 1=1

    <if test="username != null">

        and username = #{username}

    </if>

    <if test="age != 0">

        and age = #{age}

    </if>

  </select>

  

  <select id="getUserschoose" resultType="com.zx.entity.User" parameterType="com.zx.entity.User">

    select * from t_user where 1=1
choose就是一个分支选择标签,when就是每一个分支,不管有多少分支,只会执行一个。
<choose>

        <when test="username!=null">

            and username = #{username}

        </when>

        <when test="age!=0">

            and age = #{age}

        </when>
默认选项,所有选项不匹配则进入。

        <otherwise>

            and password = #{password}

        </otherwise>

    </choose>

  </select>

  

  <select id="getUserswhere" resultType="com.zx.entity.User" parameterType="com.zx.entity.User">

    select * from t_user   where  1=1

    <where>他就是咱们的字段 where 
<where>标签会自动处理WHERE子句中的AND和OR关键字,因此在使用时应该合理安排条件语句的位置,避免出现意外结果。
Where只能去除最前面的关键字,他会自动去除第个条件的and或者or 的关键字,

        <if test="username != null">

            and username = #{username}

        </if>

        <if test="age != 0">

            and age = #{age}

        </if>

    </where>

  </select>

  

  <select id="getUserstrim" resultType="com.zx.entity.User" parameterType="com.zx.entity.User">

    select * from t_user

        <trim prefix="where" prefixOverrides="and" suffix="order by">

            <if test="username != null">

                and username = #{username}

            </if>

            <if test="age != 0">

                and age = #{age}

            </if>

        </trim>

        id desc

  </select>

  

  <update id="updateUser" parameterType="com.zx.entity.User">

    update t_user

    <set>

        <if test="username != null">

            username = #{username},

        </if>

        <if test="age != 0">

            age = #{age},

        </if>

        <if test="password != null">

            password = #{password},

        </if>

    </set>

    where id = #{id}

  </update>

  

  <select id="getUsersforeach" resultType="com.zx.entity.User">

    select * from t_user where id in <foreach collection="array" item="id" open="(" close=")" separator=",">#{id}</foreach>

  </select>

  

  <insert id="addUser" >

    <foreach collection="list" item="user" separator=";">

        insert into t_user values (null,#{user.username},#{user.password},#{user.age})

    </foreach>

  </insert>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值