Mybatis之动态SQL 模糊查询
发布日期:2021-11-14 22:18:51 浏览次数:9 分类:技术文章

本文共 3397 字,大约阅读时间需要 11 分钟。

原理

在实现模糊查询时我们需要考虑下面几个问题: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; } @Override public 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; } @Override public String toString() { return "ConditionUser [name=" + name + ", minAge=" + minAge + ", maxAge=" + maxAge + "]"; }}

配置文件

首先是关联关系及sql语句的配置

*重点在于下面SQL语句的 动态化 实现逻辑方式*

然后要注册到配置文件中

测试

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 {    @Test    public 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
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的判断来实现动态查询。

转载地址:https://blog.csdn.net/qq_18538781/article/details/53573352 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Mybatis调用存储过程
下一篇:Mybatis查询

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年03月28日 02时51分08秒