Mybatis 09

news/2024/12/28 20:38:11/

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("-","");}@Testpublic 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 {@Testpublic 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 {@Testpublic 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();}@Testpublic 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 mapperPUBLIC "-//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>

在这里插入图片描述


http://www.ppmy.cn/news/946073.html

相关文章

[转贴] 我忘记了妈妈的生日

我忘记了妈妈的生日——谨此文献给全天下伟大的妈妈和爱妈妈的儿女们2005年8月10日凌晨12点29分&#xff0c;我突然从床上坐起&#xff0c;眼泪一大滴一大滴的往下掉&#xff0c;妈妈的生日让我给忘了~~~~~~~ 二十几年了&#xff0c;妈妈从没忘过我的生日&#xff0c;可是我竟…

nmom下载地址

http://nmon.sourceforge.net/pmwiki.php?nSite.Download

USACO1.4 母亲的牛奶 Mother's Milk

母亲的牛奶 题目描述 农民约翰有三个容量分别是A,B,C升的桶&#xff0c;A,B,C分别是三个从1到20的整数&#xff0c; 最初&#xff0c;A和B桶都是空的&#xff0c;而C桶是装满牛奶的。有时&#xff0c;农民把牛奶从一个桶倒到另一个桶中&#xff0c;直到被灌桶装满或原桶空了。当…

MOM

http://www.cnblogs.com/charlesblc/p/6045238.html

abc199

D 分析题目总方法是为3^20次方肯定是超时的 但是如果我们先给一个数赋值的话 那后面的数 最多就只有2 所以最大就是 3*2^19次方 肯定是能写的 首先我们要考虑 这如果不是一个连通块会怎么样 不同联通块 之间 肯定是没有 影响的 所以直接将 不同连通块 符合条件的个数相乘就行了…

Day_57_Mybatis

1. mapper实现三种方式&#xff1a; 1.1 sqlSession直接执行对应的mapper.xml中的sqlID (只需要创建mapper.xml即可) 在mybatis配置文件中的映射方式如下 <!--映射的文件或接口 &#xff0c;如果映射的文件 那么用/隔开 &#xff0c;如果是接口或类要用 . 隔开 -->…

老妈的生日

中午吃饭不到半个小时&#xff0c; 收到N个短信&#xff0c; 内容一样&#xff0c;寥寥数字&#xff0c; “妈妈今天生日&#xff0c; 打电话&#xff0c; 爸”。 一翻日历&#xff0c; 好家伙&#xff0c; 差点忘记&#xff0c; 多亏老爸及时提醒。 电话过去的时候&#xff0c…

纪念我的母亲

纪念我的母亲 2008年12月14日&#xff0c;即农历冬月十七&#xff0c;这是我人生记忆中最黑暗的一天&#xff0c;我失去了我生命中最重要的人――母亲&#xff01;那天之前的好几天&#xff0c;我的眼睛就一直在跳&#xff0c;心里很担心母亲的近况&#xff0c;常常不由自主地叹…