建造者模式组装mybatis参数Example()
参考: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()的更多相关文章
- 8、Builder 建造者模式 组装复杂的实例 创造型模式
1.什么是Builder模式 定义: 将一个复杂对象的构建与表示相分离,使得同样的构建过程可以创建不同的表示.大白话就是,你不需要知道这个类的内部是什么样的,只用把想使用的参数传进去就可以了,达到了解 ...
- JAVA设计模式 4【创建型】理解建造者模式
Hello,又是拖了几天更,实在是忙的要死,有时候忙累了,真的就是倒头睡的那种,刚好今天闲下来了.今天来更新一篇建造者模式. 其实建造者模式,我们已经在上一节已经有了解过了.只不过是上一节没有提到这样 ...
- 我的强迫症系列之@Builder和建造者模式
前言 备受争议的Lombok,有的人喜欢它让代码更整洁,有的人不喜欢它,巴拉巴拉一堆原因.在我看来Lombok唯一的缺点可能就是需要安装插件了,但是对于业务开发的项目来说,它的优点远远超过缺点. 我们 ...
- 设计模式实战系列之@Builder和建造者模式
前言 备受争议的Lombok,有的人喜欢它让代码更整洁,有的人不喜欢它,巴拉巴拉一堆原因.在我看来Lombok唯一的缺点可能就是需要安装插件了,但是对于业务开发的项目来说,它的优点远远超过缺点. 我们 ...
- 设计模式系列之建造者模式(Builder Pattern)——复杂对象的组装与创建
说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...
- 【原】iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数
本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解释建造者模式的概念,那些东西太虚了.设计模式这种东西是为了解决实际问题的,不能为了设计模式而设计模式, ...
- iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数
转自:http://www.cnblogs.com/wengzilin/p/4365855.html 本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解 ...
- 建造者模式(Builder)——从组装电脑开始
建造者模式(Builder)--从组装电脑开始 建造者模式概括起来就是将不同独立的组件按照一定的条件组合起来构成一个相对业务完整的对象.调用者无需知道构造的过程. 我们从组装电脑开始 让我们从买组装电 ...
- 《Mybatis 手撸专栏》第10章:使用策略模式,调用参数处理器
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 你这代码写的,咋这么轴呢! 说到轴,让我想起初中上学时老师说的话:"你那脑 ...
随机推荐
- windows charles response 乱码解决办法
使用windows 版本的charles来做代理,发现服务端返回的response会出现中文乱码的情况, 查看软件设置,遗憾的是并没有关于编码的选项. 好在charles windows版本安装目录下 ...
- 不要着急改代码,先想想--centos 6.8下编译安装tmux
诸位读者新年好,2017开年第一篇博客,请允许我先问候一下看到这篇博客的诸位.写博客是我2017年定下的目标之一,希望我会坚持下去. 最近打算尝试一下tmux这个神器,于是有了这一篇关于思维方式的Bl ...
- Spring Quartz实现任务调度
任务调度 在企业级应用中,经常会制定一些"计划任务",即在某个时间点做某件事情 核心是以时间为关注点,即在一个特定的时间点,系统执行指定的一个操作 任务调度涉及多线程并发.线程池维 ...
- PHP 数组浅析
PHP的数组具有如下特点:1.数组初始化时无需指定长度:2.数组中的元素无需相同类型:3.数组的长度可变4.可使用var_dump(参数)或者print_r( 参数) 函数查看数组变量.5.数组内的 ...
- XSS 前端防火墙 —— 整装待发
到目前为止,我们把能用前端脚本防御 XSS 的方案都列举了一遍. 尽管看起来似乎很复杂累赘,不过那些是理论探讨而已,在实际中未必要都实现.我们的目标只是为了预警,能发现问题就行,并非要做到滴水不漏的程 ...
- NodeJs 开发微信公众号(三)微信事件交互
微信公众号有个规则,一旦开启了开发者模式,其他的常规功能就都必须通过接口调用完成.比如说自定义菜单功能,必须通过发送post请求的方式生成.本章就通过关注到取消关注的整个过程来谈一谈nodejs是怎么 ...
- 在 Ubuntu 15.04 中使用 ubuntu-make、Eclipse 4.4、Java 8 以及 WTP
Ubuntu 今天发布新版本了 其实昨天(2015-04-23)我就看到了 Ubuntu 发布新版本的新闻,下班后回家的第一件事就是访问 Ubuntu 的官网,很可惜,没有提供下载.今天(2015-0 ...
- DataTable转换成IList<T>的简单实现
DataTable的无奈 很多时候,我们需要去操作DataTable.但DataTable的操作,实在是太不方便了.Linq?lambda表达式?统统没有... 特别是对现有结果集做进一步筛选,这样的 ...
- 快速Android开发系列网络篇之Retrofit
Retrofit是一个不错的网络请求库,用官方自己的介绍就是: A type-safe REST client for Android and Java 看官网的介绍用起来很省事,不过如果不了解它是怎 ...
- ABP(现代ASP.NET样板开发框架)系列之3、ABP分层架构
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之3.ABP分层架构 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...