Mybatis 09

9. 1 动态 SQL


动态 SQL 就是 指 根据 不同的条件 生成 不同的 SQL 语句。也就是说 它的 自适应能力 会很强,会减少 我们 手写的 一些SQL。

比如说 在 项目开发的时候,我们可能会遇到 不同条件 进行 SQL 拼接的问题。
在这里插入图片描述
这个时候 其实 动态 SQL 就 显得 非常 牛B 了。但是 写起来 其实 也不太开心,只能说 重复的 再遇到 这种 问题的时候,复制粘贴 就好了。不需要考虑太多的事情。稍微改改就 ok。


9.1.1 环境搭建

CREATE TABLE `blog`(
`id` VARCHAR(50) NOT NULL COMMENT '博客id',
`title` VARCHAR(100) NOT NULL COMMENT '博客标题',
`author` VARCHAR(30) NOT NULL COMMENT '博客作者',
`create_time` DATETIME NOT NULL COMMENT '创建时间',
`views` INT(30) NOT NULL COMMENT '浏览量'
)ENGINE=INNODB DEFAULT CHARSET=utf8;

字段名 下划线问题:在 早些时候,特别是 Oracle 是不允许 大小写的。所以 我们就要写 下划线。也就 有了 create_Time 类似于 这样的字段名就出现了。

在这里插入图片描述
那么 怎么解决呢这个问题呢?字段名 现在 和 属性名 对应不上呀。

答案是:直接 在 mybatis-config.xml 进行 配置即可。在这里插入图片描述

    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>

写一个 UUID 的 工具类,因为我们 的 主键id 如果是 自增的,那么 实际上 int 类型的 那个 默认 id 是没啥意义的。那还不如 压根 就让它 随机生成了。

package top.muquanyu.utils;

import org.junit.Test;

import java.util.UUID;

@SuppressWarnings("all") // 抑制掉 警告
public class IDutils {
    public static String getId(){
        return UUID.randomUUID().toString().replaceAll("-","");
    }

    @Test
    public void test(){
        System.out.println(getId());
    }
}

在这里插入图片描述
当然 我们一定要注意,除了 查询 之外,剩下的 增删改 都是需要 提交事务的,否则 数据 不会 有更新变动。

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import top.muquanyu.Mapper.BlogMapper;
import top.muquanyu.pojo.Blog;
import top.muquanyu.utils.IDutils;
import top.muquanyu.utils.MybatisUtils;

import java.util.Date;

public class MyTest {
    @Test
    public void addInitBlog(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);

        Blog blog = new Blog();
        blog.setId(IDutils.getId());
        blog.setTitle("aaaa");
        blog.setAuthor("mqy");
        blog.setCreateTime(new Date());
        blog.setViews(9999);

        mapper.addBlog(blog);
        blog.setId(IDutils.getId());
        blog.setTitle("bbbb");
        blog.setAuthor("mqy");
        mapper.addBlog(blog);
        blog.setId(IDutils.getId());
        blog.setTitle("cccc");
        blog.setAuthor("mqy");
        mapper.addBlog(blog);

        sqlSession.commit();// 提交事务

        sqlSession.close();
    }
}

在这里插入图片描述


9.2.1 动态 SQL 之 IF 语句

  1. 解决 查询 关键字 不同 情况的 SQL 拼接。

在这里插入图片描述

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import top.muquanyu.Mapper.BlogMapper;
import top.muquanyu.pojo.Blog;
import top.muquanyu.utils.IDutils;
import top.muquanyu.utils.MybatisUtils;

import java.util.Date;
import java.util.HashMap;
import java.util.List;

public class MyTest {
    @Test
    public void addInitBlog(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);

        Blog blog = new Blog();
        blog.setId(IDutils.getId());
        blog.setTitle("aaaa");
        blog.setAuthor("mqy");
        blog.setCreateTime(new Date());
        blog.setViews(9999);

        mapper.addBlog(blog);
        blog.setId(IDutils.getId());
        blog.setTitle("bbbb");
        blog.setAuthor("mqy");
        mapper.addBlog(blog);
        blog.setId(IDutils.getId());
        blog.setTitle("cccc");
        blog.setAuthor("mqy");
        mapper.addBlog(blog);

        sqlSession.commit();// 提交事务

        sqlSession.close();
    }

    @Test
    public void test(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        BlogMapper mapper = sqlSession.getMapper(BlogMapper.class);
        HashMap<String, Object> map = new HashMap<>();
        map.put("title","aaaa");
        List<Blog> blogs = mapper.queryBlogIF(map);
        for (Blog blog : blogs) {
            System.out.println(blog);
        }
        sqlSession.close();

    }
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="top.muquanyu.Mapper.BlogMapper">
    <insert id="addBlog" parameterType="top.muquanyu.pojo.Blog">
        insert into test.blog(id,title,author,create_time,views)
        values(#{id},#{title},#{author},#{createTime},#{views});
    </insert>

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

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值