📄 logsqldef.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 + -