Java中mybatis关于example类的使用详解

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

一、什么是example类

mybatis-generator会为每个字段产生如上的Criterion,如果表的字段比较多,产生的Example类会十分庞大。理论上通过example类可以构造你想到的任何筛选条件。在mybatis-generator中加以配置,配置数据表的生成操作就可以自动生成example了。具体配置可以参考MBG有关配置。
     下面是mybatis自动生成example的使用。

二、了解example成员变量

//升序还是降序
  //参数格式:字段+空格+asc(desc)
  protected String orderByClause;
  //去除重复
  //true是选择不重复记录
  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

到此这篇关于Java中mybatis中关于example类的使用详解的文章就介绍到这了,更多相关Java mybatis中example类内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

时间: 2020-07-19

基于Java代码配置MyBatis Generator

使用MyBatis Generator生成器时,有时候没办法使用xml形式的配置文件,比如将Maven项目设置成pom打包方式(<packaging>pom</packaging>)!由于Maven的工作机制对于打包方式为pom的项目是不会输出jar包或war包和resources内容,所以放在resources目录下或放在源码目录下的xml文件就没法读取了,就算你在pom.xml文件中明确有如下配置也没有用的: <build> <resources> &l

Mybatis单个参数的if判断报异常There is no getter for property named 'xxx' in 'class java.lang.Integer'的解决方案

我们都知道mybatis在进行参数判断的时候,直接可以用<if test=""></if> 就可以了,如下: 1.常规代码 <update id="update" parameterType="com.cq2022.zago.order.entity.Test" > update t_test_l <set > <if test="trnsctWayId != null"

Java中MyBatis Plus知识点总结

好程序员Java教程分享MyBatis Plus介绍: 1.MyBatis Plus 介绍 MyBatis Plus 是国内人员开发的 MyBatis 增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发.提高效率而生. MyBatis Plus 的核心功能有:支持通用的 CRUD.代码生成器与条件构造器. 通用 CRUD:定义好 Mapper 接口后,只需要继承 BaseMapper<T> 接口即可获得通用的增删改查功能,无需编写任何接口方法与配置文件 条件构造器:通过 Ent

Java框架MyBatis接口编程过程解析

要求: 1.配置文件的namespace名称空间指定为接口的全类名 2.配置文件中的id唯一标识与接口中的方法对应(返回值类型对应,方法名对应,参数个数和类型对应) 接口代码: package com.bird.mybatis.dao; import com.bird.mybatis.bean.Employee; public interface EmployeeMapper { public Employee getEmpById(Integer id); } 对应配置文件代码: <?xml

mybatis如何使用Java8的日期LocalDate和LocalDateTime详解

前言 相信大家应该都知道,在实体Entity里面,可以使用java.sql.Date.java.sql.Timestamp.java.util.Date来映射到数据库的date.timestamp.datetime等字段 但是,java.sql.Date.java.sql.Timestamp.java.util.Date这些类都不好用,很多方法都过时了. Java8里面新出来了一些API,LocalDate.LocalTime.LocalDateTime 非常好用 默认的情况下,在mybatis

Java使用MyBatis框架分页的5种方式

本文为大家分享了Java使用MyBatis框架分页的五种方式,供大家参考,具体内容如下 初始准备 1.创建分页对象类,方便模块间传值 //PageInfo.java import lombok.Data; @Data public class PageInfo { private int pageNo; private int pageSize; } 2.定义DAO层接口 import org.apache.ibatis.session.RowBounds; import org.springf

Java工程mybatis实现多表查询过程详解

1.先做一些准备工作 我们首先在创建一个 java 工程,还需要创建两张表,它们分别是用户表 user,和帖子表 post,一个户用户可以有多个帖子. user表的结构和数据: -- ---------------------------- -- Table structure for `user` -- ---------------------------- CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT

Java如何利用Mybatis进行数据权限控制详解

前言 权限控制主要分为两块,认证(Authentication)与授权(Authorization).认证之后确认了身份正确,业务系统就会进行授权,现在业界比较流行的模型就是RBAC(Role-Based Access Control).RBAC包含为下面四个要素:用户.角色.权限.资源.用户是源头,资源是目标,用户绑定至角色,资源与权限关联,最终将角色与权限关联,就形成了比较完整灵活的权限控制模型. 资源是最终需要控制的标的物,但是我们在一个业务系统中要将哪些元素作为待控制的资源呢?我将系统中

Java mybatis常见问题及解决方案

我们建立目录时一定得是这个格式 java中的目录结构和resource中的机构一定要一样,这是为了配置文件能准确映射到相应 注意看我的Java中有一个方法july.wild.dao.IUserDao,在resources中也有一个配置文件july/wild/dao/IUserDao.xml注意这个写法,不能变,因为我们在java目录下创建的是子包,而在resources目录下创建的时子目录,如果改了就会有提示找不到文件 当因为maven版本问题时: maven报错:不再支持源选项 5.请使用 7

微信小程序 HTTPS报错整理常见问题及解决方案

微信小程序 HTTPS报错常见问题及解决方案 微信小程序开放公测已经一个多月了,因官方需求文档要求后台使用HTTPS请求进行网络通信,不满足条件的域名和协议无法请求.越来越多的开发者纷纷使用SSL证书实践微信小程序的应用情况,但仍然会碰到各类问题.本文列举了SSL证书常见的报错和解决办法,供开发者参考. 常见问题一 在微信小程序内测的过程中,几乎每个开发者们在实践的过程中都遇到了下图的报错: 原因及解决办法: 这是因为wx.request 发起的是 https 请求,微信小程序读取大部分是请求A

Java Mybatis框架入门基础教程

一.Mybatis介绍 MyBatis是一款一流的支持自定义SQL.存储过程和高级映射的持久化框架.MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去 设置参数和获取检索结果.MyBatis能够使用简单的XML格式或者注解进行来配置,能够映射基本数据元素.Map接口和POJOs(普通java对象)到数据库中的记录. 二.MyBatis工作流程 (1)加载配置并初始化 触发条件:加载配置文件 配置来源于两个地方,一处是配置文件,一处是Java代码的注解,将SQL的配置信息加载成为一个个

vue项目中常见问题及解决方案(推荐)

webpack项目中自动引入全局scss变量文件 假设我们有一个公共的scss变量文件variables.scss /*存放所有全局变量*/ $card-title:#C7D200; //首页 卡片标题颜色 $bc-color:#182037; $hoverColor: #7abef9; //链接hover颜色 $fontColor: #E6EFFF; //字体颜色-白色 webpack要识别scss,需要先安装sass的loader npm install --save-dev sass-lo

tensorflow-gpu安装的常见问题及解决方案

装tensorflow-gpu的时候经常遇到问题,自己装过几次,经常遇到相同或者类似的问题,所以打算记录一下,也希望对其他人有所帮助 基本信息 tensorflow-gpu pip安装(virtualenv等虚拟安装实质也是pip安装,只是建了个独立的环境,不会影响系统环境,查问题比较容易,最多重新再创建一个干净的环境再来) 安装完之后会用import tensorflow看是否安装成功,结果报错,主要有碰到下面两大类报错信息: 1.ImportError: DLL load failed: 找

Java 创建URL的常见问题及解决方案

URL无处不在,不过似乎开发人员并没有真正地理解它们,因为我在Stack Overflow上经常看到有人在问如何正确的创建一个URL.想知道URL语法是如何工作的,可以看下Lunatech的 这篇文章 ,非常不错 . 本文不会深入介绍URL的全部语法(如果你想全面了解URL的话,可以读下 RFC 3986 , RFC 1738 , 以及上面提到的那篇文章,还有 W3上面的文档 ), 这里我想讲的是常见的一些库在操作URL方面存在的错误,以及如何通过 URL-builder 来正确的使用它,这是我

Android中WebView常见问题及解决方案汇总

Android WebView常见问题解决方案汇总: 就目前而言,如何应对版本的频繁更新呢,又如何灵活多变地展示我们的界面呢,这又涉及到了web app与native app之间孰优孰劣的争论. 于是乎,一种混合型的app诞生了,灵活多变的部分,如淘宝商城首页的活动页面,一集凡客诚品中我们都可以见到web页面与native页面的混合,既利用了web app的灵活易更新,也借助了native app本身的效率. 当然,就会用到webview这样的一个控件,这里,我把自己使用过程中遇到的一些问题整理

详解Java MyBatis 插入数据库返回主键

最近在搞一个电商系统中由于业务需求,需要在插入一条产品信息后返回产品Id,刚开始遇到一些坑,这里做下笔记,以防今后忘记. 类似下面这段代码一样获取插入后的主键 User user = new User(); user.setUserName("chenzhou"); user.setPassword("xxxx"); user.setComment("测试插入数据返回主键功能"); System.out.println("插入前主键为:

java MyBatis拦截器Inteceptor详细介绍

有许多java初学者对于MyBatis拦截器Inteceptor不是很了解,在这里我来为各位整理下篇关于java中MyBatis拦截器Inteceptor详解, 本文主要分析MyBatis的插件机制,实际就是Java动态代理实现的责任链模式实现. 根据官方文档.Mybatis只允许拦截以下方法,这个决定写拦截器注解签名参数. 代码如下 Executor (update, query, flushStatements, commit, rollback, getTransaction, close

Windows下Java+MyBatis框架+MySQL的开发环境搭建教程

MyBatis是一个Java持久化框架,它通过XML描述符或注解把对象与存储过程或SQL语句关联起来. MyBatis是在Apache许可证 2.0下分发的自由软件,是iBATIS 3.0的分支版本.其维护团队也包含iBATIS的初创成员. 与其他的对象关系映射框架不同,MyBatis并没有将Java对象与数据库表关联起来,而是将Java方法与SQL语句关联.MyBatis允许用户充分利用数据库的各种功能,例如存储过程.视图.各种复杂的查询以及某数据库的专有特性.如果要对遗留数据库.不规范的数据