动态sql

1.什么是动态sql?

1.是指sql的内容是变化的,可以根据不同的条件获取到不同的sql语句

2.主要是where之后的部分发生变化

3.动态sql的实现一半使用的是mybatis提供的标签

2.动态sql的优点是什么?

1.动态SQL提供了强大的扩展功能,能够应付复杂的需求,即使在需求增加时也能应对,并且不会因为需求的增加而导致代码的线性增长

2.使用sp_executesql执行计划可以缓存查询字符串,意味着大部分查询条件可以重用执行计划缓存而不会导致不必要的重编译

3.动态sql的缺点是什么?

1.动态SQL是用于应对较高级的问题,对于简单问题,会变得大材小用

2.测试困难

3.动态SQL的计划缓存并不总是你想象的那样,有时候因为输入的参数值而导致不同的计划生成

4.动态sql的常用标签

(1)select 标签:

id:唯一的标识符

parameterType:传给此语句的参数的全路径名或别名 例:com.xinhua.domain.User 或 User

resultType :语句返回值类型或别名.注意.如果是集合,那么这里填写的是集合的泛型,而不是集合本身(resultType 与 resultMap 不能并用)

<select id="findAll" parameterType="int" resultType="com.xinhua.domain.Teacher">
        select * from teacher
</select>

(2)insert 标签

id :唯一的标识符

parameterType:传给此语句的参数的全路径名或别名 例:com.xinhua.domain.User

<insert id="InsertUser" parameterType="com.xinhua.domain.Teacher">
     <selectKey resultType="int" keyProperty="id" order="AFTER">
         SELECT LAST_INSERT_ID()
     </selectKey>
     insert into teacher(id,name,gender,age) values (#{id},#{name},#{gender},#{age}) 
</insert>

(3)delete 标签

id :唯一的标识符

parameterType:传给此语句的参数的全路径名或别名 例:com.xinhua.domain.User

<delete id="deleteUserById" parameterType="int">
    delete from teacher where id=#{id}
</delete>

(4)update 标签

id :唯一的标识符

parameterType:传给此语句的参数的全路径名或别名 例:com.xinhua.domain.User

<update id="updateUser" parameterType="com.xinhua.domain.Teacher">
    update teacher set name=#{name},gender=#{gender},age=#{age} where id=#{id}
</update>

5.动态sql拼接

(1)if 标签

if 标签通常用于 where语句、update语句、insert语句中,通过判断参数值来决定是否使用某个查询条件、判断是否更新某一个字段、判断是否插入某个字段的值.

<if test="name != null and name != ''">
    and NAME = #{name}
</if>

(2)foreach 标签

foreach 标签主要用于构建 in 条件,可在 sql 中对集合进行迭代.也常用到批量删除、添加等操作中.

<select id="selectIn" resultMap="BaseResultMap">
    select name,hobby from student where id in
    <foreach item="item" index="index" collection="list" open="(" separator="," close=")">
        #{item}
    </foreach>
</select>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值