Mybatis学习自用总结(狂神说Mybatis)八

一、第一个Mybatis项目
二、Mybatis中的增删改查
三、配置解析
四、日志
五、分页
六、使用注解开发
七、多对一和一对多处理

八、动态SQL

什么是动态SQL:就是指根据不同的条件生成不同的SQL语句。

在 MyBatis 之前的版本中,需要花时间了解大量的元素。借助功能强大的基于 OGNL 的表达式,MyBatis 3 替换了之前的大部分元素,大大精简了元素种类。

if
choose (when, otherwise)
trim (where, set)
foreach

7.1 搭建环境

CREATE TABLE `mybatis`.`blog`  (
  `id` int(10) NOT NULL AUTO_INCREMENT COMMENT '博客id',
  `title` varchar(30) NOT NULL COMMENT '博客标题',
  `author` varchar(30) NOT NULL COMMENT '博客作者',
  `create_time` datetime(0) NOT NULL COMMENT '创建时间',
  `views` int(30) NOT NULL COMMENT '浏览量',
  PRIMARY KEY (`id`)
)

b.创建一个基础工程
编写实体类:

package com.kuang.pojo;

import java.util.Date;
import lombok.Data;

@Data
public class Blog {
    private int id;
    private  String title;
    private String author;
    private Date createTime;//属性名和字段不一致
    private  int views;

    public Blog() {

    }

    public Blog(int id, String title, String author, Date createTime, int views) {
        this.id = id;
        this.title = title;
        this.author = author;
        this.createTime = createTime;
        this.views = views;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public int getViews() {
        return views;
    }

    public void setViews(int views) {
        this.views = views;
    }

    @Override
    public String toString() {
        return "Blog{" +
                "id=" + id +
                ", title='" + title + '\'' +
                ", author='" + author + '\'' +
                ", createTime=" + createTime +
                ", views=" + views +
                '}';
    }
}

7.2 IF

    <select id="queryBlogIF"  resultType="com.kuang.pojo.Blog" parameterType="map">
        select * from mybatis.blog where 1=1
        <if test="title != null">
            and title = #{title}
        </if>
        <if test="author != null">
            and author = #{author}
        </if>
    </select>

7.3 choose(when、otherwise)

          select * from mybatis.blog
           <where>
              <choose>
                  <when test="title != null">
                      title = #{title}
                  </when>
                  <when test="author != null">
                      and author = #{author}
                  </when>
                 <otherwise>
                     and views = #{views}
                 </otherwise>
              </choose>
           </where>

7.4 trim(where、set)

   select * from mybatis.blog
        <where>
            <if test="title != null">
                and title = #{title}
            </if>
            <if test="author != null">
                and author = #{author}
            </if>
        </where>
    <update id="upDateBlog" parameterType="map" >
        update mybatis.blog
        <set>
            <if test="title != null">
                title = #{title},
            </if>
            <if test="author != null">
                author = #{author}
            </if>
        </set>
        where id = #{id}
    </update>

7.5 foreach

      select * from mybatis.blog
        <where>
            <foreach collection="ids" item="id" open="and (" close=")" separator="or">
                id = #{id}
            </foreach>
        </where>

7.6 SQL片段

有的时候,我们可能会将一些功能的部分抽取出来,方便复用。
1.使用SQL标签抽取公共的部分。

<sql id="if-title-author">
    <if test="title != null">
        title = #{title},
    </if>
    <if test="author != null">
        author = #{author}
    </if>
</sql>

2.在需要使用得地方使用include标签引用即可。

    update mybatis.blog
    <set>
      <include refid="if-title-author"></include>
    </set>

注意事项:
a.最好基于单表来定义SQL片段。
b.不要存在where标签。

7.7 总结

动态SQL就是在拼接SQL语句,我们只要保证SQL得正确性,按照SQL的格式,去排列组合就可以了。

建议:

先在Mysql中写出完整的SQL再对应的去修改成为动态SQL,实现通用即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值