利用DynaBean,根据不同业务动态组装parameterClass,传递给iBATIS使用。
请问该怎么做<insert id="insertSYS_LOGIN_RECORD"
parameterClass="record">
<![CDATA[
insert into SYS_LOGIN_RECORD(SESSION_ID
,ACCOUNT_CODE
,OPERATOR_NAME
,IP_ADDRESS
,ONLINE_FLAG
,LOGIN_DATE
,REMARK
)
values(#SESSION_ID:VARCHAR#
,#ACCOUNT_CODE:VARCHAR#
,#OPERATOR_NAME:VARCHAR#
,#IP_ADDRESS:VARCHAR#
,#ONLINE_FLAG:VARCHAR#
,#LOGIN_DATE:DATE#
,#REMARK:VARCHAR#
)
]]>
</insert>
public class Record
extends org.apache.commons.beanutils.BasicDynaBean { public Record(DynaClass dynaClass) {
super(dynaClass);
} //数据修改标志
protected int modiFlag = ResTable.NO_MODIFIED; /**
* 根据属性所在位置索引,得到简单属性值
* @param index 属性所在位置索引
* @return 属性值
*/
public Object get(int index) {
return get(getDynaClass().getDynaProperties()[index].getName());
} /**
* 根据属性所在位置索引,设置属性值
* @param index 属性所在位置索引
* @param value 要设置的属性值
*/
public void set(int index, Object value) {
set(getDynaClass().getDynaProperties()[index].getName(), value);
}
/**
* 得到记录的修改标志
* @return 修改标志,见ResTable:NO_MODIFIED,UPDATE,INSERT,DELETE
*/
public int getModiFlag() {
return modiFlag;
}
/**
* 设置记录的修改标志
* @param modiFlag 修改标志,见ResTable:NO_MODIFIED,UPDATE,INSERT,DELETE
*/
public void setModiFlag(int modiFlag) {
this.modiFlag = modiFlag;
}
/****************************得到属性值相关函数*******************/
/**
* 得到字符串属性值
* @param name 属性名
* @return 属性的字符串值,如果属性值为空,返回空
* @throws CommonException 如果指定的属性名的类型不能转换为字符串或转换过程出错
*/
public String getString(String name) throws CommonException {
String value = null;
try {
Class type = getDynaClass().getDynaProperty(name).getType();
Object tempObject = get(name);
//如果数据为空,返回空
if (tempObject == null) {
return value;
}
if (type.equals(ResTable.STRING_CLASS)) {
value = (String) tempObject;
}
else if (type.equals(ResTable.BIGDECIMAL_CLASS)) {
value = ( (BigDecimal) tempObject).toString();
}
else if (type.equals(ResTable.INTEGER_CLASS)) {
value = ( (Integer) tempObject).toString();
}
else if (type.equals(ResTable.TIMESTAMP_CLASS)) {
value = ( (Timestamp) tempObject).toString();
}
else {
throw new CommonException("指定的属性'" + name + "'值不能转换为字符串!");
}
}
catch (Exception e) {
throw new CommonException(e.toString());
}
return value;
}}下面是调用
ArrayList columnList = new ArrayList(); Column checkedColumn = new Column("checked", String.class,
"checked", "", "", "选中标志", new ColumnExtendProperty(),
false, false, 0);
Column sessionIDColumn = new Column("SESSION_ID", String.class, "SESSION_ID",
"", "", "SESSION_ID", new ColumnExtendProperty(), false, false, 0);
Column accountCodeColumn = new Column("ACCOUNT_CODE", String.class, "ACCOUNT_CODE",
"", "", "ACCOUNT_CODE", new ColumnExtendProperty(), false, false, 0);
Column operatorNameColumn = new Column("OPERATOR_NAME", String.class, "OPERATOR_NAME",
"", "", "OPERATOR_NAME", new ColumnExtendProperty(), false, false, 0);
Column ipAddressColumn = new Column("IP_ADDRESS", String.class, "IP_ADDRESS",
"", "", "IP_ADDRESS", new ColumnExtendProperty(), false, false, 0);
Column loginDateColumn = new Column("LOGIN_DATE", Date.class,
"oriIndex", "", "", "原始记录位置", new ColumnExtendProperty(),
false, false, 0);
Column onlineFlagColumn = new Column("ONLINE_FLAG", String.class, "ONLINE_FLAG",
"", "", "ONLINE_FLAG", new ColumnExtendProperty(), false, false, 0);
Column reMarkColumn = new Column("REMARK", String.class, "REMARK",
"", "", "REMARK", new ColumnExtendProperty(), false, false, 0);
columnList.add(checkedColumn);
columnList.add(sessionIDColumn);
columnList.add(accountCodeColumn);
columnList.add(operatorNameColumn);
columnList.add(ipAddressColumn);
columnList.add(loginDateColumn);
columnList.add(onlineFlagColumn);
columnList.add(reMarkColumn); Column[] columnArray = (Column[]) columnList
.toArray(new Column[columnList.size()]); Record record = new Record(new BasicDynaClass("result", null,
columnArray));
record.set("SESSION_ID", sessionId);
record.set("ACCOUNT_CODE", userView.getACCOUNT_CODE());
record.set("OPERATOR_NAME", userView.getOPERATOR_NAME());
record.set("IP_ADDRESS", userView.getIP_ADDRESS());
record.set("LOGIN_DATE", userView.getTimeCreated());
record.set("ONLINE_FLAG", "Y");
record.set("REMARK", "Server IP = " + java.net.InetAddress.getLocalHost().getHostAddress()); iBoSysLoginRecord.insertSYS_LOGIN_RECORD(record);
执行说没有 SESSION_ID
请问该怎么做<insert id="insertSYS_LOGIN_RECORD"
parameterClass="record">
<![CDATA[
insert into SYS_LOGIN_RECORD(SESSION_ID
,ACCOUNT_CODE
,OPERATOR_NAME
,IP_ADDRESS
,ONLINE_FLAG
,LOGIN_DATE
,REMARK
)
values(#SESSION_ID:VARCHAR#
,#ACCOUNT_CODE:VARCHAR#
,#OPERATOR_NAME:VARCHAR#
,#IP_ADDRESS:VARCHAR#
,#ONLINE_FLAG:VARCHAR#
,#LOGIN_DATE:DATE#
,#REMARK:VARCHAR#
)
]]>
</insert>
public class Record
extends org.apache.commons.beanutils.BasicDynaBean { public Record(DynaClass dynaClass) {
super(dynaClass);
} //数据修改标志
protected int modiFlag = ResTable.NO_MODIFIED; /**
* 根据属性所在位置索引,得到简单属性值
* @param index 属性所在位置索引
* @return 属性值
*/
public Object get(int index) {
return get(getDynaClass().getDynaProperties()[index].getName());
} /**
* 根据属性所在位置索引,设置属性值
* @param index 属性所在位置索引
* @param value 要设置的属性值
*/
public void set(int index, Object value) {
set(getDynaClass().getDynaProperties()[index].getName(), value);
}
/**
* 得到记录的修改标志
* @return 修改标志,见ResTable:NO_MODIFIED,UPDATE,INSERT,DELETE
*/
public int getModiFlag() {
return modiFlag;
}
/**
* 设置记录的修改标志
* @param modiFlag 修改标志,见ResTable:NO_MODIFIED,UPDATE,INSERT,DELETE
*/
public void setModiFlag(int modiFlag) {
this.modiFlag = modiFlag;
}
/****************************得到属性值相关函数*******************/
/**
* 得到字符串属性值
* @param name 属性名
* @return 属性的字符串值,如果属性值为空,返回空
* @throws CommonException 如果指定的属性名的类型不能转换为字符串或转换过程出错
*/
public String getString(String name) throws CommonException {
String value = null;
try {
Class type = getDynaClass().getDynaProperty(name).getType();
Object tempObject = get(name);
//如果数据为空,返回空
if (tempObject == null) {
return value;
}
if (type.equals(ResTable.STRING_CLASS)) {
value = (String) tempObject;
}
else if (type.equals(ResTable.BIGDECIMAL_CLASS)) {
value = ( (BigDecimal) tempObject).toString();
}
else if (type.equals(ResTable.INTEGER_CLASS)) {
value = ( (Integer) tempObject).toString();
}
else if (type.equals(ResTable.TIMESTAMP_CLASS)) {
value = ( (Timestamp) tempObject).toString();
}
else {
throw new CommonException("指定的属性'" + name + "'值不能转换为字符串!");
}
}
catch (Exception e) {
throw new CommonException(e.toString());
}
return value;
}}下面是调用
ArrayList columnList = new ArrayList(); Column checkedColumn = new Column("checked", String.class,
"checked", "", "", "选中标志", new ColumnExtendProperty(),
false, false, 0);
Column sessionIDColumn = new Column("SESSION_ID", String.class, "SESSION_ID",
"", "", "SESSION_ID", new ColumnExtendProperty(), false, false, 0);
Column accountCodeColumn = new Column("ACCOUNT_CODE", String.class, "ACCOUNT_CODE",
"", "", "ACCOUNT_CODE", new ColumnExtendProperty(), false, false, 0);
Column operatorNameColumn = new Column("OPERATOR_NAME", String.class, "OPERATOR_NAME",
"", "", "OPERATOR_NAME", new ColumnExtendProperty(), false, false, 0);
Column ipAddressColumn = new Column("IP_ADDRESS", String.class, "IP_ADDRESS",
"", "", "IP_ADDRESS", new ColumnExtendProperty(), false, false, 0);
Column loginDateColumn = new Column("LOGIN_DATE", Date.class,
"oriIndex", "", "", "原始记录位置", new ColumnExtendProperty(),
false, false, 0);
Column onlineFlagColumn = new Column("ONLINE_FLAG", String.class, "ONLINE_FLAG",
"", "", "ONLINE_FLAG", new ColumnExtendProperty(), false, false, 0);
Column reMarkColumn = new Column("REMARK", String.class, "REMARK",
"", "", "REMARK", new ColumnExtendProperty(), false, false, 0);
columnList.add(checkedColumn);
columnList.add(sessionIDColumn);
columnList.add(accountCodeColumn);
columnList.add(operatorNameColumn);
columnList.add(ipAddressColumn);
columnList.add(loginDateColumn);
columnList.add(onlineFlagColumn);
columnList.add(reMarkColumn); Column[] columnArray = (Column[]) columnList
.toArray(new Column[columnList.size()]); Record record = new Record(new BasicDynaClass("result", null,
columnArray));
record.set("SESSION_ID", sessionId);
record.set("ACCOUNT_CODE", userView.getACCOUNT_CODE());
record.set("OPERATOR_NAME", userView.getOPERATOR_NAME());
record.set("IP_ADDRESS", userView.getIP_ADDRESS());
record.set("LOGIN_DATE", userView.getTimeCreated());
record.set("ONLINE_FLAG", "Y");
record.set("REMARK", "Server IP = " + java.net.InetAddress.getLocalHost().getHostAddress()); iBoSysLoginRecord.insertSYS_LOGIN_RECORD(record);
执行说没有 SESSION_ID
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货