当前位置: 代码网 > it编程>编程语言>Java > MyBatis使用POJO参数动态查询教程的实现

MyBatis使用POJO参数动态查询教程的实现

2026年01月26日 Java 我要评论
项目结构概览(基于图片描述):mybatis02├─ src/main/java│ └─ cn.cjxy│ ├─ domain # 实体类(如 emp.java)│ ├─

项目结构概览(基于图片描述):

mybatis02
├─ src/main/java
│  └─ cn.cjxy
│     ├─ domain      # 实体类(如 emp.java)
│     ├─ mapper      # mapper 接口(如 empmapper.java)
│     └─ pojo        # 查询参数 pojo(如 querypojo.java)
├─ src/main/resources
│  ├─ cn.cjxy.mapper # xml 映射文件(如 empmapper.xml)
│  └─ mybatis-config.xml

一、pojo 参数定义

1.1 查询参数封装类querypojo.java

package cn.cjxy.pojo;

import cn.cjxy.domain.emp;
import lombok.data;
import lombok.noargsconstructor;
import lombok.allargsconstructor;

@data
@noargsconstructor
@allargsconstructor
public class querypojo {
    private emp emp;     // 嵌套对象(用于模糊查询名称)
    private double start; // 薪资范围下限
    private double end;   // 薪资范围上限
}
  • lombok 注解作用
    • @data:自动生成 getter/setter
    • @noargsconstructor:无参构造器
    • @allargsconstructor:全参构造器

二、mapper 接口与 xml 映射配置

2.1 mapper 接口方法empmapper.java

list<emp> findbypojo(querypojo pojo); // 接收 pojo 参数

2.2 xml 动态查询配置empmapper.xml

<select id="findbypojo" resulttype="cn.cjxy.domain.emp">
    select * from emp 
    where 
        salary >= #{start} 
        and salary <= #{end} 
        and name like #{emp.name} <!-- 访问嵌套对象属性 -->
</select>
  • 关键点
    • #{start}#{end} 直接访问 querypojo 的成员变量
    • #{emp.name} 通过嵌套对象访问 empname 属性

三、测试类实现

3.1 测试代码test01.java

@test
public void testfindbypojo() throws ioexception {
    // 1. 创建 emp 对象并设置模糊查询条件
    emp emp = new emp();
    emp.setname("%小%");  // 包含"小"的任意位置

    // 2. 封装查询参数到 pojo
    querypojo pojo = new querypojo();
    pojo.setemp(emp);
    pojo.setstart(6000.00);  // 薪资范围:6000~8000
    pojo.setend(8000.00);

    // 3. 执行查询
    list<emp> emplist = mapper.findbypojo(pojo);

    // 4. 输出结果
    emplist.foreach(system.out::println);
}

3.2 执行流程

  1. 参数构建
    • 创建 emp 对象,设置 name 为模糊查询条件 %小%
    • emp 对象及薪资范围封装到 querypojo
  2. sql 动态生成
    • mybatis 解析 #{emp.name} → 获取 emp.getname()
    • 最终生成 sql:
select * from emp 
where 
    salary >= 6000.00 
    and salary <= 8000.00 
    and name like '%小%'

四、核心优势与注意事项

4.1优势

  1. 参数集中管理
    • 将散落的参数封装为对象,提高代码可读性
  2. 支持复杂查询
    • 可嵌套对象、集合等复杂结构
  3. 动态 sql 友好
    • 结合 <if> 标签实现条件过滤:
<if test="start != null">
    and salary >= #{start}
</if>

4.2注意事项

  1. 属性访问规则
    • mybatis 通过 getter 方法访问属性,需确保 querypojoemp 类有对应的 getter(或使用 lombok)
  2. 模糊查询语法
    • 通配符 % 应在 java 代码中设置(如 %小%),而非 xml 中拼接,避免 sql 注入风险
  3. 空值处理
    • empnull#{emp.name} 会抛出 nullpointerexception,建议初始化对象:
public class querypojo {
    private emp emp = new emp(); // 防御性初始化
}

五、完整代码对照

文件关键代码
querypojo.java封装 emp 对象及薪资范围
empmapper.javalist<emp> findbypojo(querypojo pojo);
empmapper.xml通过 #{start}, #{end}, #{emp.name} 动态拼接 sql
test01.java构建 querypojo 参数并调用 mapper 方法

六、扩展应用

  1. 动态条件增强
    结合 <where><if> 标签实现可选条件查询:
<select id="findbypojo" resulttype="cn.cjxy.domain.emp">
    select * from emp 
    <where>
        <if test="start != null">and salary >= #{start}</if>
        <if test="end != null">and salary <= #{end}</if>
        <if test="emp.name != null">and name like #{emp.name}</if>
    </where>
</select>
  1. 分页查询整合
    querypojo 中添加 pagenumpagesize 字段,结合 pagehelper 插件实现分页:
pagehelper.startpage(pojo.getpagenum(), pojo.getpagesize());
list<emp> list = mapper.findbypojo(pojo);

到此这篇关于mybatis使用pojo参数动态查询教程的文章就介绍到这了,更多相关mybatis pojo参数动态查询内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com