动态SQL语句怎么写

廖万里的博客:廖万里的博客

1 复习

动态sql   

 多条件查询   if  where   重点!!

双向关联  

多对一 一对一 

一对多  stud where gid

resultMap 映射级别  

列名和实体类属性不一样  

Grade   student 

Id主键          主键id   外键 gid

Select s.id   gid.id  gid  from student s inner join grade g on g.id=s.gid

二级缓存

总配置文件中 设置开启

映射文件中  设置缓存容量

查询语句中  开启缓存

choose

类似 switch  只能选一个

3 foreach  

In 动态

// SELECT * FROM student WHERE  gid IN (1,2,3)
 // 接口
List<Student> getc(List<Integer> gids);

Mapper

<select id="getc"  resultType="Student" >
    select from student where gid
    in
    <foreach collection="list"
             item="gids"
             open="(" close=")"
             separator=","
    >
        #{gids}

    </foreach>

</select>

测试

4 更新 set 

不是更新所有的列,只更新改变的列

动态更新  省去根据id查询,可以不用更新所有列

int myupdate(Student student);

<update id="myupdate" parameterType="Student">
    UPDATE `j78`.`student`
        <set>
          <if test="sname!=null">
              `sname` = #{sname},
          </if>
        <if test="tel!=null">
            `tel` = #{tel},
        </if>
        <if test="age!=null">
            `age` = #{age},
        </if>
        <if test="gid!=null">
            `gid` = #{gid} 
        </if>

        </set>
        WHERE `sid` = #{sid}
</update>

5 动态增加

目标 sql语句可以 判断 是否执行  可以为null列  ,不用写sql语句

<insert id="addstudent" parameterType="Student">
    INSERT INTO `j78`.`student`
        (
        <if test="sname!=null">
            `sname` ,
        </if>
        <if test="tel!=null">
            `tel` ,
        </if>
        <if test="age!=null">
            `age`,
        </if>
        <if test="gid!=null">
            `gid`
        </if>
       )
    VALUES (
        <if test="sname!=null">
             #{sname},
        </if>
        <if test="tel!=null">
             #{tel},
        </if>
        <if test="age!=null">
             #{age},
        </if>
        <if test="gid!=null">
            #{gid}
        </if>

    )

</insert>

测试

//接口
StudentMapper sm=session.getMapper(StudentMapper.class);
Student s=new Student();
 s.setGid(1);
 int n=sm.addstudent(s);
 System.out.println(n);

trim

6.1 trim查询

6.2 set

<update id="myupdate" parameterType="Student">
    UPDATE `j78`.`student`
    <trim prefix="set" suffix="  WHERE `sid` = #{sid}" suffixOverrides=",">  
          <if test="sname!=null">
              `sname` = #{sname},
          </if>
        <if test="tel!=null">
            `tel` = #{tel},
        </if>
        <if test="age!=null">
            `age` = #{age},
        </if>
        <if test="gid!=null">
            `gid` = #{gid},
        </if>
    </trim>
</update>

7 总结

动态sql语句

1 动态查询

   多条件查询, and(if)   

   单选   choose

   In  foreach 

2 动态更新

   Set +if

3 动态增加

   If 

4 trim 优化 动态sql     ,  and  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kkkliaoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值