在我们的项目中采用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中实现多参数查询,并探讨几种常见的解决方案。 #### 二、ibatis简介 ibatis(现更名为MyBatis)是一个优秀的持久层框架,它消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索...
### ibatis中输入输出各种类型的参数分析及#与$区别 #### iBatis简介与特点 iBatis作为一款轻量级的Java持久层框架,以其简洁、灵活的特点,在众多框架中占据一席之地。相较于知名的Hibernate框架,iBatis在实现上...
在动态查询条件中,iBatis 提供了多种判断参数的方法,例如 `isNotNull`、`isNotEmpty`、`isGreaterThan` 等,这些方法可以根据参数的值来生成不同的 SQL 语句。 下面是一个简单的示例,演示如何使用 iBatis 的动态...
通过在 `<select>` 标签中设置 `remapResults="true"`,可以有效地解决IBatis缓存动态字段带来的问题。这不仅避免了因缓存错误而导致的查询失败,还确保了程序能够灵活地处理动态表名和字段名。同时,需要注意的是,...
总结来说,iBatis中的SQLMap配置涉及到命名空间、别名、插入操作、主键获取、参数类型和结果映射等多个方面,理解和熟练掌握这些知识点对于高效地使用iBatis框架至关重要。通过合理的配置,可以有效地将Java代码与...
通过上述介绍,我们可以看到使用 `HashMap` 解决 ibatis 中的动态列名和列数的问题是一种非常实用的方法。它不仅避免了为每种情况创建实体类的繁琐工作,还提高了代码的灵活性和可维护性。希望本文能够帮助你在实际...
iBATIS是一个轻量级框架,它的核心功能是动态SQL映射,允许开发者编写SQL语句并将其封装到XML配置文件中,与Java或.NET代码分离。这样可以避免硬编码SQL,提高代码的可读性和可维护性。 在.NET中使用iBATIS时,首先...
在ibatis中,`parameterClass`属性用于指定传递给SQL语句的参数类型。例如,在给定的部分内容中: ```xml <select id="queryIfSysNotificationPri" parameterClass="Long" resultClass="Long"> select rf.role_id ...
以上内容详细介绍了 ibatis 中动态查询的基本原理及具体实现方法,包括模糊查询、多条件组合查询以及使用 Map 作为参数的高级用法。这些知识点对于深入理解 ibatis 的动态查询机制非常重要,可以帮助开发者更高效地...
- 在ibatis中,`<select>`元素中的`parameterClass`属性用于指定参数类型,在myBatis中改为了`parameterType`。 - 类似地,`resultClass`属性在ibatis中用于指定结果类型,在myBatis中被替换成了`resultType`。 #...
在探讨ibatis中的动态SQL(Dynamic SQL)及`prepend`的使用时,我们首先需要对ibatis有一个基本的理解。ibatis是一种开源的数据访问层框架,它简化了Java应用程序与数据库之间的交互过程。通过使用XML配置文件来定义...
iBatis 16个常用SQL语句 ...上面的语句将查询`StatMemberAction`表中满足条件的记录,输入参数中包含一个数组`moduleId`。 iBatis提供了一个灵活的方式来配置SQL语句,支持各种类型的输入参数和复杂的查询语句。
3. **参数类型与返回类型**: 在`<select>`标签中,通过`parameterClass`和`resultClass`属性指定参数类型和返回结果的类型。在本例中,参数类型为`java.lang.Integer`,返回类型为`java.lang.String`。 4. **执行...
与Eclipse中的Abator不同,iBatis Plugin不仅限于代码生成,而是全方位地优化了iBatis的开发体验。 **配置iBatis Plugin** 首先,你需要从IntelliJ IDEA的插件市场下载iBatis Plugin。安装完成后,配置数据源...
这里的`namespace`是映射文件的唯一标识,`select`元素定义了一个SQL查询,`id`是方法名称,`parameterClass`指定了输入参数类型,`resultClass`则是返回结果的Java类。 在Java代码中,可以通过SqlSessionFactory...
在使用iBatis进行数据库操作的过程中,可能会遇到各种各样的问题。这些问题往往由于iBatis错误信息的隐晦性而难以快速定位与解决。本文将根据所提供的标题、描述及部分内容,详细阐述在使用iBatis时可能遇到的一些...
- **parameterClass**:指定参数对象的类。 - **parameterMap**:定义复杂的参数映射规则。 - **InlineParameter**:在SQL语句中直接嵌入参数。 ##### 4.3 结果映射 - **resultClass**:指定结果对象的类。 - **...
根据提供的文档信息,我们可以深入探讨Ibatis框架中的一个具体应用场景:如何通过动态SQL查询特定条件下的ID列表。本文将从以下几个方面进行详细解析: ### 一、Ibatis简介 Ibatis是一个基于Java的持久层框架,它...
- `parameterClass`属性定义了输入参数的类型,这里是`MemberPost`类,其中的属性如`auditStatus`、`isOpen`等对应SQL语句中的占位符`#auditStatus:NUMERIC#`、`#isOpen:NUMERIC#`等。 7. **结果映射**: - `...
`<iterate>`标签是iBatis中用于循环遍历集合的一种机制,它允许你在SQL语句中动态生成参数列表,这对于批量操作(如批量插入、更新或删除)尤为重要。该标签支持多种属性,包括`property`、`conjunction`、`open`、`...