⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 logsqldef.java

📁 具备多表组合查询组件功能。通过将表字段与表间关系映射到对象关系及属性
💻 JAVA
字号:
package cn.edu.buaa.ieguam.logmanage;

import java.lang.StringBuffer;
import java.util.Iterator;
import java.util.List;

import cn.edu.buaa.ieguam.logmanage.MBean;
import cn.edu.buaa.ieguam.logmanage.ResultFormat;

/**
 * 定义并实现日志查询语句生成规则
 * @author tongxiaodong
 * Creation time:Apr 23, 2007 9:32:23 PM
 */

public class LogSqlDef implements ReadTreeMBean {

	private StringBuffer selectStr = new StringBuffer();
	private StringBuffer fromStr = new StringBuffer();
	private StringBuffer whereStr = new StringBuffer();
	private ResultFormat resultFormat = null;	
	private int viewColKey = 0;//标注显示字段的序号
	
	/**
	 * Getting and setting methods
	 * @return
	 */
	public StringBuffer getSelectStr()
	{
		return this.selectStr;
	}
	public void setSelectStr(StringBuffer selectStr)
	{
		this.selectStr = selectStr;
	}
	
	public StringBuffer getFromStr()
	{
		return this.fromStr;
	}
	public void setFromStr(StringBuffer fromStr)
	{
		this.fromStr = fromStr;
	}
	
	public StringBuffer getWhereStr()
	{
		return this.whereStr;
	}
	public void setWhereStr(StringBuffer whereStr)
	{
		this.whereStr = whereStr;
	}
		
	public ResultFormat getResultFormat()
	{
		return this.resultFormat;
	}
	public void setResultFormat(ResultFormat rf)
	{
		this.resultFormat = rf;
	}

	public int getViewColKey()
	{
		return this.viewColKey;
	}
	public void setViewColKey(int viewColKey)
	{
		this.viewColKey = viewColKey;
	}
	
	/**
	 * 读取MBean节点
	 */
	public void readMBean(Object fatherMBean, Object childMBean,
			String side) 
	{
		// TODO Auto-generated method stub
		MBean father = (MBean)fatherMBean;
		MBean child = (MBean)childMBean;
				
		this.combineSelect(child);
		this.combineFrom(child);
		this.combineWhere(father,child,side);
	}
	
	
	
	/**
	 * 构造SQL查询语句中的select部分
	 * @param father
	 * @param child
	 * @param side
	 */
	public void combineSelect(MBean mBean)
	{
		if(mBean.getDegree().equals("sleep") == true)//当mBean是“sleep“状态时
		{
			return;
		}
		if(mBean.getColViewList() == null)
		{
			return;
		}
		
		/********************************/
		//System.out.println("pojoName :"+mBean.getPojoName());
		/**********************************/
		
		List colViewList = mBean.getColViewList();
		Iterator viewIter = colViewList.iterator(); 
		MBean.SubBean subBean = null;
		String pojoCol = null;
		String tableCol = null;	
		ResultFormat.ColBean colBean = null;			
		while(viewIter.hasNext())
		{
			subBean = (MBean.SubBean)viewIter.next();	
			tableCol = subBean.getTableCol();
			
			this.getSelectStr().append(tableCol+",");	
			/********************************/
			//System.out.println("pojoCol :"+tableCol);
			/**********************************/
			if(this.getResultFormat() != null)//获取ResultFormat对象元素
			{		
				colBean = this.resultFormat.new ColBean();
				pojoCol = subBean.getPojoCol();
				
				colBean.setPojoName(mBean.getPojoName());
				colBean.setPojoCol(pojoCol);
				colBean.setTableCol(tableCol);			
				this.viewColKey++;
				colBean.setKey(this.viewColKey);
				this.resultFormat.addOneCol(colBean);
			}			
		}
	}
	
	/**
	 * 构造SQL查询语句中的from部分
	 * @param father
	 * @param child
	 * @param side
	 */
	public void combineFrom(MBean mBean)
	{
		if(mBean.getDegree().equals("sleep") == true)//当mBean是“sleep“状态时
		{
			return;
		}
		this.getFromStr().append(mBean.getTableName()+",");
		
	}
	
	/**
	 * 构造SQL查询语句中的where部分
	 * @param father
	 * @param child
	 * @param side
	 */
	public void combineWhere(MBean father,MBean child,String side)
	{
		if(child.getDegree().equals("sleep") == true)//当child是“sleep“状态时
		{
			return;
		}
		
		String pojoColFir = null;
		String tableColFir = null;
		Iterator keyIter = null;
		Iterator beanIter = null;
		List subBeanList = null;
		MBean.SubBean subBeanFir = null;
		MBean.SubBean subBeanSec = null;
		
		//通过TcrmMap生成查询条件
		if(child.getTcrmMap() != null)
		{
			keyIter = child.getTcrmMap().keySet().iterator(); 
		    while(keyIter.hasNext())
		    {
		    	
			    pojoColFir = (String) keyIter.next();
			    subBeanFir = (MBean.SubBean) child.getOneOrm(pojoColFir);
			    tableColFir = subBeanFir.getTableCol();
			
			    subBeanList = (List)child.getTcrmMap().get(pojoColFir);
			    beanIter = subBeanList.iterator();
			    while(beanIter.hasNext())
			    {
				
				    subBeanSec = (MBean.SubBean) beanIter.next();	
				    if(subBeanSec.getPojoCol()!=null && subBeanSec.getTableCol()!=null)
				    {
					    this.getWhereStr().append(tableColFir + "=" + subBeanSec.getTableCol() + " And ");//类似于“A.id=B.id And”的格式
					    continue;
				    }
				
				    //this.getWhereStr().append(tableColFir+subBeanSec.getOperChar()+this.identifyDataType(subBeanSec.getValue())+" And ");
				    this.getWhereStr().append(tableColFir+subBeanSec.getOperChar()+this.identifyDataType(subBeanSec.getValue())+" And ");
										
			    }
		    }
		}
		
		//通过FkmMap(表字段外键映射关系图)生成查询条件
		if(child.getFkmMap() != null)
		{	
		    keyIter = child.getFkmMap().keySet().iterator(); 
		    while(keyIter.hasNext())
		    {
			    pojoColFir = (String) keyIter.next();
			    subBeanFir = (MBean.SubBean) child.getOneOrm(pojoColFir);
			    tableColFir = subBeanFir.getTableCol();
			    subBeanSec = (MBean.SubBean) child.getOneFkm(pojoColFir);
			    
			    /**判断此外键所指的subBean对应的MBean是否有效,
			      * 当外键所指MBean为child的左子节点时,(when fk subBean is child's left child),验证该MBean是否有效
			      * 当child为外键所指MBean的右子节点时,(when child is fk subBean's right child),验证该MBean是否有效
			     */
			   
			    //拼接sql语句
			    if(subBeanSec.getPojoCol()!=null && subBeanSec.getTableCol()!=null)
			    {
				    this.getWhereStr().append(tableColFir + "=" + subBeanSec.getTableCol() + " And ");//类似于“A.id=B.id And”的格式
			    }
		    }
		}
		
	}
	
	/**
	 * 去掉strBufArg尾部与tail匹配的部分,用于去除Select、From字符串末尾的“,”,Where字符串末尾的“And”
	 * @param strBufArg
	 * @param tail
	 * @return
	 */
	public StringBuffer deleTail(StringBuffer strBufArg,String tail)
	{
		int iNum = 0;
		int kNum = 0;
		int flag = 0;
		
		for(iNum=strBufArg.length()-1;iNum>=tail.length()-1;iNum--)
		{
			flag = iNum;
			for(kNum=tail.length()-1;kNum>=0;kNum--)
			{
				if(strBufArg.charAt(flag) != tail.charAt(kNum))
				{
					break;
				}
				flag--;		
			}
			if(kNum<0)//若找到与tail匹配的字串
			{
				break;
			}
		}
		if(iNum>=tail.length()-1)//若找到与tail匹配的字串
		{
			strBufArg.delete(iNum-tail.length()+1,strBufArg.length());
		}
		
		return strBufArg;
	}
	

	/**
	 * 构造查询操作的SQL语句
	 * @return
	 */
	public String makeQuerySql()
	{
		String querySql = null;
		StringBuffer select = new StringBuffer();
		StringBuffer from = new StringBuffer();
		StringBuffer where = new StringBuffer();
		
		select.append("Select ");
		select.append(this.selectStr);
		select = this.deleTail(select,",");
		
		from.append("  From ");
		from.append(this.fromStr);
		from = this.deleTail(from,",");
		
		where.append("  Where ");
		where.append(this.whereStr);
		where = this.deleTail(where,"And");
		//where.append(";");
		
		querySql = select.toString()+from.toString()+where.toString();
		
		return querySql;
	}
	
/**
 * 识别属性值的数据类型,返回相应的Sql语句片断
 * 该方法需由其子类,需依据具体的数据库,采用不同方式实现
 * @param data
 * @return
 */
    public String identifyDataType(Object data)
	{
		String sql = "";
		
		if (data == null)
		{
			return "null";
			
		}
		if (data instanceof String)
		{
			return "'"+data+"'";
		}
		
		else
		{
			return data.toString();
		}
	}
	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -