原理

在实现模糊查询时我们需要考虑下面几个问题:
1:动态SQL语句
2:传入参数处理
3:查询结果处理

实现Demo目的:从User表中模糊查询姓名和年龄,姓名可能未知,年龄在minAge到maxAge之间

下面给出一个简单的动态查询案例

实体类

User实体

package com.mybatis.bean;public class User {private int id;private String name;private int age;public User() {}public User(int id, String name, int age) {super();this.id = id;this.name = name;this.age = age;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "User [id=" + id + ", name=" + name + ", age=" + age + "]";}}

封装User传入参数

package com.mybatis.bean;public class ConditionUser {private String name;private int minAge;private int maxAge;public ConditionUser(String name, int minAge, int maxAge) {super();this.name = name;this.minAge = minAge;this.maxAge = maxAge;}public ConditionUser() {super();}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getMinAge() {return minAge;}public void setMinAge(int minAge) {this.minAge = minAge;}public int getMaxAge() {return maxAge;}public void setMaxAge(int maxAge) {this.maxAge = maxAge;}@Overridepublic String toString() {return "ConditionUser [name=" + name + ", minAge=" + minAge+ ", maxAge=" + maxAge + "]";}}

配置文件

首先是关联关系及sql语句的配置
*重点在于下面SQL语句的 动态化 实现逻辑方式*

<?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="com.mybatis.bean.userMapper"><!-- 动态查询和模糊查询:参数类型为一个封装的对象 --><select id="getUser2" parameterType="com.mybatis.bean.ConditionUser"resultType="com.mybatis.bean.User">select * from d_user where age>=#{minAge} and age&lt;=#{maxAge}<if test='name!="%null%"'>and name like #{name}</if></select>
</mapper>

然后要注册到配置文件中

<mappers><mapper resource="com/mybatis/bean/userMapper.xml" /></mappers>

测试

package com.mybatis.test;import java.util.List;import org.apache.ibatis.session.SqlSession;
import org.junit.Test;import com.mybatis.bean.ConditionUser;
import com.mybatis.bean.User;
import com.mybatis.utils.MybatisUtils;public class Test7 {@Testpublic void test() {SqlSession session = MybatisUtils.getSession();/*      * 实际开发中我们的name和age可能是从页面传入过来的,* 同时要在sql语句中考虑用户可能查询的是一种条件的模糊查询,所以考虑* 不同模糊条件查询的组合情况,例如这里需要将name和age抽离出来,实现解耦* */String Statement = "com.mybatis.bean.userMapper.getUser2";ConditionUser parameter = new ConditionUser("%null%", 10, 20);List<User> users = session.selectList(Statement, parameter);for (Object user : users) {System.out.println(user);}session.close();}}

结果及说明

2016-12-11 15:18:09,497 [main] DEBUG [com.mybatis.bean.userMapper.getUser2] - ooo Using Connection [com.mysql.jdbc.JDBC4Connection@73d1386a]
2016-12-11 15:18:09,498 [main] DEBUG [com.mybatis.bean.userMapper.getUser2] - ==>  Preparing: select * from d_user where age>=? and age<=?
2016-12-11 15:18:09,592 [main] DEBUG [com.mybatis.bean.userMapper.getUser2] - ==> Parameters: 10(Integer), 20(Integer)
User [id=1, name=Tom, age=12]
User [id=2, name=Bob, age=13]
User [id=3, name=Jack, age=18]

从上面我么可以看出对于动态的查询我们主要需要考虑对于传入不同参数如何实现SQL语句的动态化处理,所以最简单的实现思路就是直接在数据库可视化工具中编写SQL语句进行测试,然后根据需要模糊查询的逻辑进行Where的选择以及if的判断来实现动态查询。

Mybatis之动态SQL 模糊查询相关推荐

  1. 【MyBatis】 动态SQL——模糊查询 LIKE

    一.like '%?%' SELECT * FROM t_usr WHERE name like '%${name}%' SQL解析为:SELECT * FROM t_usr WHERE name l ...

  2. 动态sql模糊查询和分页

    文章目录 动态sql 模糊查询 查询返回结果集的处理 分页 动态sql BookMapper xml bookservice 测试: MapperSql.test 运行: 模糊查询 BookMappe ...

  3. mybatis动态sql模糊查询方法

    动态SQL可以省略很多拼接SQL的步骤,使用类似于JSTL方式. 方式1 : <select id="queryBlogIf" resultType="blog&q ...

  4. 动态SQL 模糊查询 联表查询

    1. 正文 1. set标签 和 foreach标签 trim标签 sql片段 2. mybatis映射文件处理特殊字符. 3. mybatis完成模糊查询. 4. 联表查询 2. 动态sql 2.1 ...

  5. MyBatis 实践 -动态SQL/关联查询

    MyBatis 实践 标签: Java与存储 动态SQL 动态SQL提供了对SQL语句的灵活操作,通过表达式进行判断,对SQL进行拼接/组装. if 对查询条件进行判断,如果输入参数不为空才进行查询条 ...

  6. Mybatis:动态SQL分组查询

    目录 1.  实现思路 2. 代码实现 2.1  mapper 2.2 mapper 接口 2.3 Service层 AjaxResult对象 2.4 controller 2.5 测试 1.  实现 ...

  7. Mybatis的动态SQL

    小技巧:alt+shift选中 ctrl+shift以单词为单位控制 普通增删改查语句 -------------------------------------------------------- ...

  8. 利用MyBatis的动态SQL特性抽象统一SQL查询接口

    1. SQL查询的统一抽象 MyBatis制动动态SQL的构造,利用动态SQL和自定义的参数Bean抽象,可以将绝大部分SQL查询抽象为一个统一接口,查询参数使用一个自定义bean继承Map,使用映射 ...

  9. java day55【 Mybatis 连接池与事务深入 、 Mybatis 的动态 SQL 语句、 Mybatis 多表查询之一对多 、 Mybatis 多表查询之多对多】...

    第1章 Mybatis 连接池与事务深入 1.1 Mybatis 的连接池技术 1.1.1 Mybatis 连接池的分类 1.1.2 Mybatis 中数据源的配置 1.1.3 Mybatis 中 D ...

  10. MyBatis中动态sql实现时间范围比较的查询

    场景 前端传递两个时间参数,开始时间和结束时间,然后从数据库中筛选出某个时间属性在此范围的数据. Mybatis的动态sql的写法. 注: 博客: https://blog.csdn.net/bada ...

最新文章

  1. NPOI读取Excel数据应用
  2. 《AngularJS深度剖析与最佳实践》一第1章 从实战开始
  3. 动态规划经典算法--最长公共子序列 LCS
  4. Cisco Wireless Controller 5508 Configuration Step by Step – Part 1 (CLI and GUI Access, Upgrade)
  5. P1892-团伙【图论,并查集】
  6. 编码的奥秘txt_各学科最佳入门丛书推荐
  7. u盘怎么重装系统win11教程
  8. python main调试_在main.py中调试显示这个是什么问题
  9. 完全二叉树的高度为什么是对lgN向下取整
  10. 为Dragonfly配置私有仓库
  11. matplotlib画图并设置图片大小
  12. JFreeChart图形开发包学习笔记
  13. C语言手写爱心-还原最新热剧撩妹代码
  14. 在线生成二维码(微信)很好用
  15. SQL语句(三) 更新语句(增 删 改)
  16. X86-64指令解析
  17. python制作雷达图_如何利用Python matplotlib绘制雷达图
  18. 延迟加载js有哪些方式
  19. 前端程序员如何快速转型全栈工程师(基础版)
  20. 391 - 完美矩形问题

热门文章

  1. python 物理专业_ewant: 用Python 学通识物理
  2. Mapped Statements collection already contains value for...问题解决
  3. 数据分享:中国地面气象数据包含:气温、气压、露点、风向风速、云量、降水量。
  4. 【蓝桥杯】2018.B组.Java.第三题
  5. SAT写作开头必备神器,助你拿高分一臂之力
  6. 【动态】万事达卡暗示计划开发区块链结算系统
  7. 计算机课初中文化的学生招,我是一名初中信息技术教师,有时候想在理论课上讲..._教师招聘考试_帮考网...
  8. Nginx动态代理后获取客户端ip
  9. YDOOK:ESP8266EX 四大工作模式与耗能 低耗能分析
  10. css文本超出div隐藏剩下内容并显示省略号