目录

  • 1. UserMapper接口
  • 1. sql-if
  • 2. sql-foreach
  • 3. 多条件查询和根据多个id查询测试
say sth..
每当我回顾以前写jdbc分页,多条件查询时,我那是有多痛苦。
特别是当我拼接条件时,对象.getName 又是判断null,又是判断空字符串的。
还得拿一个集合来装条件。以及列名后面的逗号,where 条件的空格。
我/(ㄒoㄒ)/~~
搞得我特别压抑,好了,现在mybatis的sql标签来甜我了。\( ̄︶ ̄*\))

jdbc规范下的动态查询

1. UserMapper接口

user表字段userId userName userPassword
查询涉及到- where不确定条件查询 sql-if- in 多条件查询- 不提供实体类
  • 关于mybatis环境搭建
  • 关于代理开发接口实现
package cn.bitqian.dao;import cn.bitqian.entity.User;import java.util.List;/*** @author echo lovely* @date 2020/9/11 15:36*/
public interface UserMapper {public List<User> queryUserByCondition(User user);public List<User> queryUserByIds(List<Integer> ids);
}

1. sql-if

<?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="cn.bitqian.dao.UserMapper"><!--sql 片段的抽取 statement标签内使用include标签进行引用--><sql id="selectUserPart">select * from users1</sql><!-- 根据id or name or pwd 查询 --><select id="queryUserByCondition" parameterType="user" resultType="user"><include refid="selectUserPart"></include><where><if test="userId != 0 and userId != null">and userid = #{userId}</if><if test="userName != null">and username = #{userName}</if><if test="userPassword != null">and userpassword = #{userPassword}</if></where></select>
</mapper>

2. sql-foreach

<?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="cn.bitqian.dao.UserMapper"><select id="queryUserByIds" parameterType="list" resultType="user">select * from users1 <!-- where userid in (1, 2, 3) --><where><!--collection=arrayopen, end 拼接sql写死的片段separator 为分隔符item 为list中的每个元素--><foreach collection="list" open="userid in (" close=")" separator="," item="userId">#{userId}</foreach></where></select></mapper>

3. 多条件查询和根据多个id查询测试

import cn.bitqian.dao.UserMapper;
import cn.bitqian.entity.User;
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 org.junit.Test;import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;/*** 动态sql测试* @author echo lovely* @date 2020/9/11 15:50*/
public class DynamicDemoTest {public SqlSession getSqlSession() {try {InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);// 默认提交事务return sqlSessionFactory.openSession(true);} catch (IOException e) {e.printStackTrace();}return null;}@Testpublic void test1() {SqlSession sqlSession = getSqlSession();if (sqlSession != null) {UserMapper userMapper = sqlSession.getMapper(UserMapper.class);User user = new User();// user.setUserId(1);user.setUserName("rose");user.setUserPassword("love jack");List<User> userList = userMapper.queryUserByCondition(user);System.out.println(userList);sqlSession.close();}}@Testpublic void test2() {SqlSession sqlSession = getSqlSession();if (sqlSession != null) {UserMapper userMapper = sqlSession.getMapper(UserMapper.class);ArrayList<Integer> list = new ArrayList<>();list.add(1);list.add(3);// 查询user id 为1或者为2的数据记录System.out.println(userMapper.queryUserByIds(list));sqlSession.close();}}}

动态sql (sql-if,sql-foreach)相关推荐

  1. MyBatis Dynamic SQL(一)— 真正的Mybatis动态sql — MyBatis Dynamic SQL

    目录 现状 MyBatis Dynamic SQL 项目地址 官方文档 项目介绍 作者 Mybatis Generator 简介 特性 目标 提示 快速使用 步骤 定义常量Tables和Columns ...

  2. (转)动态SQL和PL/SQL的EXECUTE IMMEDIATE选项

    EXECUTE IMMEDIATE代替了以前Oracle8i中DBMS_SQL package包.它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前,EX ...

  3. sql 动态写入数据库字段_批处理写入,动态SQL和参数化SQL,数据库的性能如何?...

    sql 动态写入数据库字段 最有效的数据库优化之一是批处理写入. 批处理写入受大多数现代数据库和JDBC标准的一部分支持,并且受大多数JPA提供程序支持. 普通数据库访问包括在单独的数据库/网络访问中 ...

  4. 动态SQL和PL/SQL的EXECUTE选项分析

    EXECUTE IMMEDIATE代替了以前Oracle8i中DBMS_SQL package包.它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前,EX ...

  5. 动态sql语句(即sql语句的拼接)

    10.1  if标签(属性:test(判断条件)) 缺点:如果仅仅是第二个条件满足导致sql语句出错(故使用if+where) 1 <select id="select1" ...

  6. 真正的Mybatis动态sql —MyBatis Dynamic SQL

    MyBatis Dynamic SQL MyBatis Dynamic SQL简介 MyBatis缺点 MyBatis Dynamic SQL优势 MyBatis Dynamic SQL项目信息 项目 ...

  7. 动态SQL与静态SQL

    SQL 语句从编译和运行的角度可以分为静态 SQL和 动态 SQL,所谓SQL的动态和静态,是指SQL语句在何时被编译和执行. 这两种 SQL 在使用方式.运行机制和性能表现等方面各有特点 : 静态 ...

  8. sql 函数执行动态sql_什么是SQL函数?

    sql 函数执行动态sql SQL provides many built-in functions to perform operations on data. These functions ar ...

  9. sqlserver sql语句|经典sql语句|实用sql语句

    sqlserver sql语句|经典sql语句|实用sql语句 一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 drop databa ...

  10. 学习SQL语句之SQL语句大全

    学习SQL语句之SQL语句大全 -------------------------------------------------------------------------------- 作者: ...

最新文章

  1. PHP开发之递归算法的三种实现方法
  2. webDriver测试百度登录java版
  3. 域名解析的记录类型区别
  4. (chap6 Http首部) 为Cookie服务的首部字段
  5. WebSocket-nodejs实现
  6. 利用python进行数据分析D1——ch02引言
  7. oracle解决存储嗅探,DBA警示录:存储故障的处理应当谨慎
  8. 随想录(网站api的设计)
  9. 反激式开关电源电路的测试记录(一)
  10. 如何快速制作出精致的ppt模板?
  11. linux realtek声卡驱动下载,下载:Realtek HD Audio音频驱动2.06版
  12. LabVIEW与西门子1200,1500系列Sanp7协议通讯案例+QMH标准框架编写,非常实用,长期测试通讯无误。
  13. mysql 字段值分布很少的字段要不要加索引
  14. 免费数据库及常用统计网址-数学建模(二十)
  15. dcloud 本地存储
  16. 计算机科学与技术毕业论文选题【精选】
  17. PHP案例:每一个账号登陆后的操作是隔离的(使用token进行登录)
  18. Linux 缓存释放和管理
  19. java 转 js_无需访问源码!Java迅速转为JavaScript
  20. 3dmax模型复制卡,为什么?

热门文章

  1. oracle之创建和管理表之练习题
  2. 前端学习(1272):路由的基本概念和说明
  3. html+css+js+jquery之常见的的本地存储实现一个简单的todoList项目
  4. 计算机操作系统(7):进程的基本概念
  5. java学习(88):Charactor包装类
  6. 实例41:python
  7. 秒杀系统 mysql_秒杀系统-介绍
  8. CSS Grid布局(1)
  9. django后台数据管理admin设置代码
  10. jquery点击完一个按钮,并且触发另一个按钮