`

带条件查询工具类Query

SQL 
阅读更多
package com.rzy.api.db;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Query
{
	private static Query query = null;
	private String table = null;
	private String baseSQL = null;
	private Map<String, String> condMap = new HashMap<String, String>();

	private Query(String tableName)
	{
		this.table = tableName.toUpperCase();
		baseSQL = String.format("SELECT * FROM %s T", this.table);
	}

	/**
	 * 根据表名创建Query单例对象
	 * 
	 * @return Query单例对象
	 */
	public static Query Create(String tableName)
	{
		query = new Query(tableName);
		return query;
	}

	/**
	 * 根据条件MAP得到条件SQL语句
	 * 
	 * @return
	 */
	private StringBuffer getWHERE()
	{
		StringBuffer where = new StringBuffer();
		for (Map.Entry<String, String> entry : this.condMap.entrySet())
		{
			String field = entry.getKey();
			String[] arr = entry.getValue().split("\\|");
			if ("=".equals(arr[0]))
			{
				if (where.length() != 0)
				{
					where.append(" AND ");
				}
				where.append(field).append(arr[0]).append("\'").append(arr[1])
						.append("\'");
			}
			else if ("LIKE".equalsIgnoreCase(arr[0]))
			{
				if (where.length() != 0)
				{
					where.append(" AND ");
				}
				where.append(field).append(" LIKE \'%").append(arr[1]).append(
						"%\'");
			}
			else if ("BETWEEN".equalsIgnoreCase(arr[0]))
			{
				if (where.length() != 0)
				{
					where.append(" AND ");
				}
				where.append("(").append(field).append(" BETWEEN \'").append(
						arr[1]).append("\' AND \'").append(arr[2])
						.append("\')");
			}
			else if ("IN".equalsIgnoreCase(arr[0]))
			{
				if (where.length() != 0)
				{
					where.append(" AND ");
				}
				where.append(field).append(" IN(").append(arr[1]).append(")");
			}
			else if ("ORDER".equalsIgnoreCase(arr[0]))
			{
				if (where.length() != 0)
				{
					where.append(" ORDER BY ");
				}
				else
				{
					where.append("ORDER BY ");
				}
				where.append(field).append(" ").append(arr[1]);
			}
			else
			{
				if (where.length() != 0)
				{
					where.append(" AND ");
				}
				where.append(field).append(arr[0]).append(arr[1]);
			}
		}
		boolean isOnlyOrder = where.toString().startsWith("ORDER BY");
		if (!isOnlyOrder)
		{
			where.insert(0, "WHERE ");
		}
		return where;
	}

	/**
	 * 根据条件MAP得到SQL语句
	 * 
	 * @return SQL语句
	 */
	private String SQL()
	{
		StringBuffer ret = new StringBuffer(baseSQL);
		if (this.condMap != null && this.condMap.size() != 0)
		{
			ret.append(" ").append(getWHERE());
		}
		return ret.toString();
	}

	/**
	 * 查询
	 * 
	 * @return 数据集合List<Map<k,v>> 其中k:字段名小写,v:字段值
	 * @throws SQLException
	 */
	public List<Map<String, Object>> list()
			throws SQLException
	{
		String sql = SQL().toString();
		List<Map<String, Object>> list = DBHelper.query(sql);
		return list;
	}

	/**
	 * 分页查询
	 *
	 * @param start
	 *            开始记录数
	 * @param limit
	 *            查询条数
	 * @return 数据集合List<Map<k,v>> 其中k:字段名小写,v:字段值
	 * @throws SQLException
	 */
	public List<Map<String, Object>> list(int start, int limit) throws SQLException
	{
		StringBuffer ret = new StringBuffer("SELECT * FROM(");
		ret.append(SQL().replace("*", "ROWNUM AS RM ,T.*")).append(
				") WHERE RM BETWEEN ").append(start + 1).append(" AND ")
				.append(start + limit);
		List<Map<String, Object>> list = DBHelper.query(ret.toString());
		return list;
	}

	/**
	 * 得到总记录数
	 * 
	 * 
	 * @return 总记录数
	 */
	public int count() throws SQLException
	{
		String sql = SQL().replace("*", "COUNT(*)");
		return Integer.parseInt(DBHelper.scalar(sql).toString());
	}

	/**
	 * 添加条件
	 * 
	 * @param field 字段 如:"name"
	 * @param opVal 操作符和值 如:"like|aaa","=|001","between|20|70","order|desc"
	 * @return Query 
	 */
	public Query add(String field,String opVal)
	{
		this.condMap.put(field,opVal);
		return this;
	}

}

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    mybatis-plus QueryWrapper条件查询器

    例如,我们可以根据实体类的属性来设置各种条件,如等值、不等值、范围查询、模糊查询等。以下是一个简单的示例: ```java User user = new User(); user.setId(1); QueryWrapper&lt;User&gt; queryWrapper = new Query...

    solr6工具类

    本文将深入探讨Solr6工具类的使用方法,包括条件查询、结果高亮,并结合测试对象和测试类进行详细解析。 1. **SolrJ简介** SolrJ提供了一组接口和类,使得开发者能够轻松地创建、发送和解析Solr请求。它通过...

    hibernate的大部分的工具类

    这些工具类可能包含`PageHelper` 或 `PaginationUtil`,它们通常接受查询条件、每页记录数和当前页数作为参数,返回一个包含分页信息的对象,如总记录数、总页数以及当前页的数据列表。 最后,关于“hibernate的hql...

    超好用的hibernate查询工具类

    一个超好用的Hibernate查询工具类通常会封装一些常见的查询方法,例如根据ID获取单个对象、根据条件获取对象列表、分页查询等。这样的工具类可以大大减少代码重复,提高代码的可读性和可维护性。 以下是一些可能...

    jsp工具类应用

    本篇将详细介绍如何在JSP中应用工具类,特别是名为"functionUtils"的工具类,以及它如何帮助我们实现查询等功能。 1. 创建工具类 首先,我们需要创建一个名为`FunctionUtils.java`的Java类。这个类通常位于项目的`...

    Elasticsearch使用工具类

    在实际开发中,为了方便操作Elasticsearch,开发者通常会封装一些工具类,如"ElasticsearchUtil",以便更高效地执行常见的查询、更新、删除和创建等操作。 ### 查询数据 默认查询通常是基于索引来获取匹配的数据,...

    安卓开发框架工具类相关-androiddb工具类.zip

    这些工具类可以帮助开发者更高效地处理数据库的创建、查询、更新和删除等操作,避免手动编写繁琐的SQL语句。 首先,Android中的SQLite是默认的轻量级数据库,它允许开发者存储结构化数据。然而,直接使用...

    \Hibernate_query条件查询

    本篇将深入探讨Hibernate的条件查询,帮助开发者更好地理解和运用这一工具。 1. **HQL(Hibernate Query Language)** HQL是Hibernate提供的面向对象的查询语言,类似于SQL,但操作的对象是对象而非表。例如,要...

    mybatis-plus QueryWrapper自定义查询条件的实现

    首先,QueryWrapper是Mybatis-Plus提供的一个用于构建SQL查询条件的工具类,它可以帮助我们更加简洁地构建复杂的查询条件,避免在XML映射文件中编写大量条件判断。通常,我们可以通过如下方式创建并设置查询条件: ...

    mongoTemplate工具类Dao层方法封装.zip

    - **查询(Query)**:MongoTemplate提供了丰富的查询功能,如`findAll()`, `findById()`, `query()`, `findOne()`等,可以通过Query对象指定查询条件。 - **更新(Update)**:使用`updateFirst()`, `...

    安卓MediaQuery的查询及用法

    在Android开发中,`MediaQuery`是一个非常重要的工具类,主要用于获取和操作设备上的多媒体数据,如图片、视频等。这个类主要与Android的MediaStore服务配合使用,可以帮助开发者便捷地进行媒体资源的查询和访问。...

    Elasticsearch的JAVA操作工具类,包括增删改查的封装

    本文将详细介绍如何构建一个封装了基本增删改查功能的Elasticsearch Java工具类。 首先,我们需要引入Elasticsearch的Java客户端依赖。在Maven项目中,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org....

    Android开发中的SQLite数据库的增删改查工具类

    - `query`: 查询数据,可能包括根据特定条件查询单条或多条记录,使用`SQLiteDatabase.query()`方法。 2. **DBSOpenHelper**: 这是SQLiteOpenHelper的子类,主要用于创建和升级数据库。SQLiteOpenHelper有以下几个...

    SSH框架常用到的一些工具类整理

    `Criteria`和`Query`接口则允许我们根据各种条件进行数据查询,而`HibernateTemplate`或`SessionFactoryBean`等工具类则进一步简化了操作,减少了代码量。 在SSH开发中,DAO(数据访问对象)层是不可或缺的一部分。...

    hibernate hql where语句拼接工具类

    总的来说,“hibernate hql where语句拼接工具类”是为了简化和规范化在Hibernate中构建带有动态条件的HQL查询的过程,提高代码的可读性和可维护性。通过这样的工具类,开发者可以更方便地根据业务需求构建复杂的...

    MySQL增删改查工具类.zip

    MySQL增删改查工具类是面向Java开发者的一个实用工具,它简化了数据库操作,特别是针对MySQL数据库的插入、删除、更新和查询等基本操作。在Java编程中,直接操作数据库通常涉及大量的SQL语句编写,这既繁琐又容易...

    mybatisPlus拦截器实现sql条件驼峰转下划线

    mybatisPlus的queryWrapper查询条件我们一般都是写死带下划线(如:create_time),但是如果用@FieldNameConstants注解的files字段去当条件的话,是驼峰,sql语句报找不到列,所以期望这里会自动帮我们把驼峰转下划线...

    SQL查询条件生成器源码

    SQL查询条件生成器是一种工具,它能够帮助程序员自动化地构建SQL查询语句,尤其是在处理复杂的动态查询时。这种工具通常包含一系列方法,用于构建不同类型的WHERE子句,从而避免手动编写大量的字符串拼接代码,提高...

    power query 入门手册

    【Power Query 入门手册】是一本针对Excel报表自动化工具PowerQuery(简称PQ)的初学者指南。Power Query是Microsoft Excel中一个强大的数据预处理工具,它允许用户轻松地清洗、转换和整合数据,为数据分析工作提供...

    python操作mysql工具类之压缩包1、封装一个不用写SQL语句,只需要填参数的工具类2、封装一个需要自己写SQL语句的

    例如,你可以有一个`execute_query`方法用于执行查询操作,只需要传入表名、字段名和过滤条件等参数,工具类内部会自动构造并执行相应的SQL语句。这样做的好处在于提高了代码的可读性和可维护性,同时减少了重复代码...

Global site tag (gtag.js) - Google Analytics