参考:github,   https://github.com/liuxiaochen0625/MyBatis-Spring-Boot-master.git

从controller组装tk.mybatis.mapper.entity.Example 对象,操作起来较为麻烦,不符合我们日常书写习惯,因而改造一下。

调用方法:

WhereBuilder builder = new WhereBuilder(UserInfo.class);
Example example = builder.and("username", OP.EQ, username).or("username", OP.EQ, "tom").and("password", OP.EQ, password).build();

链式操作,是不是很方便?~

具体WhereBuilder构造是参考android xutils的WhereBuilder和StringBuffer写的,如下:

public class WhereBuilder {
private final Example example; //定义examle对象,用于返回 public WhereBuilder(Class<?> tClass){this.example = new Example(tClass);}//构造方法中传入Class参数,实例化example public WhereBuilder and(String columnName,String op,Object value){ //and
Example.Criteria criteria = example.createCriteria();
assembleParams(criteria,columnName,op,value);
return this;
} public WhereBuilder or(String columnName,String op,Object value){ //or
Example.Criteria criteria = example.createCriteria();
assembleParams(criteria,columnName,op,value);
example.or(criteria); //or 需要example调用or(Example.Criteria criteria) 方法
return this;
} private void assembleParams(Example.Criteria criteria,String columnName,String op,Object value){ //组装参数
switch (op) {
case OP.LIKE:
if (!CommonUtils.isEmpty(value)) {
criteria.andLike(columnName, "%" + value + "%");
}
break;
case OP.LEFT_LIKE:
if (!CommonUtils.isEmpty(value)) {
criteria.andLike(columnName, "%" + value);
}
break;
case OP.LIKE_RIGHT:
if (!CommonUtils.isEmpty(value)) {
criteria.andLike(columnName, value + "%");
}
break;
case OP.EQ:
if (!CommonUtils.isEmpty(value)) {
criteria.andEqualTo(columnName, value);
}
break;
case OP.NE:
if (!CommonUtils.isEmpty(value)) {
criteria.andNotEqualTo(columnName, value);
}
break;
case OP.GT:
if (!CommonUtils.isEmpty(value)) {
criteria.andGreaterThan(columnName, value);
}
break;
case OP.NL:
if (!CommonUtils.isEmpty(value)) {
criteria.andGreaterThanOrEqualTo(columnName, value);
}
break;
case OP.LT:
if (!CommonUtils.isEmpty(value)) {
criteria.andLessThan(columnName, value);
}
break;
case OP.NG:
if (!CommonUtils.isEmpty(value)) {
criteria.andLessThanOrEqualTo(columnName, value);
}
break;
case OP.NULL:
criteria.andIsNull(columnName);
break;
case OP.NOTNULL:
criteria.andIsNotNull(columnName);
break;
case OP.IN:
if (!CommonUtils.isEmpty(value)) {
if (value instanceof ArrayList)
criteria.andIn(columnName, (ArrayList) value);
}
break;
case OP.BETWEEN:
if (!CommonUtils.isEmpty(value)) {
if (value instanceof ArrayList) {
criteria.andBetween(columnName, ((ArrayList) value).get(0),
((ArrayList) value).get(1));
}
}
break;
case OP.NOTBETWEEN:
if (!CommonUtils.isEmpty(value)) {
if (value instanceof ArrayList) {
criteria.andNotBetween(columnName, ((ArrayList) value).get(0),
((ArrayList) value).get(1));
}
}
break;
case OP.NOTIN:
if (!CommonUtils.isEmpty(value)) {
if (value instanceof ArrayList)
criteria.andNotIn(columnName, (ArrayList) value);
}
break;
default:
} } public Example build(){ //返回example实例
return example;
} }

建造者模式组装mybatis参数Example()的更多相关文章

  1. 8、Builder 建造者模式 组装复杂的实例 创造型模式

    1.什么是Builder模式 定义: 将一个复杂对象的构建与表示相分离,使得同样的构建过程可以创建不同的表示.大白话就是,你不需要知道这个类的内部是什么样的,只用把想使用的参数传进去就可以了,达到了解 ...

  2. JAVA设计模式 4【创建型】理解建造者模式

    Hello,又是拖了几天更,实在是忙的要死,有时候忙累了,真的就是倒头睡的那种,刚好今天闲下来了.今天来更新一篇建造者模式. 其实建造者模式,我们已经在上一节已经有了解过了.只不过是上一节没有提到这样 ...

  3. 我的强迫症系列之@Builder和建造者模式

    前言 备受争议的Lombok,有的人喜欢它让代码更整洁,有的人不喜欢它,巴拉巴拉一堆原因.在我看来Lombok唯一的缺点可能就是需要安装插件了,但是对于业务开发的项目来说,它的优点远远超过缺点. 我们 ...

  4. 设计模式实战系列之@Builder和建造者模式

    前言 备受争议的Lombok,有的人喜欢它让代码更整洁,有的人不喜欢它,巴拉巴拉一堆原因.在我看来Lombok唯一的缺点可能就是需要安装插件了,但是对于业务开发的项目来说,它的优点远远超过缺点. 我们 ...

  5. 设计模式系列之建造者模式(Builder Pattern)——复杂对象的组装与创建

    说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...

  6. 【原】iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数

    本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解释建造者模式的概念,那些东西太虚了.设计模式这种东西是为了解决实际问题的,不能为了设计模式而设计模式, ...

  7. iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数

    转自:http://www.cnblogs.com/wengzilin/p/4365855.html 本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解 ...

  8. 建造者模式(Builder)——从组装电脑开始

    建造者模式(Builder)--从组装电脑开始 建造者模式概括起来就是将不同独立的组件按照一定的条件组合起来构成一个相对业务完整的对象.调用者无需知道构造的过程. 我们从组装电脑开始 让我们从买组装电 ...

  9. 《Mybatis 手撸专栏》第10章:使用策略模式,调用参数处理器

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 你这代码写的,咋这么轴呢! 说到轴,让我想起初中上学时老师说的话:"你那脑 ...

随机推荐

  1. SQL SERVER导入数据到ORACLE的方法总结

    我们偶尔会有将数据从SQL SERVER导入到ORACLE当中的这种需求,那么这种跨数据库导数有那些方法呢?这些方法又有那些利弊呢? 下面比较肤浅的总结了一些可行的方法. 1:生成SQL脚本然后去OR ...

  2. Linux监控工具介绍系列——OSWatcher Black Box

      OSWatcher Balck Box简介 OSWatcher Black Box (oswbb)是Oracle开发.提供的一个小巧,但是实用.强大的系统工具,它可以用来抓取操作系统的性能指标,用 ...

  3. Linux设备管理(二)_从cdev_add说起

    我在Linux字符设备驱动框架一文中已经简单的介绍了字符设备驱动的基本的编程框架,这里我们来探讨一下Linux内核(以4.8.5内核为例)是怎么管理字符设备的,即当我们获得了设备号,分配了cdev结构 ...

  4. nuget常用命令

    nuget命令的用法: 一.安装 1.安装指定版本类库install-package <程序包名> -version <版本号> 2.安装到指定的项目install-packa ...

  5. Linux+apache+mono+asp.net安装教程

    Linux+apache+mono+asp.net安装教程(CentOS上测试的) 一.准备工作: 1.安装linux系统(CentOS,这个就不多讲了) 2.下载所需软件 http-2.4.4.ta ...

  6. 用Maven部署war包到远程Tomcat服务器

    过去我们发布一个Java Web程序通常的做法就是把它打成一个war包,然后用SSH这样的工具把它上传到服务器,并放到相应的目录里,让Tomcat自动去解包,完成部署. 很显然,这样做不够方便,且我们 ...

  7. Web API 入门指南 - 闲话安全

    Web API入门指南有些朋友回复问了些安全方面的问题,安全方面可以写的东西实在太多了,这里尽量围绕着Web API的安全性来展开,介绍一些安全的基本概念,常见安全隐患.相关的防御技巧以及Web AP ...

  8. 到爱尔兰敲代码 / Come, Coding in Ireland

    这是我在都柏林的第四个月,该办的证也都办完了,该安定下来的也安定下来了,所以也简单介绍下到爱尔兰做IT的相关过程和政策. 如果有兴趣在英语环境工作的话,我也可以帮忙推荐或者找找. 去年15年1月正好开 ...

  9. 新思想、新技术、新架构——更好更快的开发现代ASP.NET应用程序

    在博客园学习很长时间了,今天终于自己也开通了博客,准备分享一些感悟和经验.首先感谢博客园园主提供了这么好的程序员学习交流平台,也非常感谢张善友.dax.net.netfocus.司徒正美 等技术大牛的 ...

  10. Entity Framework 6 Recipes 2nd Edition(11-5)译 -> 从”模型定义”函数返回一个匿名类型

    11-5. 从”模型定义”函数返回一个匿名类型 问题 想创建一个返回一个匿名类型的”模型定义”函数 解决方案 假设已有游客(Visitor) 预订(reservation)房间(hotel ) 的模型 ...