- 浏览: 958774 次
- 性别:
- 来自: 江西上饶
文章分类
- 全部博客 (460)
- p.spring (56)
- p.maven (20)
- p.ant (17)
- p.jee (18)
- p.jse (33)
- p.ofbiz (31)
- p.软件工程 (8)
- p.struts2 (5)
- p.hibernate (5)
- linux (25)
- 设计模式 (2)
- p.javascript (11)
- 硬件 (1)
- p.jsp (2)
- p.windows批处理 (1)
- 操作系统问题 (5)
- 算法 (1)
- p.mysql (7)
- p.sql (5)
- p.c (1)
- google产品 (0)
- 内存 (1)
- p.struts (1)
- p.freemarker (7)
- p.css (4)
- p.log4j (10)
- p.html (3)
- 淘宝产品 (0)
- 其他 (3)
- 编译器 (0)
- svn (4)
- p.spring.security (11)
- 图形 (0)
- p.xml (1)
- p.ssh (0)
- p.jquery (4)
- p.jdbc (3)
- p.flex (0)
- p.c++ (0)
- p.c#Net (0)
- p.assembly (0)
- p.sqlserver (0)
- p.其他 (3)
- p.webwork (21)
- p.wap (12)
- p.cglib (1)
- p.jee服务器 (11)
- windows (2)
- p.iphone (1)
- p.java.分布式与集群 (2)
- p.ibatis (16)
- p.eclipse (5)
- 架构 (2)
- http协议 (5)
- 我的个人标准 (2)
- 多线程 (1)
- 奇怪问题 (5)
- p.jira (13)
- p.httpclient (1)
- 服务器.apache (11)
- 安全防范 (1)
- p.PODAM (1)
- p.junit (16)
- fop (2)
- 硬盘安装 (1)
- powerdesigner (0)
- 单元测试 (1)
- apache commons (4)
- tomcat+apache集群 (10)
- 各类诡辩 (1)
- 安卓 (8)
- qvod (1)
- java编程基础知识考试考点及答案 (0)
- 工作总结 (4)
- oracle (0)
- spring的util工具 (3)
- json (2)
- maven (3)
- jms (19)
- p.bat (3)
- hadoop (2)
- git (3)
- nginx (1)
- p.移动开发 (1)
- shiro (3)
- 游戏破解 (1)
- react-native (7)
- ios开发 (1)
- webmagic (6)
- socks5 (1)
最新评论
-
weituotian:
说的不好,没人看的
公司系统中的菜单功能和权限功能 -
石不易:
非常详细的注解~
绑定端口和IP,Listen 与VirtualHost指令 -
spring_springmvc:
spring mvc demo教程源代码下载,地址:http: ...
spring mvc -
liyixing1:
PandaDONG 写道谢谢你啊,我已经下下来了,只是还有很多 ...
jira war安装 -
liyixing1:
PandaDONG 写道谢谢你啊,我已经下下来了,只是还有很多 ...
jira war安装
在类DynamicSqlSource
方法
public BoundSql getBoundSql(Object parameterObject) {
DynamicContext context = new DynamicContext(configuration, parameterObject);
rootSqlNode.apply(context);
SqlSourceBuilder sqlSourceParser = new SqlSourceBuilder(configuration);
Class<?> parameterType = parameterObject == null ? Object.class : parameterObject.getClass();
SqlSource sqlSource = sqlSourceParser.parse(context.getSql(), parameterType);
BoundSql boundSql = sqlSource.getBoundSql(parameterObject);
for (Map.Entry<String, Object> entry : context.getBindings().entrySet()) {
boundSql.setAdditionalParameter(entry.getKey(), entry.getValue());
}
return boundSql;
}
第一行DynamicContext context = new DynamicContext(configuration, parameterObject);
这句话是根据配置,sql语句,以及参数,来生成context。生成的context会会加入到ognl的contxt,因此在我们的sql访问#{_parameter},只要你插入参数,就一定可以找到我们传入的这个参数,而不用管它是什么类型
进入后可以看到
public DynamicContext(Configuration configuration, Object parameterObject) {
if (parameterObject != null && !(parameterObject instanceof Map)) {
MetaObject metaObject = configuration.newMetaObject(parameterObject);
bindings = new ContextMap(metaObject);
} else {
bindings = new ContextMap(null);
}
bindings.put(PARAMETER_OBJECT_KEY, parameterObject);
}
1.bindings.put(PARAMETER_OBJECT_KEY, parameterObject);
这里的PARAMETER_OBJECT_KEY = _parameter;
因此在我们的sql中,类似于
<if test="_parameter != null" >
<include refid="Example_Where_Clause" />
</if>
是没有问题的。
随后它会将这个传入的参数对象,根据它的类型,活得它可以得到的表达式。
if (object instanceof ObjectWrapper) {
this.objectWrapper = (ObjectWrapper) object;
} else if (objectWrapperFactory.hasWrapperFor(object)) {
this.objectWrapper = objectWrapperFactory.getWrapperFor(this, object);
} else if (object instanceof Map) {
this.objectWrapper = new MapWrapper(this, (Map) object);
} else {
this.objectWrapper = new BeanWrapper(this, object);
}
传入的是bean,BeanWrapper这个处理器会获取这个传入的参数的所有的get方法,并获取get方法后面的Xxx,如getName,就是name
多个参数
我们可能会碰到多个参数作为参数的情况。
如
public MessagegetMessages(String id, String messageType);
但ibatis只接受一个参数。
这个时候可以使用javabean作为参数传递,或者使用Map作为参数传递。如
<select id="getMessages" parameterType="java.util.Map"
resultType="com.liyixing.ibatis.model.Message" >
SELECT *
FROM message WHERE ID = #{id} AND MESSAGE_TYPE = #{messageType}
</select>
Map<String, Object> params = new HashMap<String, Object>();
params.put("id", 1);
params.put("messageType", 1);
List<Message> messages = messageDao.getMessages(params);
因为ibatis使用OGNL作为表达式的。它把参数作为root,因为ognl的root只有一个。所以ibatis只能支持一个参数。
方法
public BoundSql getBoundSql(Object parameterObject) {
DynamicContext context = new DynamicContext(configuration, parameterObject);
rootSqlNode.apply(context);
SqlSourceBuilder sqlSourceParser = new SqlSourceBuilder(configuration);
Class<?> parameterType = parameterObject == null ? Object.class : parameterObject.getClass();
SqlSource sqlSource = sqlSourceParser.parse(context.getSql(), parameterType);
BoundSql boundSql = sqlSource.getBoundSql(parameterObject);
for (Map.Entry<String, Object> entry : context.getBindings().entrySet()) {
boundSql.setAdditionalParameter(entry.getKey(), entry.getValue());
}
return boundSql;
}
第一行DynamicContext context = new DynamicContext(configuration, parameterObject);
这句话是根据配置,sql语句,以及参数,来生成context。生成的context会会加入到ognl的contxt,因此在我们的sql访问#{_parameter},只要你插入参数,就一定可以找到我们传入的这个参数,而不用管它是什么类型
进入后可以看到
public DynamicContext(Configuration configuration, Object parameterObject) {
if (parameterObject != null && !(parameterObject instanceof Map)) {
MetaObject metaObject = configuration.newMetaObject(parameterObject);
bindings = new ContextMap(metaObject);
} else {
bindings = new ContextMap(null);
}
bindings.put(PARAMETER_OBJECT_KEY, parameterObject);
}
1.bindings.put(PARAMETER_OBJECT_KEY, parameterObject);
这里的PARAMETER_OBJECT_KEY = _parameter;
因此在我们的sql中,类似于
<if test="_parameter != null" >
<include refid="Example_Where_Clause" />
</if>
是没有问题的。
随后它会将这个传入的参数对象,根据它的类型,活得它可以得到的表达式。
if (object instanceof ObjectWrapper) {
this.objectWrapper = (ObjectWrapper) object;
} else if (objectWrapperFactory.hasWrapperFor(object)) {
this.objectWrapper = objectWrapperFactory.getWrapperFor(this, object);
} else if (object instanceof Map) {
this.objectWrapper = new MapWrapper(this, (Map) object);
} else {
this.objectWrapper = new BeanWrapper(this, object);
}
传入的是bean,BeanWrapper这个处理器会获取这个传入的参数的所有的get方法,并获取get方法后面的Xxx,如getName,就是name
多个参数
我们可能会碰到多个参数作为参数的情况。
如
public MessagegetMessages(String id, String messageType);
但ibatis只接受一个参数。
这个时候可以使用javabean作为参数传递,或者使用Map作为参数传递。如
<select id="getMessages" parameterType="java.util.Map"
resultType="com.liyixing.ibatis.model.Message" >
SELECT *
FROM message WHERE ID = #{id} AND MESSAGE_TYPE = #{messageType}
</select>
Map<String, Object> params = new HashMap<String, Object>();
params.put("id", 1);
params.put("messageType", 1);
List<Message> messages = messageDao.getMessages(params);
因为ibatis使用OGNL作为表达式的。它把参数作为root,因为ognl的root只有一个。所以ibatis只能支持一个参数。
发表评论
-
深入了解MyBatis参数
2017-05-04 21:12 385深入了解MyBatis参数 http://blog.csdn ... -
MyBatis Generator 详解
2015-08-03 14:00 761http://blog.csdn.net/isea533/ar ... -
ibatis的动态sql
2014-10-23 13:33 937位于包 com.ibatis.sqlmap.engine.ma ... -
枚举 enum
2013-12-13 17:28 2591当使用枚举时,需要使用EnumTypeHandler或者Enu ... -
mybatis generator tools配置文件解析
2012-12-20 23:28 25410这是mybatis3 generator 配 ... -
问题解决方案
2011-08-22 00:25 24221.Mapped Statements collection ... -
与spring结合
2011-05-20 21:58 1236实体省略 maping文件省略 dao接口省略 mybatis ... -
动态sql
2011-05-05 17:54 1261ibatis支持动态的组合sql。 包括动态元素 if ... -
ibatis缓存
2011-05-05 16:38 4508ibatis的session缓存。做了一个测试 <?xm ... -
ibatis官方推荐目录结构
2011-05-05 13:24 1056src/com.liyixing.application.da ... -
sql映射文件
2011-04-30 22:09 2554<?xml version="1.0" ... -
配置文件
2011-04-30 20:17 1803mybatis的配置文件结构 顶级是configuration ... -
session的getMapper方法解析
2011-04-30 17:22 9640跟踪: DefaultSqlSession类 public & ... -
一个简单例子,以及基于接口,class对象调用
2011-04-30 16:59 1325应用结构: IbatisConfiguration.xm ... -
范围和声明周期(对象声明周期)
2011-04-29 23:19 1347先看mybatis用户手册中的一段代码 DataSource ...
相关推荐
"深入了解MyBatis参数" MyBatis作为一个流行的持久层框架,对参数的处理和使用是非常重要的。本文将深入了解MyBatis参数,了解参数处理过程,参数传递方式,参数类型等知识点。 参数处理过程 ---------------- 在...
总结,MyBatis参数处理主要涉及Map或JavaBean的使用,以及如何在映射文件中指定参数类型。通过合理的参数处理,MyBatis可以灵活地构建和执行SQL查询,同时保证数据的安全性。在实际开发中,开发者可以根据需求选择...
在实际开发过程中,我们往往需要编写复杂的SQL语句,拼接稍有不注意就会导致错误,Mybatis给开发者提供了动态SQL,大大降低了拼接SQL导致的错误。 动态标签 if标签 if标签通常用那个胡where语句,update语句,insert...
在使用MyBatis进行数据库操作时,我们经常会遇到需要传递多个参数的情况。在这个问题中,开发者遇到了一个关于如何正确传入参数#{index}的问题。在MyBatis中,#{index}是参数占位符,它用于动态SQL的拼接,但具体...
MyBatis参数处理是MyBatis框架中非常重要的一个环节,它决定了如何将Java方法的参数映射到SQL语句中。下面将详细介绍MyBatis中不同类型的参数处理方法。 1. **单个参数**: 当只有一个参数时,MyBatis不会做特殊...
"Mybatis参数传递示例代码" Mybatis参数传递是Mybatis框架中一个非常重要的概念,它允许开发人员将参数传递给SQL语句,以实现更加灵活和可扩展的数据库交互。以下是关于Mybatis参数传递的详细知识点: 一、SQL语句...
Mybatis 传递参数的几种方法 Mybatis 中传递参数有多种方法,以下是其中的四种: 1. 传递单个参数 在 Mybatis 中,传递单个参数非常简单。可以直接将参数写在方法中,参数类型可以是 String,也可以是基本类型,...
非常好用的,就是你们所要的 Mybatis日志参数快速替换占位符 sql参数替换工具html
5. **MyBatis参数传递**:MyBatis支持多种方式传递参数,包括Map、@Param注解以及自定义对象。在查询语句中,可以使用#{paramName}来引用传入的参数,例如,查询条件可能来自前端传来的参数。 6. **结果映射**:...
Mybatis日志中的SQL解析工具(网页版) 说明:复制日志时,必须注意,日志必须包含Preparing:和Parameters:全部内容,而且日志换行格式要保留,不要复制成纯文本,直接ctrl+c即可。
在 MyBatis 中,存在一些全局配置参数,这些参数能够影响整个 MyBatis 框架的行为。以下是对这些参数的详细解释: 1. `cacheEnabled`:此参数决定了是否在全局范围内启用缓存。如果设置为 `true`(默认),则开启...
4、MyBatis参数传递 MyBatis支持多种参数传递方式。使用#{ }表达式可以接收参数值,例如在XML映射文件中,#{id}将被替换为传入的实际值。参数可以是Map、JavaBean或者单个值。Map传递时,键作为字段名,值作为实际值...
Mybatis 提供了一种日志机制,能够自动填充SQL参数并打印到控制台,这对于排查问题和理解查询逻辑非常有帮助。 首先,Mybatis的日志实现依赖于日志库,如Log4j、Logback或Java内置的java.util.logging。为了开启SQL...
在Mybatis这个强大的持久层框架中,多参数查询与列表查询是常见的操作,尤其是在处理复杂的业务逻辑时。本文将深入探讨Mybatis如何实现这两种查询方式,并提供多种实现方法。 首先,我们来理解Mybatis的基本概念。...
MyBatis拦截器是MyBatis框架中的一种插件机制,允许用户自定义代码来扩展MyBatis的功能。在这个特定的实例中,我们讨论的是一个用于给参数对象属性赋值的拦截器。这个拦截器的主要目标是在执行增删改操作时,自动为...
MyBatis-Stitch是一款专为Eclipse开发的插件,主要功能是帮助开发者更便捷地管理和操作MyBatis框架中的参数与SQL绑定。这个插件极大地提升了开发效率,减少了手动编写和维护SQL语句的工作量,尤其在处理复杂的动态...
在这个主题中,我们将深入探讨如何利用MyBatis拦截器实现分页以及动态地修改SQL语句和参数值。 首先,我们关注的是"PaginationInterceptor.java",这是一个常见的分页拦截器实现。在MyBatis中,我们可以创建自定义...
mybatis中的事务的开启,有利于读者自己配置mybatis参数,实现自己的要求。
**Mybatis参数绑定机制**: 1. **单个参数**:直接对应SQL中的占位符。 2. **多个参数**: - **下标方式**:参数按顺序对应SQL中的占位符,可读性较低。 - **注解方式**:使用@Param注解指定参数名,可读性更高,...