当前位置: 首页 > news >正文

动态sql以及常用的标签

什么是动态sql:

指根据不同的条件生成不同的sql

搭建环境:

建表:

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=utf8mb4

创建基础工程:

接口:

package com.heerlin.dao;public interface BlogMapper {
}

xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Config 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.heerlin.dao.BlogMapper"></mapper>

编写实体类

import jdk.jfr.DataAmount;
import lombok.Data;import java.util.Date;@Data
public class Blog {private int id;private String title;private String author;private Date createTime;private int views;}

utils:

package com.heerlin.utils;import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;public class MybatisUtils {private static SqlSessionFactory sqlSessionFactory;static {try {//创建数据库会话sqlSessionFactoryString resource = "mybatis-config.xml";//输入流InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);} catch (IOException e) {throw new RuntimeException(e);}}// 定义一个公共的静态方法,用于获取 SqlSession 对象public static SqlSession getSqlSession() {// 打开一个新的 SqlSession 会话return sqlSessionFactory.openSession();}
}

小技巧:开启驼峰命名转换

配置:

if

那就先写个接口吧

 写个sql:

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

 接下来测试一下

当我们没给传参时会查出所有信息

当map里有参数时:只会查询对应的数据

说明我们所写的动态sql生效,这就是动态sql里最简单的if

choose(when,otherwise)

有时候,我们不想使用所有的条件,而只是想从多个条件中选择一个使用。针对这种情况,MyBatis 提供了 choose 元素,它有点像 Java 中的 switch 语句。

还是上面的例子,但是策略变为:传入了 “title” 就按 “title” 查找,传入了 “author” 就按 “author” 查找的情形。若两者都没有传入,就返回标记为 featured 的 BLOG(这可能是管理员认为,与其返回大量的无意义随机 Blog,还不如返回一些由管理员精选的 Blog)。

<select id="findActiveBlogLike"resultType="Blog">SELECT * FROM BLOG WHERE state = ‘ACTIVE’<choose><when test="title != null">AND title like #{title}</when><when test="author != null and author.name != null">AND author_name like #{author.name}</when><otherwise>AND featured = 1</otherwise></choose>
</select>

trim(where,set)

where 元素只会在子元素返回任何内容的情况下才插入 “WHERE” 子句。而且,若子句的开头为 “AND” 或 “OR”,where 元素也会将它们去除。

如果 where 元素与你期望的不太一样,你也可以通过自定义 trim 元素来定制 where 元素的功能。

http://www.lryc.cn/news/105763.html

相关文章:

  • DID以及社交网络中的ZKP
  • 基于SWAT-MODFLOW地表水与地下水耦合
  • 2023拒绝内卷!两年转行网络安全真实看法!
  • 【SA8295P 源码分析】57 - libDSI_MAX96789_0.so驱动库 之 QDI_Panel_Init 显示屏初始化函数 代码分析
  • IDEA偶尔编译的时候不识别lombok
  • rust学习-构建服务器
  • Java并发----进程、线程、并行、并发
  • 【计算机网络】第 4 课 - 物理层
  • 深入理解MVVM架构模式
  • 配置IPv6 over IPv4手动隧道示例
  • Vue3--->组合式API与Pinia
  • 三言两语说透柯里化和反柯里化
  • 细讲TCP三次握手四次挥手(四)
  • HarmonyOS/OpenHarmony元服务开发-配置卡片的配置文件
  • mac安装nacos,M1芯片
  • 老板说把跳针改过去,什么是主板跳针
  • PyTorch代码实战入门
  • TSINGSEE青犀视频汇聚平台EasyCVR多种视频流播放协议介绍
  • Vivado进行自定义IP封装
  • 开放自动化软件的硬件平台
  • AdvancedInstaller打包程序
  • 无穷限积分习题
  • AI 3D结构光技术加持,小米引领智能门锁新标准
  • 管理类联考——逻辑——形式逻辑——汇总篇
  • 架构的分类
  • [SQL挖掘机] - 窗口函数 - lag
  • springboot项目如何自动重启(使用Devtools检测修改并自动重启springboot)
  • docker: Error response from daemon: No command specified.
  • 百度地图点标记加调用
  • MySQL 其他数据库日志