• mybatis中关于example类详解


    这几天刚接触example,很多内容都是破碎的,写一篇文章加深理解。

    一、什么是example类

    mybatis-generator会为每个字段产生Criterion,为底层的mapper.xml创建动态sql。如果表的字段比较多,产生的example类会十分庞大。理论上通过example类可以构造你想到的任何筛选条件。在mybatis-generator中加以配置,配置数据表的生成操作就可以自动生成example了。具体配置可以参考 Mybatis-Generator的具体使用方法 - zorro的菜鸟笔记 - 博客园

    下面是mybatis自动生成example的使用。

    二、了解example成员变量

     //作用:升序还是降序
     //参数格式:字段+空格+asc(desc)
     protected String orderByClause;  
     //作用:去除重复
     //true是选择不重复记录,false,反之
     protected boolean distinct;
     //自定义查询条件
     //Criteria的集合,集合中对象是由or连接
     protected List<Criteria> oredCriteria;
     //内部类Criteria包含一个Cretiron的集合,
     //每一个Criteria对象内包含的Cretiron之间是由  AND连接的
     public static class Criteria extends GeneratedCriteria {
      protected Criteria() {super();}
     }
     //是mybatis中逆向工程中的代码模型
     protected abstract static class GeneratedCriteria {......}
     //是最基本,最底层的Where条件,用于字段级的筛选
     public static class Criterion {......}

    三、example使用前的准备

    比如我的example是根据user表生成的,UserMapper属于dao层,UserMapper.xml是对应的映射文件。

    UserMapper接口long countByExample(CompetingStoreExample example);
    List<CompetingStore> selectByExample(CompetingStoreExample example);
    
    在我们的测试类里UserExample example = new UserExample();
    UserExample.Criteria criteria = example.createCriteria();

    四、查询用户数量

     long count = UserMapper.countByExample(example);

    类似于:select count(*) from user

    五、where条件查询或多条件查询

     example.setOrderByClause(age asc"); //升序
     example.setDistinct(false); //不去重
     if(!StringUtils.isNotBlank(user.getName())){
     Criteria.andNameEqualTo(user.getName());
     }
     if(!StringUtils.isNotBlank(user.getSex())){
     Criteria.andSexEqualTo(user.getSex());
     }
     List<User> userList=userMapper.selectByExample(example);

    类似于:select * from user where name={#user.name} and sex={#user.sex} order by age asc;

     UserExample.Criteria criteria1 = example.createCriteria();
     UserExample.Criteria criteria2 = example.createCriteria();
     if(!StringUtils.isNotBlank(user.getName())){
     Criteria1.andNameEqualTo(user.getName());
     }
     if(!StringUtils.isNotBlank(user.getSex())){
     Criteria2.andSexEqualTo(user.getSex());
     }
     Example.or(criteria2);
     List<User> userList=userMapper.selectByExample(example);

    类似于:select * from user where name={#user.name} or sex={#user.sex} ;

    六、模糊查询

     if(!StringUtils.isNotBlank(user.getName())){
     criteria.andNameLIke(%+name+%);
     }
     List<User> userList=userMapper.selectByExample(example);

    类似于:select * from user where name like %{#user.name}%

    七、分页查询

     int start = (currentPage - 1) * rows;
     //分页查询中的一页数量
     example.setPageSize(rows); 
     //开始查询的位置
     example.setStartRow(start);  
     List<User> userList=userMapper.selectByExample(example);

    类似于:select * from user limit start to rows

    转自 知乎https://zhuanlan.zhihu.com/p/42411540

  • 相关阅读:
    async中series的实现 javascript构件
    6.算法-计数排序
    5.算法-快速排序
    4.堆排序
    3.分治法研究-搜索数组中的最长连续递增子集
    字典树(Trie)学习笔记
    并查集笔记
    求树的遍历
    P1087 FBI树
    P5017 摆渡车
  • 原文地址:https://www.cnblogs.com/cangqinglang/p/12367635.html
Copyright © 2020-2023  润新知