`
babydeed
  • 浏览: 238028 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

SQL动态封装工具类

SQL 
阅读更多

转自 http://www.iteye.com/topic/370625

BaseSelector.java

Java代码 复制代码
  1.   
  2. import java.util.ArrayList;   
  3. import java.util.Collection;   
  4. import java.util.HashMap;   
  5. import java.util.LinkedList;   
  6. import java.util.List;   
  7. import java.util.Map;   
  8. /**  
  9.  * SQL动态封装工具  
  10.  *   
  11.  * simple::  
  12.  *   
  13.  *           BaseSelector select = new BaseSelector();  
  14.  *           select.setCommand("select * from  stat_user ");  
  15.  *           select.createCriteria().andEqualTo("org_code", "YZ1201")  
  16.  *           .andGreaterThanOrEqualTo("day_code", "2009-01-01")  
  17.  *           .andLessThanOrEqualTo("day_code", "2009-03-31");  
  18.  *           List<Map> rowset = SqlTemplate.executeQuery(select.toSql(),new Object[] {});  
  19.  *  
  20.  *           output:select * from  stat_user where org_code = 'YZ1201' and day_code >= '2009-01-01' and day_code <= '2009-03-31'   
  21.  *   
  22.  */  
  23. public class BaseSelector {   
  24.        
  25.   
  26.     /**  
  27.      * sql语句  
  28.      */  
  29.     private String command;   
  30.     /**  
  31.      * 排序字段  
  32.      */  
  33.     protected String orderByClause;   
  34.        
  35.   
  36.     /**  
  37.      * sql条件  
  38.      */  
  39.     protected List<Criteria> oredCriteria;   
  40.   
  41.   
  42.   
  43.     public String getCommand()   
  44.     {   
  45.         return command;   
  46.     }   
  47.   
  48.   
  49.     public void setCommand(String command)   
  50.     {   
  51.         this.command = command;   
  52.     }   
  53.   
  54.   
  55.     public BaseSelector() {   
  56.         oredCriteria = new ArrayList<Criteria>();   
  57.     }   
  58.   
  59.   
  60.     protected BaseSelector(BaseSelector example) {   
  61.         this.orderByClause = example.orderByClause;   
  62.         this.oredCriteria = example.oredCriteria;   
  63.     }   
  64.        
  65.     /**  
  66.      * 生成最终sql语句  
  67.      */  
  68.     public String toSql()   
  69.     {   
  70.         if(oredCriteria==null||oredCriteria.size()<=0)   
  71.             return command;   
  72.            
  73.         StringBuffer sqlAll = new StringBuffer();   
  74.         sqlAll.append(command);   
  75.         if (command != null && command.toUpperCase().indexOf(" WHERE ") == -1)   
  76.             sqlAll.append(" WHERE ");   
  77.         else  
  78.             sqlAll.append(" AND ");   
  79.         for (Criteria cri : oredCriteria)   
  80.         {   
  81.             if(!cri.isValid())   
  82.               continue;   
  83.             sqlAll.append("(");   
  84.             StringBuffer sql = new StringBuffer();   
  85.             criteriaWithoutValueSql(sql,cri.criteriaWithoutValue);   
  86.             criteriaWithSingleValueSql(sql,cri.criteriaWithSingleValue);   
  87.             criteriaWithListValueSql(sql,cri.criteriaWithListValue);   
  88.             criteriaWithBetweenValueSql(sql,cri.criteriaWithBetweenValue);   
  89.             sqlAll.append(sql.toString());   
  90.             sqlAll.append(")");   
  91.             sqlAll.append(" or ");   
  92.         }   
  93.         return sqlAll.substring(0, sqlAll.length()-4);   
  94.            
  95.     }   
  96.        
  97.     @SuppressWarnings("unchecked")   
  98.     private String criteriaWithoutValueSql(StringBuffer sql,List list)   
  99.     {   
  100.         if(list==null)   
  101.             return "";   
  102.          
  103.         int n = list.size();   
  104.         for (int i = 0;i<n;i++)   
  105.         {   
  106.             sql.append(list.get(i));   
  107.             if(i<n-1)   
  108.                 sql.append(" and ");   
  109.         }   
  110.            
  111.         return sql.toString();   
  112.     }   
  113.        
  114.     @SuppressWarnings("unchecked")   
  115.     private String criteriaWithSingleValueSql(StringBuffer sql,List list)   
  116.     {   
  117.         if(list==null)   
  118.             return "";   
  119.         if (sql.length() > 0&&list.size()>0)   
  120.             sql.append(" and ");   
  121.         int n = list.size();   
  122.         for (int i = 0;i<n;i++)   
  123.         {   
  124.             Map map = (Map) list.get(i);   
  125.             sql.append(map.get("condition")).append(map.get("value"));   
  126.             if(i<n-1)   
  127.                 sql.append(" and ");   
  128.         }   
  129.         return sql.toString();   
  130.     }   
  131.   
  132.     @SuppressWarnings("unchecked")   
  133.     private String criteriaWithListValueSql(StringBuffer sql,List list)   
  134.     {   
  135.         if(list==null)   
  136.             return "";   
  137.         if (sql.length() > 0&&list.size()>0)   
  138.             sql.append(" and ");   
  139.         int n = list.size();   
  140.         for (int i = 0;i<n;i++)   
  141.         {   
  142.             Map map = (Map) list.get(i);   
  143.             sql.append(map.get("condition")).append("("+join((Collection) map.get("values"),",")+")");   
  144.             if(i<n-1)   
  145.                 sql.append(" and ");   
  146.         }   
  147.         return sql.toString();   
  148.     }   
  149.        
  150.     @SuppressWarnings("unchecked")   
  151.     private String criteriaWithBetweenValueSql(StringBuffer sql,List list)   
  152.     {   
  153.         if(list==null)   
  154.             return "";   
  155.         if (sql.length() > 0&&list.size()>0)   
  156.             sql.append(" and ");   
  157.         int n = list.size();   
  158.         for (int i = 0;i<n;i++)   
  159.         {   
  160.             Map map = (Map) list.get(i);   
  161.             sql.append(map.get("condition")).append(join((Collection) map.get("values")," and "));   
  162.             if(i<n-1)   
  163.                 sql.append(" and ");   
  164.         }   
  165.         return sql.toString();   
  166.     }   
  167.        
  168.     @SuppressWarnings("unchecked")   
  169.     private String  join(Collection list,String spe)   
  170.     {   
  171.         if(list==null)   
  172.             return "";   
  173.         Object array[] = list.toArray();   
  174.         StringBuffer buff = new StringBuffer();   
  175.         for (int i = 0; i < array.length; i++)   
  176.         {   
  177.             buff.append(array[i]);   
  178.             if(i<array.length-1)   
  179.                 buff.append(spe);   
  180.         }   
  181.         return buff.toString();   
  182.     }   
  183.   
  184.     /**  
  185.      * 顺序排序  
  186.      * @param field  
  187.      */  
  188.     public void setOrderByClauseAsc(String field) {   
  189.         this.orderByClause = getFieldName(field) + " ASC";   
  190.     }   
  191.        
  192.     /**  
  193.      * 倒序排序  
  194.      * @param field  
  195.      */  
  196.     public void setOrderByClauseDesc(String field) {   
  197.         this.orderByClause = getFieldName(field) + " DESC";   
  198.     }   
  199.   
  200.   
  201.   
  202.     public String getOrderByClause() {   
  203.         return orderByClause;   
  204.     }   
  205.   
  206.   
  207.     public List<Criteria> getOredCriteria() {   
  208.         return oredCriteria;   
  209.     }   
  210.   
  211.     /**  
  212.      * or 条件  
  213.      */  
  214.     public void or(Criteria criteria) {   
  215.         oredCriteria.add(criteria);   
  216.     }   
  217.   
  218.     /**  
  219.      * 创建条件对象  
  220.      */  
  221.     public Criteria createCriteria() {   
  222.         Criteria criteria = createCriteriaInternal();   
  223.         if (oredCriteria.size() == 0) {   
  224.             oredCriteria.add(criteria);   
  225.         }   
  226.         return criteria;   
  227.     }   
  228.   
  229.     protected Criteria createCriteriaInternal() {   
  230.         Criteria criteria = new Criteria();   
  231.         return criteria;   
  232.     }   
  233.   
  234.     /**  
  235.      * 清除条件  
  236.      */  
  237.     public void clear() {   
  238.         oredCriteria.clear();   
  239.     }   
  240.        
  241.      static String getFieldName(String field)   
  242.     {   
  243.             
  244.         if (field == null ) {   
  245.             throw new RuntimeException( field + " cannot be null");   
  246.         }   
  247.         return field.toUpperCase();   
  248. //   
  249. //   
  250. //        Pattern pattern = Pattern.compile("[A-Z]{1}");   
  251. //        Matcher m =  pattern.matcher(field);   
  252. //        StringBuffer sbr = new StringBuffer();   
  253. //        while(m.find())   
  254. //            m.appendReplacement(sbr, "_"+m.group());   
  255. //        m.appendTail(sbr);   
  256. //        return sbr.toString().toUpperCase();   
  257.     }   
  258.   
  259.     /**  
  260.      * 查询条件  
  261.      */  
  262.     public static class Criteria {   
  263.         protected List<String> criteriaWithoutValue;   
  264.   
  265.         protected List<Map<String, Object>> criteriaWithSingleValue;   
  266.   
  267.         protected List<Map<String, Object>> criteriaWithListValue;   
  268.   
  269.         protected List<Map<String, Object>> criteriaWithBetweenValue;   
  270.   
  271.         protected Criteria() {   
  272.             super();   
  273.             criteriaWithoutValue = new ArrayList<String>();   
  274.             criteriaWithSingleValue = new ArrayList<Map<String, Object>>();   
  275.             criteriaWithListValue = new ArrayList<Map<String, Object>>();   
  276.             criteriaWithBetweenValue = new ArrayList<Map<String, Object>>();   
  277.         }   
  278.   
  279.         public boolean isValid() {   
  280.             return criteriaWithoutValue.size() > 0  
  281.                 || criteriaWithSingleValue.size() > 0  
  282.                 || criteriaWithListValue.size() > 0  
  283.                 || criteriaWithBetweenValue.size() > 0;   
  284.         }   
  285.   
  286.         public List<String> getCriteriaWithoutValue() {   
  287.             return criteriaWithoutValue;   
  288.         }   
  289.   
  290.         public List<Map<String, Object>> getCriteriaWithSingleValue() {   
  291.             return criteriaWithSingleValue;   
  292.         }   
  293.   
  294.         public List<Map<String, Object>> getCriteriaWithListValue() {   
  295.             return criteriaWithListValue;   
  296.         }   
  297.   
  298.         public List<Map<String, Object>> getCriteriaWithBetweenValue() {   
  299.             return criteriaWithBetweenValue;   
  300.         }   
  301.   
  302.         protected void addCriterion(String condition) {   
  303.             if (condition == null||"".equals(condition)) {   
  304.                 return;   
  305.             }   
  306.             criteriaWithoutValue.add(condition);   
  307.         }   
  308.   
  309.         protected void addCriterion(String condition, Object value, String property) {   
  310.             if (value == null||"".equals(value)) {   
  311.                 return;   
  312.             }   
  313.             Map<String, Object> map = new HashMap<String, Object>();   
  314.             map.put("condition", condition);   
  315.             map.put("value", value);   
  316.             criteriaWithSingleValue.add(map);   
  317.         }   
  318.   
  319.         protected void addCriterion(String condition, List<? extends Object> values, String property) {   
  320.             if (values == null || values.size() == 0) {   
  321.                 return;   
  322.             }   
  323.             Map<String, Object> map = new HashMap<String, Object>();   
  324.             map.put("condition", condition);   
  325.             map.put("values", values);   
  326.             criteriaWithListValue.add(map);   
  327.         }   
  328.   
  329.         protected void addCriterion(String condition, Object value1, Object value2, String property) {   
  330.             if (value1 == null || value2 == null) {   
  331.                 return;   
  332.             }   
  333.             List<Object> list = new ArrayList<Object>();   
  334.             list.add(value1);   
  335.             list.add(value2);   
  336.             Map<String, Object> map = new HashMap<String, Object>();   
  337.             map.put("condition", condition);   
  338.             map.put("values", list);   
  339.             criteriaWithBetweenValue.add(map);   
  340.         }   
  341.            
  342.   
  343.   
  344.         public Criteria andIsNull(String field) {   
  345.             addCriterion(getFieldName(field)+" is null");   
  346.             return this;   
  347.         }   
  348.   
  349.         public Criteria andIsNotNull(String field) {   
  350.             addCriterion(getFieldName(field)+" is not null");   
  351.             return this;   
  352.         }   
  353.   
  354.         public Criteria andEqualTo(String field,String value) {   
  355.             addCriterion(getFieldName(field)+" =", quoteStr(value), field);   
  356.             return this;   
  357.         }   
  358.   
  359.         public Criteria andNotEqualTo(String field,String value) {   
  360.             addCriterion(getFieldName(field)+" <>", quoteStr(value), field);   
  361.             return this;   
  362.         }   
  363.   
  364.         public Criteria andGreaterThan(String field,String value) {   
  365.             addCriterion(getFieldName(field)+" >", quoteStr(value), field);   
  366.             return this;   
  367.         }   
  368.   
  369.         public Criteria andGreaterThanOrEqualTo(String field,String value) {   
  370.             addCriterion(getFieldName(field)+" >=", quoteStr(value), field);   
  371.             return this;   
  372.         }   
  373.   
  374.         public Criteria andLessThan(String field,String value) {   
  375.             addCriterion(getFieldName(field)+" <", quoteStr(value), field);   
  376.             return this;   
  377.         }   
  378.   
  379.         public Criteria andLessThanOrEqualTo(String field,String value) {   
  380.             addCriterion(getFieldName(field)+" <=", quoteStr(value), field);   
  381.             return this;   
  382.         }   
  383.   
  384.         public Criteria andLike(String field,String value) {   
  385.             addCriterion(getFieldName(field)+" like", quoteStr(value), field);   
  386.             return this;   
  387.         }   
  388.   
  389.         public Criteria andNotLike(String field,String value) {   
  390.             addCriterion(getFieldName(field)+" not like", quoteStr(value), field);   
  391.             return this;   
  392.         }   
  393.   
  394.         @SuppressWarnings("unchecked")   
  395.         public Criteria andIn(String field,List<String> values) {   
  396.             List vs = new ArrayList();   
  397.             for (String string : values)   
  398.             {   
  399.                 vs.add(quoteStr(string));   
  400.             }   
  401.             addCriterion(getFieldName(field)+" in", vs, field);   
  402.   
  403.             return this;   
  404.         }   
  405.   
  406.         @SuppressWarnings("unchecked")   
  407.         public Criteria andNotIn(String field,List<String> values) {   
  408.             List vs = new ArrayList();   
  409.             for (String string : values)   
  410.             {   
  411.                 vs.add(quoteStr(string));   
  412.             }   
  413.             addCriterion(getFieldName(field)+" not in", vs, field);   
  414.             return this;   
  415.         }   
  416.   
  417.         public Criteria andBetween(String field,String value1, String value2) {   
  418.             addCriterion(getFieldName(field)+" between", quoteStr(value1), quoteStr(value2), field);   
  419.             return this;   
  420.         }   
  421.   
  422.         public Criteria andNotBetween(String field,String value1, String value2) {   
  423.             addCriterion(getFieldName(field)+" not between", quoteStr(value1), quoteStr(value2), field);   
  424.             return this;   
  425.         }   
  426.            
  427.         private String quoteStr(String str)   
  428.         {   
  429.             if(str==null)   
  430.                 return null;   
  431.             return "'"+str+"'";   
  432.         }   
  433.            
  434.     }   
  435.     @SuppressWarnings("unchecked")   
  436.     public static void main(String[] args)   
  437.     {   
  438.         List days = new LinkedList();   
  439.         days.add("2008-01-01");   
  440.         days.add("2008-01-02");   
  441.         BaseSelector cri = new BaseSelector();   
  442.         cri.setCommand("select * from table where 1=1");   
  443.         cri.createCriteria().andEqualTo("org_code""vvv")   
  444.         .andIn("day_code", days);   
  445.         cri.or( cri.createCriteria().andEqualTo("status""1"));   
  446.            
  447.            
  448.         System.out.println(cri.toSql());   
  449.     }   
分享到:
评论

相关推荐

    android sql封装工具类

    首先,"android sql封装工具类"是为了简化Android应用中对SQLite数据库的操作而设计的。通常,开发者需要编写大量的SQL语句和相关的CRUD(Create, Read, Update, Delete)操作,这不仅繁琐且容易出错。通过封装,...

    java连接SqlServer完整代码,工具类,jdbc

    java连接SqlServer完整代码,工具类,jdbc JDBC工具类的构建 1.资源释放 见https://mp.csdn.net/postedit/86577443 2.驱动防二次注册 ``` Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); //...

    Android 封装的工具类

    在Android开发中,工具类(Utils Class)是程序员经常创建的一种辅助代码结构,用来封装一些通用功能,提高代码的复用性和可维护性。这里提到的"Android 封装的工具类"涵盖了几种关键的模块,包括网络请求、数据库...

    SpringJdbcTemplate封装工具类

    这个封装工具类的出现是为了提供一种更简洁、易于使用的接口来执行SQL操作,减轻开发者处理数据库连接、事务管理以及异常处理的负担。下面我们将深入探讨SpringJdbcTemplate的相关知识点。 1. **SpringJdbcTemplate...

    C# SQL封装类类

    总之,`C# SQL封装类类`如`SqlHelper`是软件开发中的重要工具,它简化了数据库操作,提高了代码质量,并提供了安全的SQL执行机制。通过理解和熟练使用这样的类,开发者能够更高效、安全地进行数据库编程。

    用C#实现的SqlServer封装类

    总的来说,"用C#实现的SqlServer封装类"是一个实用的工具,它简化了数据库操作,使开发者能更专注于核心业务逻辑,而不是数据库访问的细节。这种封装方式在实际项目中广泛应用,对于提升代码质量和开发效率具有积极...

    C#WPF sqlserver 数据库 封装类

    综上所述,这个压缩包提供的"C# WPF sqlserver 数据库 封装类"是一个实用的工具,它简化了C# WPF应用与SQL Server数据库之间的交互,通过提供易于使用的API降低了开发难度。同时,附带的测试数据库有助于开发者验证...

    c# SQL封装类 用于NET2.0

    总的来说,这个"C# SQL封装类"是为.NET 2.0环境优化的一个实用工具,旨在简化SQL Server的数据库操作,提高开发效率,并确保在较旧的.NET框架版本中也能正常运行。对于那些需要维护.NET 2.0项目或者希望避免直接与...

    ios-SQLite封装工具类.zip

    "ios-SQLite封装工具类.zip"是一个压缩包,包含了针对SQLite数据库进行操作的自定义工具类,可以帮助开发者更方便地进行数据存取。在这个压缩包中,"02 封装工具类"很可能是实现这些功能的源代码文件。以下是关于iOS...

    SQL语句封装

    - **Python中的SQLAlchemy**:一个强大的SQL工具包,支持SQL语句的动态执行和编译,并允许用户定义SQL表达式为Python类的方法。 ```python from sqlalchemy import create_engine, MetaData, Table, select engine ...

    java各种常用的工具类封装 源码

    以下将详细讲解标题和描述中提到的几个关键工具类及其封装方法: 1. **DateUtil**: Java中的日期时间处理在早期版本中较为复杂,`DateUtil` 类通常是为了封装`java.util.Date`、`Calendar` 和 `java.time` 包中的类...

    封装的SQL数据库访问类

    ### 封装的SQL数据库访问类 在现代软件开发中,特别是Web应用开发领域,对数据库的操作是非常核心的一部分。为了简化这些操作并提高代码的可维护性和可读性,开发者通常会采用各种技术来实现数据库访问层(Data ...

    数据库 sql与MFC的连接封装类 ADO

    总的来说,"数据库 sql与MFC的连接封装 类 ADO"项目为开发者提供了一个强大的工具,它结合了MFC的便利性和ADO的数据库访问能力,使得在C++环境中操作SQL数据库变得更加简单和高效。通过深入理解和使用这个封装类,...

    java JDBC 连接sql server封装

    在本主题中,我们将深入探讨如何使用Java JDBC来封装对SQL Server数据库的连接,从而创建一个实用工具类(Util类),提高代码的复用性和可维护性。 首先,确保你的项目已经引入了适用于SQL Server的JDBC驱动,如...

    常用jar包括封装的工具类

    本压缩包提供的是一系列常用且实用的jar文件,涵盖了SpringMVC、MyBatis框架的核心组件,以及一些辅助开发的工具类和解析功能。以下是这些jar文件包含的主要知识点: 1. **SpringMVC**: SpringMVC是Spring框架的一...

    hibernate将本地SQL查询结果封装成对象

    在Java的持久化框架中,Hibernate是一个非常重要的工具,它提供了强大的对象关系映射(ORM)功能,使得开发者可以方便地在Java对象和数据库表之间进行数据操作。当我们需要执行一些特殊的、复杂的或者非标准的SQL...

    ORMLite框架二次封装工具类

    总的来说,"ORMLite框架二次封装工具类"是一个高效的解决方案,它降低了Android应用中数据库操作的复杂度,提高了代码的可读性和可维护性。通过学习和使用这样的工具类,开发者可以更加专注于业务逻辑,而不是基础的...

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

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

    小而强悍的C++ ADO封装类

    C++ ADO(ActiveX Data Objects)封装类是一种高效、轻量级的工具,它允许开发者通过C++语言便捷地访问和操作数据库。ADO是Microsoft提供的数据访问接口,它允许应用程序与各种数据库进行交互,包括SQL Server、...

    CIUD封装工具类

    CIUD(Create, Update, Delete)封装工具类是软件开发中的一个常见设计模式,主要用于数据库操作,特别是关系型数据库管理系统的CRUD操作。这个类通常包含了一系列方法,用于创建(Create)、更新(Update)、删除...

Global site tag (gtag.js) - Google Analytics