浅谈MyBatis-Plus学习之条件构造器 EntityWrapper

一、EntityWrapper介绍

在实际的开发过程中更多的是带有复杂条件的SQL操作,而不是简单的增删改查。而在这方面MP也提供了条件构造器EntityWrapper(简称EW)来让开发者自由构建SQL操作条件。

注意:条件封装属性,使用的是数据库字段,而不是Java实体属性!

以下列出的是MybatisPlus提供的条件参数:

二、以下是EntityWrapper的使用例子

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations= {"classpath:applicationContext.xml"})
public class TestEntityWrapper {
    @Autowired
    private EmployeeMapper employeeMapper;

    @Test
    public void testEntityWrapperSelectPage() {
        //需要分页查询 tbl_employee 表中,年龄在 18~50 之间性别为男且姓名为 xx 的所有用户
        List<Employee> emps = employeeMapper.selectPage(new Page<Employee>(1, 2),
                                  new EntityWrapper<Employee>()
                                  .between("age", 18, 50)
                                  .eq("gender", 0)
                                  .eq("last_name", "jack"));
        System.out.println(emps);

    }

    @Test
    public void testEntityWrapperSelectList() {
        //需要查询 tbl_employee 表中, 性别为男且姓名中带有“J”的 或者 邮箱中带有“a”的所有用户
        List<Employee> emps = employeeMapper.selectList(new EntityWrapper<Employee>()
                                  .eq("gender", 1)
                                  .like("last_name", "j")
                                  //.or()  //WHERE (gender = ? AND last_name LIKE ? OR email LIKE ?)
                                  .orNew() //WHERE (gender = ? AND last_name LIKE ?) OR (email LIKE ?)
                                  .like("email", "a"));
        System.out.println(emps);
    }

    /**
     * 条件构造器  修改操作
     */
    @Test
    public void testEntityWrapperUpdate() {
        //修改tbl_employee 表中, 年龄为25且姓名为“jack”的用户
        //将修改的结果封装成对象
        Employee entity = new Employee();
        entity.setLastName("Lucy");
        entity.setEmail("[email protected]");
        Integer res = employeeMapper.update(entity,    //UPDATE tbl_employjee SET last_name=?, email=? WHERE (age = ? AND last_name = ?)
                       new EntityWrapper<Employee>()
                              .eq("age", 25)
                              .eq("last_name", "jack")
                       );
        System.out.println("res: " + res);
    }

    /**
     * 条件构造器  删除操作
     */
    @Test
    public void testEntityWrapperDelete() {
        //删除名字有“o”且性别为女的用户
        employeeMapper.delete(new EntityWrapper<Employee>()  //WHERE (last_name LIKE ? AND gender = ?)
                              .like("last_name", "o")
                              .eq("gender", 0)
                               );
    }

    /**
     * 条件构造器,排序操作
     */
    @Test
    public void testEntityWrapperSort() {
        //查询为女的,根据age进行排序(asc/desc),简单排序
        List<Employee> page = employeeMapper.selectPage(new Page<Employee>(1, 2),
                                  new EntityWrapper<Employee>()  // WHERE (gender = ?) ORDER BY age ASC
                                  .eq("gender", 0)
                                  //.orderAsc(Arrays.asList(new String[] {"age"})));
                                  .orderBy("age")  // WHERE (gender = ?) ORDER BY age Desc
                                  .last("Desc") //手动拼接SQL,有注入危险
                                  );
        System.out.println(page);
    }

    /**
     * Condiction的使用
     */
    @Test
    public void testConditionSelectPage() {
        //需要分页查询 tbl_employee 表中,年龄在 18~50 之间性别为男且姓名为 xx 的所有用户
        List<Employee> page = employeeMapper.selectPage(new Page<Employee>(1, 2),
                                  Condition.create()
                                  .between("age", 18, 50)
                                  .eq("gender", 1)
                                  .eq("last_name", "jack")
                                  );
        System.out.println(page);

    }
}

原文地址:https://www.cnblogs.com/jayhou/p/9824127.html

时间: 2024-10-15 10:16:26

浅谈MyBatis-Plus学习之条件构造器 EntityWrapper的相关文章

浅谈设计模式的学习(下)

时间过得真快啊,不知不觉又要周末了,借这个周末时间.把<浅谈设计模式的学习(下)>补上吧. 在<浅谈设计模式的学习(中)>中,说到了保持抽象的思维.接下来说一下第四点,做一个分享,也记录一下自己的学习历程. 4.学习设计模式,就不要把它看的太认真    设计模式是一个编程思想,它不是具体的代码套路.举个例子说明一下: 由于家传,接触到了一些中国的传统武术.当我与那些不懂传统武术的人交流的时候,他们总是认为中国的传统武术都是些套路.花架子,只是用来好看.在他们认为,两人打架,别人出拳

浅谈设计模式的学习(中)

在<浅谈设计模式的学习(上)>中我说到了设计模式的基石-----抽象思维.为什么需要抽象思维呢?因为越抽象就越不容易出错,就像有些领导人说话:坚持改革开放.但怎么算坚持改革开放呢,没有具体的标准,因事而异,所以就不容易违背这个坚持改革开放的原则了. 3.学习设计模式,要保持抽象的思维     什么是抽象思维呢?真的不好说,抽象的东西往往难以说明白,听了也难以搞明白,还是通过具体的例子来说吧 有这么一个学生请假的场景,如果请假时间一天以内则有班长批准就可以了,三天以内则需要老师批准,超过三天就得

浅谈设计模式的学习(上)

作为一个开发人员,能写出一个漂亮可扩展的代码,绝对是一件令人愉快的事情.那设计模式就是一门必修课! 本文就自己学习设计模式的一点经历做一个记录. 本人在读大学时,为了学习设计模式就买了一本<java与模式>的数据,书籍有一千多页很重.而且价格不菲.没办法,花那么多钱买的不看岂不浪费.于是每天早上读一章,坚持几个月我终于读完了.这几个月真是煎熬啊,几个月下来,回忆一下似乎自己真得也没收获到什么,很悍然啊.难道是书籍不好吗还是我读的不认真?其实在我现在看来都不是.而为什么读完了却什么也没收获到呢?

【数学教学论文】浅谈小学生数学学习兴趣的培养

浅谈小学生数学学习兴趣的培养 作者:刘亚儒 摘要:古代教育家朱熹曾说:"教人未见其兴趣,必不乐学."由此可见,兴趣的培养在教学过程中至关重要,有利于提高数学课堂的教学效率和学生的学习质量.因此,本文对如何培养学生数学学习兴趣进行了进一步探讨. 关键词:小学生:数学:兴趣培养 一.兴趣在小学生数学学习中的重要性 孔子说过:"知之者不如好之者,好之者不如乐之者."所谓"乐",其实就是我们所说的"喜欢",即兴趣.学习兴趣是学生学习的

浅谈MyBatis缓存

在谈论MyBatis的缓存之前,我们先说说它的延迟加载,所谓延迟加载, resultMap中的association和collection标签具有延迟加载的功能.延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息.使用关联信息时再去加载关联信息. 设置延迟加载 需要在SqlMapConfig.xml文件中,在<settings>标签中设置下延迟加载. lazyLoadingEnabled.aggressiveLazyLoading 什么是查询缓存 Mybatis的一级缓存是指SqlS

浅谈Java的学习

Java就是用来做项目的!Java的主要应用领域就是企业级的项目开发!要想从事企业级的项目开发,你必须掌握如下要点: 1.掌握项目开发的基本步骤2.具备极强的面向对象的分析与设计技巧3.掌握用例驱动.以架构为核心的主流开发方法 没有人愿意自己一辈子就满足于掌握了一些代码实现的技巧,别人告诉你要实现什么,你就用代码堆砌来实现别人的要求!你必须学会从整个项目的角度去思考!你必须学会假如你是项目经理,你该如何思考!你必须学会假如你是架构师,你该如何思考!你必须掌握针对某个特定问题领域的分析方法! 关于

浅谈身为小白学习Linux系统的四点实用建议

游戏.办公.安全,可以总结为是方便当代人们在生活中的刚需,我们大都是这些服务的使用者,而把单个功能整合起来那就必须谈到互联网,自然而然通过互联网要将Service发送给Service management,经过Service management的处理将结果反馈给使用者,整个过程下来总结为:发送请求.处理请求.反馈请求,这就是一切方便用户,用户只需要发送和接收反馈,而中间的网络传输和服务的处理就交给网络运营商和服务运营商,根据我们的标题,我们这次来简谈下服务运营商端是怎么处理相对复杂的服务请求.

浅谈mybatis如何半自动化解耦和ORM实现

在JAVA发展过程中,涌现出一系列的ORM框架,JPA,Hibernate,Mybatis和Spring jdbc,本系列,将来研究Mybatis. 通过研究mybatis源码,可将mybatis的大致架构总结为下图: 1.根据Mybatis源码,将其抽象为三层:基础支持层,核心处理层和接口层 2.基础支持层包括:数据源.事务管理.日志.类型转换.缓存.Bind.解析器等 3.核心处理层包括:配置解析.配置映射.SQL解析.SQL执行.结果集映射.插件等 4.接口层主要提供JAVA API 在本

浅谈Mybatis通用Mapper使用方法_java - JAVA

文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 对单表进行增删改查是项目中不可避免的需求,Mybatis的通用Mapper插件使这些操作变得简单 添加maven依赖 在对应工程的pom.xml文件中添加 <dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> <version>1