参考: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. BPM体系文件管理解决方案分享

    一.方案概述 企业管理在很大程度上是通过文件化的形式表现出来,体系文件管理是管理体系存在的基础和证据,是规范企业管理活动和全体人员行为,达到管理目标的管理依据.对与公司质量.环境.职业健康安全等体系有 ...

  2. Linux实战教学笔记02:计算机系统硬件核心知识

    标签(空格分隔):Linux实战教学笔记-陈思齐 第1章 互联网企业常见服务器介绍 1.1 互联网公司服务器品牌 - DELL(大多数公司,常用) - HP - IBM(百度在用) 浪潮 联想 航天联 ...

  3. 《Ansible权威指南》笔记(2)——Inventory配置

    四.Inventory配置ansible通过Inventory来定义主机和组,使用时通过-i指定读取,默认/etc/ansible/hosts.可以存在多个Inventory,支持动态生成.1.定义主 ...

  4. NYOJ 975

    这道题一开始本着很朴素的想法就是先输入两头的数据,然后对每组的数据范围下测试中间的数据即可,但是是超时的.原因也很明显,比如计算1~1000的数据之后,假如下一组数据是1~1001,本来只需要多测试下 ...

  5. 解决Chrome 下载带半角分号出现net::ERR_RESPONSE_HEADERS_MULTIPLE_CONTENT_DISPOSITION的问题

    方式一:添加双引号Response.AddHeader("content-disposition", "attachment; filename=\"" ...

  6. Linux学习日记(二)

    在linux上运行.Net程序 并安装Linux网站 一.环境 ubuntu14.10(桌面版 官网下载的最新版) jexus5.6.3 正式版 MonoDevloper (安装完后里面有个Ubunt ...

  7. 这可能是史上最全的CSS自适应布局总结教程

    标题严格遵守了新广告法,你再不爽,我也没犯法呀!话不多说,直入正题. 所谓布局,其实包含两个含义:尺寸与定位.也就是说,所有与尺寸和定位相关的属性,都可以用来布局. 大体上,布局中会用到的有:尺寸相关 ...

  8. Nginx 配置简述

    不论是本地开发,还是远程到 Server 开发,还是给提供 demo 给人看效果,我们时常需要对 Nginx 做配置,Nginx 的配置项相当多,如果考虑性能配置起来会比较麻烦.不过,我们往往只是需要 ...

  9. 从Java文件到字节码文件

    本文涉及的javac编译器来自openjdk. javac的目录地址为:解压目录/langtools/src/share/classes/com/sun/tools/javac/ javac编译器将J ...

  10. CSharpGL(10)两个纹理叠加

    CSharpGL(10)两个纹理叠加 本文很简单,只说明如何用shader实现叠加两个纹理的效果. 另外,最近CSharpGL对渲染框架做了修改,清理一些别扭的内容(DoRender()前后的事件都去 ...