qq大王卡如何绑定qq怎么取消绑定!

&&原精spring MVC+Apache shiro1.2.3+Mybaits3.x开发java开源权限管理框架-蓝缘系统3.0版本蓝缘系统3.0版本正式开源了..git地址:http://git.oschina.net/lanyuan/lanyuan-notebook在线官网: &蓝缘博客:http://blog.csdn.net/mmm333zzz蓝缘系统第三版本即将开源;基于springMVC+Apache shiro 1.2.3+Mybaits3.x的权限系统,,开放源码,支持开源1.0版和2.0版的源码已经开源1.0版本:http://blog.csdn.net/mmm333zzz/article/details/    2.0版本:http://blog.csdn.net/mmm333zzz/article/details/关于3.0新版本的说明:一大亮点:采用最新的技术流行框架:springMVC4.1.4+shiro1.2.3+spring4.x+Mybaits3.2.8+Ajax+html5spring4.x的新特性请看:/blog/1989381说明:这个版本主要是对原有的蓝缘系统更换UI界面,功能上基本一致, 但此还在开发当中..... 关于以前版本,不再维护,致力于新版本的开发和维护..优化:封装好baseSerive,baseSeriveImpl,baseMapper..服务层,持久层统一调用,大大减少代码开发时间.spring4.x的强类型注解,泛型限定式依赖注入用mapper来代替dao,由mybaits自动管理各事务的操作,大大减少代码开发时间.3.0版本不再使用spring Security3权限安全机制,采用了shiro权限机制, 为何愿意使用Apache Shiro?请看:q.com/cn/articles/apache-shiro技术要点:1:此版本采用ajax+js分页,表格lyGrid分页插件是群主自己写的,有点模仿ligerui的分页实现&2:兼容IE,firefox,google,360的浏览器,其他暂没有测试.3:表格排序功能4:弹窗采用贤心的插件,网址:/jquery/layer/5:加入druid技术,对sql语句的监控.6:自定义注解导出excel7:使用了ehcache缓存机制8:新增支持oracle分页实现9:新增支持SQLserver2008分页实现10:解决分页参数没法传到后台的问题11:异常统一处理12:使用spring Security3权限安全机制,采用了shiro权限机制13:封装好baseMapper持久层统一调用,对于基本的增,删,改,查不需要写任何的Sql语句。直接调用14:监控告告警邮件通知&&&&&&QQ群交流:(已满), &(加群时先顶一下和评论一下再加!加群不说明,一律拒绝..thank you!)新版系统在线预览:&已舍弃的域名,请点击以下域名蓝缘官网域名将正式改为&   这二个版本不再维护。致力于3.0新版开发&&谢谢各位支持--------------------------------------------------&&&&&由编辑于 22:40:261个牛币请下载代码后再发表评论//lanyuan-notebook/lanyuan-notebook/.classpath/lanyuan-notebook/.project/lanyuan-notebook/.settings/lanyuan-notebook/.settings/.jsdtscope/lanyuan-notebook/.settings/org.eclipse.core.resources.prefs/lanyuan-notebook/.settings/org.eclipse.jdt.core.prefs/lanyuan-notebook/.settings/org.eclipse.m2e.core.prefs/lanyuan-notebook/.settings/org.ponent/lanyuan-notebook/.settings/org.mon.project.facet.core.xml/lanyuan-notebook/.settings/org.eclipse.wst.jsdt.ui.superType.container/lanyuan-notebook/.settings/org.eclipse.wst.jsdt.ui.superType.name精精精精原精精原原原精精最热搜索分享话题编程语言基础Web开发数据库开发客户端开发脚本工具游戏开发服务器软硬件开源组件类库相关分享精原精原原精精精最近下载暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级最近浏览暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级暂无贡献等级扫描二维码关注最代码为好友"/>扫描二维码关注最代码为好友/ lanyuanAdmin3
项目语言:JAVA
权限:read-only(如需更高权限请先加入项目)
lanyuanAdmin3/
Index: SqlSource.java
===================================================================
--- SqlSource.java (revision 0)
+++ SqlSource.java (revision 3)
@@ -0,0 +1,28 @@
the original author or authors.
Licensed under the Apache License, Version 2.0 (the &License&);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an &AS IS& BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+package org.apache.ibatis.
+ * Represents the content of a mapped statement read from an XML file or an annotation.
+ * It creates the SQL that will be passed to the database out of the input parameter received from the user.
+ * @author Clinton Begin
+public interface SqlSource {
BoundSql getBoundSql(Object parameterObject);
Index: package-info.java
===================================================================
--- package-info.java (revision 0)
+++ package-info.java (revision 3)
@@ -0,0 +1,20 @@
the original author or authors.
Licensed under the Apache License, Version 2.0 (the &License&);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an &AS IS& BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+ * TODO fillme.
+package org.apache.ibatis.
Index: ParameterMode.java
===================================================================
--- ParameterMode.java (revision 0)
+++ ParameterMode.java (revision 3)
@@ -0,0 +1,23 @@
the original author or authors.
Licensed under the Apache License, Version 2.0 (the &License&);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an &AS IS& BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+package org.apache.ibatis.
+ * @author Clinton Begin
+public enum ParameterMode {
IN, OUT, INOUT
Index: BoundSql.java
===================================================================
--- BoundSql.java (revision 0)
+++ BoundSql.java (revision 3)
@@ -0,0 +1,75 @@
the original author or authors.
Licensed under the Apache License, Version 2.0 (the &License&);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an &AS IS& BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+package org.apache.ibatis.
+import java.util.HashM
+import java.util.L
+import java.util.M
+import org.apache.ibatis.reflection.MetaO
+import org.apache.ibatis.session.C
+ * An actual SQL String got form an {@link SqlSource} after having processed any dynamic content.
+ * The SQL may have SQL placeholders &?& and an list (ordered) of an parameter mappings
+ * with the additional information for each parameter (at least the property name of the input object to read
+ * the value from).
+ * Can also have additional parameters that are created by the dynamic language (for loops, bind...).
+ * @author Clinton Begin
+public class BoundSql {
private List&ParameterMapping& parameterM
private Object parameterO
private Map&String, Object& additionalP
private MetaObject metaP
public BoundSql(Configuration configuration, String sql, List&ParameterMapping& parameterMappings, Object parameterObject) {
this.sql =
this.parameterMappings = parameterM
this.parameterObject = parameterO
this.additionalParameters = new HashMap&String, Object&();
this.metaParameters = configuration.newMetaObject(additionalParameters);
public String getSql() {
public List&ParameterMapping& getParameterMappings() {
return parameterM
public Object getParameterObject() {
return parameterO
public boolean hasAdditionalParameter(String name) {
return metaParameters.hasGetter(name);
public void setAdditionalParameter(String name, Object value) {
metaParameters.setValue(name, value);
public Object getAdditionalParameter(String name) {
return metaParameters.getValue(name);
Index: ResultMapping.java
===================================================================
--- ResultMapping.java (revision 0)
+++ ResultMapping.java (revision 3)
@@ -0,0 +1,283 @@
the original author or authors.
Licensed under the Apache License, Version 2.0 (the &License&);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an &AS IS& BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+package org.apache.ibatis.
+import java.util.ArrayL
+import java.util.C
+import java.util.L
+import java.util.S
+import org.apache.ibatis.session.C
+import org.apache.ibatis.type.JdbcT
+import org.apache.ibatis.type.TypeH
+import org.apache.ibatis.type.TypeHandlerR
+ * @author Clinton Begin
+public class ResultMapping {
private Configu
private Class&?& javaT
private JdbcType jdbcT
private TypeHandler&?& typeH
private String nestedResultMapId;
private String nestedQueryId;
private Set&String& notNullC
private String columnP
private List&ResultFlag&
private List&ResultMapping&
private String resultS
private String foreignC
private ResultMapping() {
public static class Builder {
private ResultMapping resultMapping = new ResultMapping();
public Builder(Configuration configuration, String property, String column, TypeHandler&?& typeHandler) {
this(configuration, property);
resultMapping.column =
resultMapping.typeHandler = typeH
public Builder(Configuration configuration, String property, String column, Class&?& javaType) {
this(configuration, property);
resultMapping.column =
resultMapping.javaType = javaT
public Builder(Configuration configuration, String property) {
resultMapping.configuration =
resultMapping.property =
resultMapping.flags = new ArrayList&ResultFlag&();
posites = new ArrayList&ResultMapping&();
resultMapping.lazy = configuration.isLazyLoadingEnabled();
public Builder javaType(Class&?& javaType) {
resultMapping.javaType = javaT
public Builder jdbcType(JdbcType jdbcType) {
resultMapping.jdbcType = jdbcT
public Builder nestedResultMapId(String nestedResultMapId) {
resultMapping.nestedResultMapId = nestedResultMapId;
public Builder nestedQueryId(String nestedQueryId) {
resultMapping.nestedQueryId = nestedQueryId;
public Builder resultSet(String resultSet) {
resultMapping.resultSet = resultS
public Builder foreignColumn(String foreignColumn) {
resultMapping.foreignColumn = foreignC
public Builder notNullColumns(Set&String& notNullColumns) {
resultMapping.notNullColumns = notNullC
public Builder columnPrefix(String columnPrefix) {
resultMapping.columnPrefix = columnP
public Builder flags(List&ResultFlag& flags) {
resultMapping.flags =
public Builder typeHandler(TypeHandler&?& typeHandler) {
resultMapping.typeHandler = typeH
public Builder composites(List&ResultMapping& composites) {
public Builder lazy(boolean lazy) {
resultMapping.lazy =
public ResultMapping build() {
// lock down collections
resultMapping.flags = Collections.unmodifiableList(resultMapping.flags);
posites = Collections.posites);
resolveTypeHandler();
validate();
return resultM
private void validate() {
// Issue #697: cannot define both nestedQueryId and nestedResultMapId
if (resultMapping.nestedQueryId != null && resultMapping.nestedResultMapId != null) {
throw new IllegalStateException(&Cannot define both nestedQueryId and nestedResultMapId in property & + resultMapping.property);
// Issue #5: there should be no mappings without typehandler
if (resultMapping.nestedQueryId == null && resultMapping.nestedResultMapId == null && resultMapping.typeHandler == null) {
throw new IllegalStateException(&No typehandler found for property & + resultMapping.property);
// Issue #4 and GH #39: column is optional only in nested resultmaps but not in the rest
if (resultMapping.nestedResultMapId == null && resultMapping.column == null && posites.size() == 0) {
throw new IllegalStateException(&Mapping is missing column attribute for property & + resultMapping.property);
if (resultMapping.getResultSet() != null) {
int numColums = 0;
if (resultMapping.column != null) {
numColums = resultMapping.column.split(&,&).
int numForeignColumns = 0;
if (resultMapping.foreignColumn != null) {
numForeignColumns = resultMapping.foreignColumn.split(&,&).
if (numColums != numForeignColumns) {
throw new IllegalStateException(&There should be the same number of columns and foreignColumns in property & + resultMapping.property);
private void resolveTypeHandler() {
if (resultMapping.typeHandler == null && resultMapping.javaType != null) {
Configuration configuration = resultMapping.
TypeHandlerRegistry typeHandlerRegistry = configuration.getTypeHandlerRegistry();
resultMapping.typeHandler = typeHandlerRegistry.getTypeHandler(resultMapping.javaType, resultMapping.jdbcType);
public Builder column(String column) {
resultMapping.column =
public String getProperty() {
public String getColumn() {
public Class&?& getJavaType() {
return javaT
public JdbcType getJdbcType() {
return jdbcT
public TypeHandler&?& getTypeHandler() {
return typeH
public String getNestedResultMapId() {
return nestedResultMapId;
public String getNestedQueryId() {
return nestedQueryId;
public Set&String& getNotNullColumns() {
return notNullC
public String getColumnPrefix() {
return columnP
public List&ResultFlag& getFlags() {
public List&ResultMapping& getComposites() {
public boolean isCompositeResult() {
posites != null && !posites.isEmpty();
public String getResultSet() {
return this.resultS
public String getForeignColumn() {
return foreignC
public void setForeignColumn(String foreignColumn) {
this.foreignColumn = foreignC
public boolean isLazy() {
public void setLazy(boolean lazy) {
this.lazy =
public boolean equals(Object o) {
if (this == o) {
if (o == null || getClass() != o.getClass()) {
ResultMapping that = (ResultMapping)
if (property == null || !property.equals(that.property)) {
public int hashCode() {
if (property != null) {
return property.hashCode();
} else if (column != null) {
return column.hashCode();
Index: FetchType.java
===================================================================
--- FetchType.java (revision 0)
+++ FetchType.java (revision 3)
@@ -0,0 +1,23 @@
Copyright 2014 the original author or authors.
Licensed under the Apache License, Version 2.0 (the &License&);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an &AS IS& BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+package org.apache.ibatis.
+ * @author Eduardo Macarron
+public enum FetchType {
LAZY, EAGER, DEFAULT
Index: MappedStatement.java
===================================================================
--- MappedStatement.java (revision 0)
+++ MappedStatement.java (revision 3)
@@ -0,0 +1,363 @@
the original author or authors.
Licensed under the Apache License, Version 2.0 (the &License&);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an &AS IS& BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+package org.apache.ibatis.
+import java.util.ArrayL
+import java.util.C
+import java.util.L
+import org.apache.ibatis.cache.C
+import org.apache.ibatis.executor.keygen.Jdbc3KeyG
+import org.apache.ibatis.executor.keygen.KeyG
+import org.apache.ibatis.executor.keygen.NoKeyG
+import org.apache.ibatis.logging.L
+import org.apache.ibatis.logging.LogF
+import org.apache.ibatis.scripting.LanguageD
+import org.apache.ibatis.session.C
+ * @author Clinton Begin
+public final class MappedStatement {
+ private S
+ private Configu
+ private S
+ private Integer fetchS
+ private I
+ private StatementType statementT
+ private ResultSetType resultSetT
+ private SqlSource sqlS
+ private C
+ private ParameterMap parameterM
+ private List&ResultMap& resultM
+ private boolean flushCacheR
+ private boolean useC
+ private boolean resultO
+ private SqlCommandType sqlCommandT
+ private KeyGenerator keyG
+ private String[] keyP
+ private String[] keyC
+ private boolean hasNestedResultM
+ private String databaseId;
+ private Log statementL
+ private LanguageD
+ private String[] resultS
+ private MappedStatement() {
// constructor disabled
+ public static class Builder {
private MappedStatement mappedStatement = new MappedStatement();
public Builder(
Configuration configuration,
String id,
SqlSource sqlSource,
SqlCommandType sqlCommandType) {
mappedStatement.configuration =
mappedStatement.id =
mappedStatement.sqlSource = sqlS
mappedStatement.statementType = StatementType.PREPARED;
mappedStatement.parameterMap = new ParameterMap.Builder(
configuration,
&defaultParameterMap&,
new ArrayList&ParameterMapping&())
mappedStatement.resultMaps = new ArrayList&ResultMap&();
mappedStatement.timeout = configuration
.getDefaultStatementTimeout();
mappedStatement.sqlCommandType = sqlCommandT
mappedStatement.keyGenerator = configuration
.isUseGeneratedKeys()
&& SqlCommandType.INSERT
.equals(sqlCommandType) ? new Jdbc3KeyGenerator()
: new NoKeyGenerator();
String logId =
if (configuration
.getLogPrefix() != null)
logId = configuration
.getLogPrefix()
mappedStatement.statementLog = LogFactory
.getLog(logId);
mappedStatement.lang = configuration
.getDefaultScriptingLanuageInstance();
public Builder resource(
String resource) {
mappedStatement.resource =
public String id() {
return mappedStatement.
public Builder parameterMap(
ParameterMap parameterMap) {
mappedStatement.parameterMap = parameterM
public Builder resultMaps(
List&ResultMap& resultMaps) {
mappedStatement.resultMaps = resultM
for (ResultMap resultMap : resultMaps) {
mappedStatement.hasNestedResultMaps = mappedStatement.hasNestedResultMaps
|| resultMap
.hasNestedResultMaps();
public Builder fetchSize(
Integer fetchSize) {
mappedStatement.fetchSize = fetchS
public Builder timeout(
Integer timeout) {
mappedStatement.timeout =
public Builder statementType(
StatementType statementType) {
mappedStatement.statementType = statementT
public Builder resultSetType(
ResultSetType resultSetType) {
mappedStatement.resultSetType = resultSetT
public Builder cache(Cache cache) {
mappedStatement.cache =
public Builder flushCacheRequired(
boolean flushCacheRequired) {
mappedStatement.flushCacheRequired = flushCacheR
public Builder useCache(
boolean useCache) {
mappedStatement.useCache = useC
public Builder resultOrdered(
boolean resultOrdered) {
mappedStatement.resultOrdered = resultO
public Builder keyGenerator(
KeyGenerator keyGenerator) {
mappedStatement.keyGenerator = keyG
public Builder keyProperty(
String keyProperty) {
mappedStatement.keyProperties = delimitedStringtoArray(keyProperty);
public Builder keyColumn(
String keyColumn) {
mappedStatement.keyColumns = delimitedStringtoArray(keyColumn);
public Builder databaseId(
String databaseId) {
mappedStatement.databaseId = databaseId;
public Builder lang(
LanguageDriver driver) {
mappedStatement.lang =
public Builder resulSets(
String resultSet) {
mappedStatement.resultSets = delimitedStringtoArray(resultSet);
public MappedStatement build() {
assert mappedStatement.configuration !=
assert mappedStatement.id !=
assert mappedStatement.sqlSource !=
assert mappedStatement.lang !=
mappedStatement.resultMaps = Collections
.unmodifiableList(mappedStatement.resultMaps);
return mappedS
+ public KeyGenerator getKeyGenerator() {
return keyG
+ public SqlCommandType getSqlCommandType() {
return sqlCommandT
+ public String getResource() {
+ public Configuration getConfiguration() {
+ public String getId() {
+ public boolean hasNestedResultMaps() {
return hasNestedResultM
+ public Integer getFetchSize() {
return fetchS
+ public Integer getTimeout() {
+ public StatementType getStatementType() {
return statementT
+ public ResultSetType getResultSetType() {
return resultSetT
+ public SqlSource getSqlSource() {
return sqlS
+ public ParameterMap getParameterMap() {
return parameterM
+ public List&ResultMap& getResultMaps() {
return resultM
+ public Cache getCache() {
+ public boolean isFlushCacheRequired() {
return flushCacheR
+ public boolean isUseCache() {
return useC
+ public boolean isResultOrdered() {
return resultO
+ public String getDatabaseId() {
return databaseId;
+ public String[] getKeyProperties() {
return keyP
+ public String[] getKeyColumns() {
return keyC
+ public Log getStatementLog() {
return statementL
+ public LanguageDriver getLang() {
+ public String[] getResulSets() {
return resultS
+ public BoundSql getBoundSql(
Object parameterObject) {
BoundSql boundSql = sqlSource
.getBoundSql(parameterObject);
List&ParameterMapping& parameterMappings = boundSql
.getParameterMappings();
if (parameterMappings == null
|| parameterMappings
.size() &= 0) {
boundSql = new BoundSql(
configuration,
boundSql.getSql(),
parameterMap
.getParameterMappings(),
parameterObject);
// check for nested result maps in parameter mappings (issue #30)
for (ParameterMapping pm : boundSql
.getParameterMappings()) {
String rmId = pm
.getResultMapId();
if (rmId != null) {
ResultMap rm = configuration
.getResultMap(rmId);
if (rm != null) {
hasNestedResultMaps |= rm
.hasNestedResultMaps();
return boundS
+ private static String[] delimitedStringtoArray(
String in) {
if (in == null
|| in.trim().length() == 0) {
String[] answer = in
.split(&,&);
Index: DatabaseIdProvider.java
===================================================================
--- DatabaseIdProvider.java (revision 0)
+++ DatabaseIdProvider.java (revision 3)
@@ -0,0 +1,35 @@
the original author or authors.
Licensed under the Apache License, Version 2.0 (the &License&);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an &AS IS& BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+package org.apache.ibatis.
+import java.sql.SQLE
+import java.util.P
+import javax.sql.DataS
+ * Should return an id to identify the type of this database.
+ * That id can be used later on to build different queries for each database type
+ * This mechanism enables supporting multiple vendors or versions
+ * @author Eduardo Macarron
+public interface DatabaseIdProvider {
void setProperties(Properties p);
String getDatabaseId(DataSource dataSource) throws SQLE
Index: ParameterMapping.java
===================================================================
--- ParameterMapping.java (revision 0)
+++ ParameterMapping.java (revision 3)
@@ -0,0 +1,202 @@
the original author or authors.
Licensed under the Apache License, Version 2.0 (the &License&);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an &AS IS& BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+package org.apache.ibatis.
+import java.sql.ResultS
+import org.apache.ibatis.session.C
+import org.apache.ibatis.type.JdbcT
+import org.apache.ibatis.type.TypeH
+import org.apache.ibatis.type.TypeHandlerR
+ * @author Clinton Begin
+public class ParameterMapping {
private Configu
private ParameterM
private Class&?& javaType = Object.
private JdbcType jdbcT
private Integer numericS
private TypeHandler&?& typeH
private String resultMapId;
private String jdbcTypeN
private ParameterMapping() {
public static class Builder {
private ParameterMapping parameterMapping = new ParameterMapping();
public Builder(Configuration configuration, String property, TypeHandler&?& typeHandler) {
parameterMapping.configuration =
parameterMapping.property =
parameterMapping.typeHandler = typeH
parameterMapping.mode = ParameterMode.IN;
public Builder(Configuration configuration, String property, Class&?& javaType) {
parameterMapping.configuration =
parameterMapping.property =
parameterMapping.javaType = javaT
parameterMapping.mode = ParameterMode.IN;
public Builder mode(ParameterMode mode) {
parameterMapping.mode =
public Builder javaType(Class&?& javaType) {
parameterMapping.javaType = javaT
public Builder jdbcType(JdbcType jdbcType) {
parameterMapping.jdbcType = jdbcT
public Builder numericScale(Integer numericScale) {
parameterMapping.numericScale = numericS
public Builder resultMapId(String resultMapId) {
parameterMapping.resultMapId = resultMapId;
public Builder typeHandler(TypeHandler&?& typeHandler) {
parameterMapping.typeHandler = typeH
public Builder jdbcTypeName(String jdbcTypeName) {
parameterMapping.jdbcTypeName = jdbcTypeN
public Builder expression(String expression) {
parameterMapping.expression =
public ParameterMapping build() {
resolveTypeHandler();
validate();
return parameterM
private void validate() {
if (ResultSet.class.equals(parameterMapping.javaType)) {
if (parameterMapping.resultMapId == null) {
throw new IllegalStateException(&Missing resultmap in property '&
+ parameterMapping.property + &'.
+ &Parameters of type java.sql.ResultSet require a resultmap.&);
if (parameterMapping.typeHandler == null) {
throw new IllegalStateException(&Type handler was null on parameter mapping for property '&
+ parameterMapping.property + &'.
+ &It was either not specified and/or could not be found for the javaType / jdbcType combination specified.&);
private void resolveTypeHandler() {
if (parameterMapping.typeHandler == null && parameterMapping.javaType != null) {
Configuration configuration = parameterMapping.
TypeHandlerRegistry typeHandlerRegistry = configuration.getTypeHandlerRegistry();
parameterMapping.typeHandler = typeHandlerRegistry.getTypeHandler(parameterMapping.javaType, parameterMapping.jdbcType);
public String getProperty() {
* Used for handling output of callable statements
public ParameterMode getMode() {
* Used for handling output of callable statements
public Class&?& getJavaType() {
return javaT
* Used in the UnknownTypeHandler in case there is no handler for the property type
public JdbcType getJdbcType() {
return jdbcT
* Used for handling output of callable statements
public Integer getNumericScale() {
return numericS
* Used when setting parameters to the PreparedStatement
public TypeHandler&?& getTypeHandler() {
return typeH
* Used for handling output of callable statements
public String getResultMapId() {
return resultMapId;
* Used for handling output of callable statements
public String getJdbcTypeName() {
return jdbcTypeN
* Not used
public String getExpression() {
Index: ResultSetType.java
===================================================================
--- ResultSetType.java (revision 0)
+++ ResultSetType.java (revision 3)
@@ -0,0 +1,37 @@
the original author or authors.
Licensed under the Apache License, Version 2.0 (the &License&);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an &AS IS& BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+package org.apache.ibatis.
+import java.sql.ResultS
+ * @author Clinton Begin
+public enum ResultSetType {
FORWARD_ONLY(ResultSet.TYPE_FORWARD_ONLY),
SCROLL_INSENSITIVE(ResultSet.TYPE_SCROLL_INSENSITIVE),
SCROLL_SENSITIVE(ResultSet.TYPE_SCROLL_SENSITIVE);
ResultSetType(int value) {
this.value =
public int getValue() {
Index: SqlCommandType.java
===================================================================
--- SqlCommandType.java (revision 0)
+++ SqlCommandType.java (revision 3)
@@ -0,0 +1,23 @@
the original author or authors.
Licensed under the Apache License, Version 2.0 (the &License&);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an &AS IS& BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+package org.apache.ibatis.
+ * @author Clinton Begin
+public enum SqlCommandType {
UNKNOWN, INSERT, UPDATE, DELETE, SELECT, BATEADD, BATEEDIT;
Index: DefaultDatabaseIdProvider.java
===================================================================
--- DefaultDatabaseIdProvider.java (revision 0)
+++ DefaultDatabaseIdProvider.java (revision 3)
@@ -0,0 +1,23 @@
the original author or authors.
Licensed under the Apache License, Version 2.0 (the &License&);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an &AS IS& BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+package org.apache.ibatis.
+ * @author Eduardo Macarron
+@Deprecated
+public class DefaultDatabaseIdProvider extends VendorDatabaseIdProvider {
Index: Environment.java
===================================================================
--- Environment.java (revision 0)
+++ Environment.java (revision 3)
@@ -0,0 +1,97 @@
the original author or authors.
Licensed under the Apache License, Version 2.0 (the &License&);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an &AS IS& BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+package org.apache.ibatis.
+import javax.sql.DataS
+import org.apache.ibatis.transaction.TransactionF
+ * @author Clinton Begin
+public final class Environment {
+ private final S
+ private final TransactionFactory transactionF
+ private final DataSource dataS
+ public Environment(
String id,
TransactionFactory transactionFactory,
DataSource dataSource) {
if (id == null) {
throw new IllegalArgumentException(
&Parameter 'id' must not be null&);
if (transactionFactory == null) {
throw new IllegalArgumentException(
&Parameter 'transactionFactory' must not be null&);
if (dataSource == null) {
throw new IllegalArgumentException(
&Parameter 'dataSource' must not be null&);
this.transactionFactory = transactionF
this.dataSource = dataS
+ public static class Builder {
private TransactionFactory transactionF
private DataSource dataS
public Builder(String id) {
public Builder transactionFactory(
TransactionFactory transactionFactory) {
this.transactionFactory = transactionF
public Builder dataSource(
DataSource dataSource) {
this.dataSource = dataS
public String id() {
return this.
public Environment build() {
return new Environment(
this.transactionFactory,
this.dataSource);
+ public String getId() {
return this.
+ public TransactionFactory getTransactionFactory() {
return this.transactionF
+ public DataSource getDataSource() {
return this.dataS
Index: StatementType.java
===================================================================
--- StatementType.java (revision 0)
+++ StatementType.java (revision 3)
@@ -0,0 +1,23 @@
the original author or authors.
Licensed under the Apache License, Version 2.0 (the &License&);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an &AS IS& BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+package org.apache.ibatis.
+ * @author Clinton Begin
+public enum StatementType {
STATEMENT, PREPARED, CALLABLE
Index: Discriminator.java
===================================================================
--- Discriminator.java (revision 0)
+++ Discriminator.java (revision 3)
@@ -0,0 +1,64 @@
the original author or authors.
Licensed under the Apache License, Version 2.0 (the &License&);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an &AS IS& BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+package org.apache.ibatis.
+import java.util.C
+import java.util.M
+import org.apache.ibatis.session.C
+ * @author Clinton Begin
+public class Discriminator {
private ResultMapping resultM
private Map&String, String& discriminatorM
private Discriminator() {
public static class Builder {
private Discriminator discriminator = new Discriminator();
public Builder(Configuration configuration, ResultMapping resultMapping, Map&String, String& discriminatorMap) {
discriminator.resultMapping = resultM
discriminator.discriminatorMap = discriminatorM
public Discriminator build() {
assert discriminator.resultMapping !=
assert discriminator.discriminatorMap !=
assert discriminator.discriminatorMap.size() & 0;
//lock down map
discriminator.discriminatorMap = Collections.unmodifiableMap(discriminator.discriminatorMap);
public ResultMapping getResultMapping() {
return resultM
public Map&String, String& getDiscriminatorMap() {
return discriminatorM
public String getMapIdFor(String s) {
return discriminatorMap.get(s);
Index: ResultFlag.java
===================================================================
--- ResultFlag.java (revision 0)
+++ ResultFlag.java (revision 3)
@@ -0,0 +1,23 @@
the original author or authors.
Licensed under the Apache License, Version 2.0 (the &License&);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an &AS IS& BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+package org.apache.ibatis.
+ * @author Clinton Begin
+public enum ResultFlag {
ID, CONSTRUCTOR
Index: CacheBuilder.java
===================================================================
--- CacheBuilder.java (revision 0)
+++ CacheBuilder.java (revision 3)
@@ -0,0 +1,204 @@
the original author or authors.
Licensed under the Apache License, Version 2.0 (the &License&);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an &AS IS& BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+package org.apache.ibatis.
+import java.lang.reflect.C
+import java.util.ArrayL
+import java.util.L
+import java.util.M
+import java.util.P
+import org.apache.ibatis.cache.C
+import org.apache.ibatis.cache.CacheE
+import org.apache.ibatis.cache.decorators.LoggingC
+import org.apache.ibatis.cache.decorators.LruC
+import org.apache.ibatis.cache.decorators.ScheduledC
+import org.apache.ibatis.cache.decorators.SerializedC
+import org.apache.ibatis.cache.decorators.SynchronizedC
+import org.apache.ibatis.cache.impl.PerpetualC
+import org.apache.ibatis.reflection.MetaO
+import org.apache.ibatis.reflection.SystemMetaO
+ * @author Clinton Begin
+public class CacheBuilder {
private Class&? extends Cache&
private List&Class&? extends Cache&&
private Long clearI
private boolean readW
public CacheBuilder(String id) {
this.decorators = new ArrayList&Class&? extends Cache&&();
public CacheBuilder implementation(Class&? extends Cache& implementation) {
this.implementation =
public CacheBuilder addDecorator(Class&? extends Cache& decorator) {
if (decorator != null) {
this.decorators.add(decorator);
public CacheBuilder size(Integer size) {
this.size =
public CacheBuilder clearInterval(Long clearInterval) {
this.clearInterval = clearI
public CacheBuilder readWrite(boolean readWrite) {
this.readWrite = readW
public CacheBuilder properties(Properties properties) {
this.properties =
public Cache build() {
setDefaultImplementations();
Cache cache = newBaseCacheInstance(implementation, id);
setCacheProperties(cache);
if (PerpetualCache.class.equals(cache.getClass())) { // issue #352, do not apply decorators to custom caches
for (Class&? extends Cache& decorator : decorators) {
cache = newCacheDecoratorInstance(decorator, cache);
setCacheProperties(cache);
cache = setStandardDecorators(cache);
} else if (!LoggingCache.class.isAssignableFrom(cache.getClass())) {
cache = new LoggingCache(cache);
private void setDefaultImplementations() {
if (implementation == null) {
implementation = PerpetualCache.
if (decorators.size() == 0) {
decorators.add(LruCache.class);
private Cache setStandardDecorators(Cache cache) {
MetaObject metaCache = SystemMetaObject.forObject(cache);
if (size != null && metaCache.hasSetter(&size&)) {
metaCache.setValue(&size&, size);
if (clearInterval != null) {
cache = new ScheduledCache(cache);
((ScheduledCache) cache).setClearInterval(clearInterval);
if (readWrite) {
cache = new SerializedCache(cache);
cache = new LoggingCache(cache);
cache = new SynchronizedCache(cache);
} catch (Exception e) {
throw new CacheException(&Error building standard cache decorators.
Cause: & + e, e);
private void setCacheProperties(Cache cache) {
if (properties != null) {
MetaObject metaCache = SystemMetaObject.forObject(cache);
for (Map.Entry&Object, Object& entry : properties.entrySet()) {
String name = (String) entry.getKey();
String value = (String) entry.getValue();
if (metaCache.hasSetter(name)) {
Class&?& type = metaCache.getSetterType(name);
if (String.class == type) {
metaCache.setValue(name, value);
} else if (int.class == type
|| Integer.class == type) {
metaCache.setValue(name, Integer.valueOf(value));
} else if (long.class == type
|| Long.class == type) {
metaCache.setValue(name, Long.valueOf(value));
} else if (short.class == type
|| Short.class == type) {
metaCache.setValue(name, Short.valueOf(value));
} else if (byte.class == type
|| Byte.class == type) {
metaCache.setValue(name, Byte.valueOf(value));
} else if (float.class == type
|| Float.class == type) {
metaCache.setValue(name, Float.valueOf(value));
} else if (boolean.class == type
|| Boolean.class == type) {
metaCache.setValue(name, Boolean.valueOf(value));
} else if (double.class == type
|| Double.class == type) {
metaCache.setValue(name, Double.valueOf(value));
throw new CacheException(&Unsupported property type for cache: '& + name + &' of type & + type);
private Cache newBaseCacheInstance(Class&? extends Cache& cacheClass, String id) {
Constructor&? extends Cache& cacheConstructor = getBaseCacheConstructor(cacheClass);
return cacheConstructor.newInstance(id);
} catch (Exception e) {
throw new CacheException(&Could not instantiate cache implementation (& + cacheClass + &). Cause: & + e, e);
private Constructor&? extends Cache& getBaseCacheConstructor(Class&? extends Cache& cacheClass) {
return cacheClass.getConstructor(String.class);
} catch (Exception e) {
throw new CacheException(&Invalid base cache implementation (& + cacheClass + &).
&Base cache implementations must have a constructor that takes a String id as a parameter.
Cause: & + e, e);
private Cache newCacheDecoratorInstance(Class&? extends Cache& cacheClass, Cache base) {
Constructor&? extends Cache& cacheConstructor = getCacheDecoratorConstructor(cacheClass);
return cacheConstructor.newInstance(base);
} catch (Exception e) {
throw new CacheException(&Could not instantiate cache decorator (& + cacheClass + &). Cause: & + e, e);
private Constructor&? extends Cache& getCacheDecoratorConstructor(Class&? extends Cache& cacheClass) {
return cacheClass.getConstructor(Cache.class);
} catch (Exception e) {
throw new CacheException(&Invalid cache decorator (& + cacheClass + &).
&Cache decorators must have a constructor that takes a Cache instance as a parameter.
Cause: & + e, e);
Index: VendorDatabaseIdProvider.java
===================================================================
--- VendorDatabaseIdProvider.java (revision 0)
+++ VendorDatabaseIdProvider.java (revision 3)
@@ -0,0 +1,110 @@
the original author or authors.
Licensed under the Apache License, Version 2.0 (the &License&);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an &AS IS& BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+package org.apache.ibatis.
+import java.sql.C
+import java.sql.DatabaseMetaD
+import java.sql.SQLE
+import java.util.M
+import java.util.P
+import javax.sql.DataS
+import org.apache.ibatis.executor.BaseE
+import org.apache.ibatis.logging.L
+import org.apache.ibatis.logging.LogF
+ * Vendor DatabaseId provider
+ * It returns database product name as a databaseId If the user provides a
+ * properties it uses it to translate database product name
+ * key=&Microsoft SQL Server&, value=&ms& will return &ms& It can return null,
+ * if no database product name or a properties was specified and no translation
+ * was found
+ * @author Eduardo Macarron
+public class VendorDatabaseIdProvider
implements DatabaseIdProvider {
+ private static final Log log = LogFactory
.getLog(BaseExecutor.class);
+ private P
+ public String getDatabaseId(
DataSource dataSource) {
if (dataSource == null)
throw new NullPointerException(
&dataSource cannot be null&);
return getDatabaseName(dataSource);
} catch (Exception e) {
log.error(
&Could not get a databaseId from dataSource&,
+ public void setProperties(
Properties p) {
this.properties =
+ private String getDatabaseName(
DataSource dataSource)
throws SQLException {
String productName = getDatabaseProductName(dataSource);
if (this.properties != null) {
for (Map.Entry&Object, Object& property : properties
.entrySet()) {
if (productName
.contains((String) property
.getKey())) {
return (String) property
.getValue();
// no match, return null
return productN
+ private String getDatabaseProductName(
DataSource dataSource)
throws SQLException {
Connection con =
con = dataSource
.getConnection();
DatabaseMetaData metaData = con
.getMetaData();
return metaData
.getDatabaseProductName();
} finally {
if (con != null) {
con.close();
} catch (SQLException e) {
// ignored
Index: ResultMap.java
===================================================================
--- ResultMap.java (revision 0)
+++ ResultMap.java (revision 3)
@@ -0,0 +1,161 @@
the original author or authors.
Licensed under the Apache License, Version 2.0 (the &License&);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an &AS IS& BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+package org.apache.ibatis.
+import java.util.ArrayL
+import java.util.C
+import java.util.HashS
+import java.util.L
+import java.util.L
+import java.util.S
+import org.apache.ibatis.session.C
+ * @author Clinton Begin
+public class ResultMap {
private Class&?&
private List&ResultMapping& resultM
private List&ResultMapping& idResultM
private List&ResultMapping& constructorResultM
private List&ResultMapping& propertyResultM
private Set&String& mappedC
private Discrim
private boolean hasNestedResultM
private boolean hasNestedQ
private Boolean autoM
private ResultMap() {
public static class Builder {
private ResultMap resultMap = new ResultMap();
public Builder(Configuration configuration, String id, Class&?& type, List&ResultMapping& resultMappings) {
this(configuration, id, type, resultMappings, null);
public Builder(Configuration configuration, String id, Class&?& type, List&ResultMapping& resultMappings, Boolean autoMapping) {
resultMap.id =
resultMap.type =
resultMap.resultMappings = resultM
resultMap.autoMapping = autoM
public Builder discriminator(Discriminator discriminator) {
resultMap.discriminator =
public Class&?& type() {
return resultMap.
public ResultMap build() {
if (resultMap.id == null) {
throw new IllegalArgumentException(&ResultMaps must have an id&);
resultMap.mappedColumns = new HashSet&String&();
resultMap.idResultMappings = new ArrayList&ResultMapping&();
resultMap.constructorResultMappings = new ArrayList&ResultMapping&();
resultMap.propertyResultMappings = new ArrayList&ResultMapping&();
for (ResultMapping resultMapping : resultMap.resultMappings) {
resultMap.hasNestedQueries = resultMap.hasNestedQueries || resultMapping.getNestedQueryId() !=
resultMap.hasNestedResultMaps = resultMap.hasNestedResultMaps || (resultMapping.getNestedResultMapId() != null && resultMapping.getResultSet() == null);
final String column = resultMapping.getColumn();
if (column != null) {
resultMap.mappedColumns.add(column.toUpperCase(Locale.ENGLISH));
} else if (resultMapping.isCompositeResult()) {
for (ResultMapping compositeResultMapping : resultMapping.getComposites()) {
final String compositeColumn = compositeResultMapping.getColumn();
if (compositeColumn != null) {
resultMap.mappedColumns.add(compositeColumn.toUpperCase(Locale.ENGLISH));
if (resultMapping.getFlags().contains(ResultFlag.CONSTRUCTOR)) {
resultMap.constructorResultMappings.add(resultMapping);
resultMap.propertyResultMappings.add(resultMapping);
if (resultMapping.getFlags().contains(ResultFlag.ID)) {
resultMap.idResultMappings.add(resultMapping);
if (resultMap.idResultMappings.isEmpty()) {
resultMap.idResultMappings.addAll(resultMap.resultMappings);
// lock down collections
resultMap.resultMappings = Collections.unmodifiableList(resultMap.resultMappings);
resultMap.idResultMappings = Collections.unmodifiableList(resultMap.idResultMappings);
resultMap.constructorResultMappings = Collections.unmodifiableList(resultMap.constructorResultMappings);
resultMap.propertyResultMappings = Collections.unmodifiableList(resultMap.propertyResultMappings);
resultMap.mappedColumns = Collections.unmodifiableSet(resultMap.mappedColumns);
return resultM
public String getId() {
public boolean hasNestedResultMaps() {
return hasNestedResultM
public boolean hasNestedQueries() {
return hasNestedQ
public Class&?& getType() {
public List&ResultMapping& getResultMappings() {
return resultM
public List&ResultMapping& getConstructorResultMappings() {
return constructorResultM
public List&ResultMapping& getPropertyResultMappings() {
return propertyResultM
public List&ResultMapping& getIdResultMappings() {
return idResultM
public Set&String& getMappedColumns() {
return mappedC
public Discriminator getDiscriminator() {
public void forceNestedResultMaps() {
hasNestedResultMaps =
public Boolean getAutoMapping() {
return autoM
Index: ParameterMap.java
===================================================================
--- ParameterMap.java (revision 0)
+++ ParameterMap.java (revision 3)
@@ -0,0 +1,76 @@
the original author or authors.
Licensed under the Apache License, Version 2.0 (the &License&);
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an &AS IS& BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
+package org.apache.ibatis.
+import java.util.C
+import java.util.L
+import org.apache.ibatis.session.C
+ * @author Clinton Begin
+public class ParameterMap {
private Class&?&
private List&ParameterMapping& parameterM
private ParameterMap() {
public static class Builder {
private ParameterMap parameterMap = new ParameterMap();
public Builder(Configuration configuration, String id, Class&?& type, List&ParameterMapping& parameterMappings) {
parameterMap.id =
parameterMap.type =
parameterMap.parameterMappings = parameterM
public Class&?& type() {
return parameterMap.
public ParameterMap build() {
//lock down collections
parameterMap.parameterMappings = Collections.unmodifiableList(parameterMap.parameterMappings);
return parameterM
public String getId() {
public Class&?& getType() {
public List&ParameterMapping& getParameterMappings() {
return parameterM
+public String getValue() {
+public void setValue(String value) {
+ this.value =
(C)&&2013&&Alibaba&&Inc.&&All&&rights&&resvered.
Powered by

我要回帖

更多关于 qq钱包取消绑定银行卡 的文章

 

随机推荐