`
xingkaistart
  • 浏览: 40077 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

动态Ibatis中parameterClass参数

阅读更多
在我们的项目中采用Ibatis作为访问持久层框架时,有时我们又需要启用JDBC连接来完成某种意义上的操作,而把Ibatis的开发模式更改了又不是我们的初衷,因此我们只能在已经用sqlMap.xml配置好的基础上进行参数封装。

具体参数方法如下:
	/**
	 *  预编译封装对象
	 * @param sqlmap
	 * @param ps
	 * @param sqlId
	 * @param params
	 * @return 绘制PreparedStatement
	 */
	public static PreparedStatement getSqlParameterMap(SqlMapClientImpl sqlmap,PreparedStatement ps,String sqlId,Object params) {
		
		/**获取ibatis参数*/
		ParameterMapping[]paramMappSet = getParameterMapp( sqlmap, sqlId);
		/**反射来装配参数*/
		try {
			int index=0;
			for(ParameterMapping paramMapp : paramMappSet){
				index++;
				String methodName = "get"+toFirstLetterUpperCase(paramMapp.getPropertyName());
				Method method = params.getClass().getDeclaredMethod(methodName);
				Object obj = null; 
				obj = method.invoke(params, null);
				putPreparedStatement(ps,index,obj ,method.getGenericReturnType());
			}
		} catch (Exception e) {
			new Result(Const.RS_ERROR,"","反射装配ibatais参数异常,系统错误!",(Params)params,e,log);
		} 
		
		return ps;
	}
	
	
	/**
	 * 获取ibatis预编译参数
	 * */
	private static ParameterMapping[] getParameterMapp(SqlMapClientImpl sqlmap,String sqlId){
		/**获取sqlMap.xml映射*/
		MappedStatement stmt = sqlmap.getMappedStatement(sqlId);
		/**获取指定ID的parameterClass参数*/
		ParameterMapping[] paramMappSet = stmt.getParameterMap().getParameterMappings();
		
		return paramMappSet;
	}
	
	private static void putPreparedStatement(PreparedStatement ps,int index,Object obj ,Object type) throws SQLException{
		/*String*/
		if(obj instanceof String){
			ps.setString(index, obj.toString());
		}
		/*Integer*/
		if(obj instanceof Integer){
			ps.setInt(index, Integer.valueOf(obj.toString()));
		}
		/*Long*/
		if(obj instanceof Long){
			ps.setLong(index, Long.valueOf(obj.toString()));
		}
		/*Double*/
		if(obj instanceof Double){
			ps.setDouble(index, Double.valueOf(obj.toString()));
		}
		/*Date*/
		if(obj instanceof Date){
		}
		if(obj instanceof BigDecimal){
			ps.setBigDecimal(index, BigDecimal.valueOf(Long.valueOf(obj.toString())));
		}
	}

//**
  * 将手字母大写
**/
	public static String toFirstLetterUpperCase(String strName) {
		if (strName == null || strName.length() < 2) {
			return strName;
		}
		String firstLetter = strName.substring(0, 1).toUpperCase();
		return firstLetter + strName.substring(1, strName.length());
	}
分享到:
评论

相关推荐

    ibatis的多参数查询.doc

    本文将详细介绍如何在ibatis中实现多参数查询,并探讨几种常见的解决方案。 #### 二、ibatis简介 ibatis(现更名为MyBatis)是一个优秀的持久层框架,它消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索...

    ibatis中输入输出各种类型的参数分析及#与$区别

    ### ibatis中输入输出各种类型的参数分析及#与$区别 #### iBatis简介与特点 iBatis作为一款轻量级的Java持久层框架,以其简洁、灵活的特点,在众多框架中占据一席之地。相较于知名的Hibernate框架,iBatis在实现上...

    ibatis_动态查询条件

    在动态查询条件中,iBatis 提供了多种判断参数的方法,例如 `isNotNull`、`isNotEmpty`、`isGreaterThan` 等,这些方法可以根据参数的值来生成不同的 SQL 语句。 下面是一个简单的示例,演示如何使用 iBatis 的动态...

    解决IBatis缓存动态字段问题

    通过在 `&lt;select&gt;` 标签中设置 `remapResults="true"`,可以有效地解决IBatis缓存动态字段带来的问题。这不仅避免了因缓存错误而导致的查询失败,还确保了程序能够灵活地处理动态表名和字段名。同时,需要注意的是,...

    ibatis 中sqlMap配置

    总结来说,iBatis中的SQLMap配置涉及到命名空间、别名、插入操作、主键获取、参数类型和结果映射等多个方面,理解和熟练掌握这些知识点对于高效地使用iBatis框架至关重要。通过合理的配置,可以有效地将Java代码与...

    ibatis 用HashMap解决resultClass映射

    通过上述介绍,我们可以看到使用 `HashMap` 解决 ibatis 中的动态列名和列数的问题是一种非常实用的方法。它不仅避免了为每种情况创建实体类的繁琐工作,还提高了代码的灵活性和可维护性。希望本文能够帮助你在实际...

    .net中使用iBATIS的小例子

    iBATIS是一个轻量级框架,它的核心功能是动态SQL映射,允许开发者编写SQL语句并将其封装到XML配置文件中,与Java或.NET代码分离。这样可以避免硬编码SQL,提高代码的可读性和可维护性。 在.NET中使用iBATIS时,首先...

    ibatis的错误总结

    在ibatis中,`parameterClass`属性用于指定传递给SQL语句的参数类型。例如,在给定的部分内容中: ```xml &lt;select id="queryIfSysNotificationPri" parameterClass="Long" resultClass="Long"&gt; select rf.role_id ...

    ibatis的dynamicSQL中,关于prepend的使用

    在探讨ibatis中的动态SQL(Dynamic SQL)及`prepend`的使用时,我们首先需要对ibatis有一个基本的理解。ibatis是一种开源的数据访问层框架,它简化了Java应用程序与数据库之间的交互过程。通过使用XML配置文件来定义...

    ibatis的动态查询

    以上内容详细介绍了 ibatis 中动态查询的基本原理及具体实现方法,包括模糊查询、多条件组合查询以及使用 Map 作为参数的高级用法。这些知识点对于深入理解 ibatis 的动态查询机制非常重要,可以帮助开发者更高效地...

    myBatis和ibatis的区别

    - 在ibatis中,`&lt;select&gt;`元素中的`parameterClass`属性用于指定参数类型,在myBatis中改为了`parameterType`。 - 类似地,`resultClass`属性在ibatis中用于指定结果类型,在myBatis中被替换成了`resultType`。 #...

    ibatis16个常用sql语句

    iBatis 16个常用SQL语句 ...上面的语句将查询`StatMemberAction`表中满足条件的记录,输入参数中包含一个数组`moduleId`。 iBatis提供了一个灵活的方式来配置SQL语句,支持各种类型的输入参数和复杂的查询语句。

    IBATIS中,要查询出来的属性来自哪个xml,就把这个方法写在该xml下

    3. **参数类型与返回类型**: 在`&lt;select&gt;`标签中,通过`parameterClass`和`resultClass`属性指定参数类型和返回结果的类型。在本例中,参数类型为`java.lang.Integer`,返回类型为`java.lang.String`。 4. **执行...

    ibatis plugin用户指南

    与Eclipse中的Abator不同,iBatis Plugin不仅限于代码生成,而是全方位地优化了iBatis的开发体验。 **配置iBatis Plugin** 首先,你需要从IntelliJ IDEA的插件市场下载iBatis Plugin。安装完成后,配置数据源...

    ibatis中文教程PPT格式

    这里的`namespace`是映射文件的唯一标识,`select`元素定义了一个SQL查询,`id`是方法名称,`parameterClass`指定了输入参数类型,`resultClass`则是返回结果的Java类。 在Java代码中,可以通过SqlSessionFactory...

    ibatis出错调试心得

    在使用iBatis进行数据库操作的过程中,可能会遇到各种各样的问题。这些问题往往由于iBatis错误信息的隐晦性而难以快速定位与解决。本文将根据所提供的标题、描述及部分内容,详细阐述在使用iBatis时可能遇到的一些...

    ibatis中文api文档

    - **parameterClass**:指定参数对象的类。 - **parameterMap**:定义复杂的参数映射规则。 - **InlineParameter**:在SQL语句中直接嵌入参数。 ##### 4.3 结果映射 - **resultClass**:指定结果对象的类。 - **...

    Ibatis查询Id列表.doc

    根据提供的文档信息,我们可以深入探讨Ibatis框架中的一个具体应用场景:如何通过动态SQL查询特定条件下的ID列表。本文将从以下几个方面进行详细解析: ### 一、Ibatis简介 Ibatis是一个基于Java的持久层框架,它...

    Ibatis复杂查询语句.doc

    - `parameterClass`属性定义了输入参数的类型,这里是`MemberPost`类,其中的属性如`auditStatus`、`isOpen`等对应SQL语句中的占位符`#auditStatus:NUMERIC#`、`#isOpen:NUMERIC#`等。 7. **结果映射**: - `...

    ibatis list

    `&lt;iterate&gt;`标签是iBatis中用于循环遍历集合的一种机制,它允许你在SQL语句中动态生成参数列表,这对于批量操作(如批量插入、更新或删除)尤为重要。该标签支持多种属性,包括`property`、`conjunction`、`open`、`...

Global site tag (gtag.js) - Google Analytics