zoukankan      html  css  js  c++  java
  • 浅谈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("lucy@121.com");
            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);
            
        }
    }
  • 相关阅读:
    hdoj2187:悼念512汶川大地震遇难同胞 (贪心)
    2.0其它之Transform详解,以及UIElement和FrameworkElement的常用属性
    2.0外观之样式, 模板, 视觉状态和视觉状态管理器
    2.0图形之Ellipse, Line, Path, Polygon, Polyline, Rectangle
    2.0控件之ListBox, MediaElement, MultiScaleImage, PasswordBox, ProgressBar, RadioButton
    2.0画笔之SolidColorBrush, ImageBrush, VideoBrush, LinearGradientBrush, RadialGradientBrush
    2.0图形之基类System.Windows.Shapes.Shape
    2.0交互之鼠标事件和键盘事件
    2.0控件之ScrollViewer, Slider, StackPanel, TabControl, TextBlock, TextBox, ToggleButton
    2.0交互之InkPresenter(涂鸦板)
  • 原文地址:https://www.cnblogs.com/jayhou/p/9824127.html
Copyright © 2011-2022 走看看