- 浏览: 940978 次
- 性别:
- 来自: 江西上饶
文章分类
- 全部博客 (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 349深入了解MyBatis参数 http://blog.csdn ... -
MyBatis Generator 详解
2015-08-03 14:00 732http://blog.csdn.net/isea533/ar ... -
ibatis的动态sql
2014-10-23 13:33 908位于包 com.ibatis.sqlmap.engine.ma ... -
枚举 enum
2013-12-13 17:28 2555当使用枚举时,需要使用EnumTypeHandler或者Enu ... -
mybatis generator tools配置文件解析
2012-12-20 23:28 25358这是mybatis3 generator 配 ... -
问题解决方案
2011-08-22 00:25 23881.Mapped Statements collection ... -
与spring结合
2011-05-20 21:58 1203实体省略 maping文件省略 dao接口省略 mybatis ... -
动态sql
2011-05-05 17:54 1226ibatis支持动态的组合sql。 包括动态元素 if ... -
ibatis缓存
2011-05-05 16:38 4462ibatis的session缓存。做了一个测试 <?xm ... -
ibatis官方推荐目录结构
2011-05-05 13:24 1025src/com.liyixing.application.da ... -
sql映射文件
2011-04-30 22:09 2516<?xml version="1.0" ... -
配置文件
2011-04-30 20:17 1776mybatis的配置文件结构 顶级是configuration ... -
session的getMapper方法解析
2011-04-30 17:22 9594跟踪: DefaultSqlSession类 public & ... -
一个简单例子,以及基于接口,class对象调用
2011-04-30 16:59 1289应用结构: IbatisConfiguration.xm ... -
范围和声明周期(对象声明周期)
2011-04-29 23:19 1319先看mybatis用户手册中的一段代码 DataSource ...
相关推荐
深入了解MyBatis参数
在实际开发过程中,我们往往需要编写复杂的SQL语句,拼接稍有不注意就会导致错误,Mybatis给开发者提供了动态SQL,大大降低了拼接SQL导致的错误。 动态标签 if标签 if标签通常用那个胡where语句,update语句,insert...
【已解决】关于MyBatis参数传入#{index}的问题的解决方案 原文链接:https://mp.csdn.net/postedit/80387035 对应的源码
DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.cd.StudentMapper"> select * from stu_tbl where name = #{name} and ...
[html] view plain copy id="queryMessageList" parameterType="java.util.M
主要介绍了MyBatis参数处理实现方法汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了MyBatis 参数类型为String时常见问题及解决方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
总结了Mybatis传递参数的几种方式,并对几种方式进行比较,另外还有一些参数的限制说明
mybatis-stitch MyBatis 参数-SQL绑定eclipse插件
非常好用的,就是你们所要的 Mybatis日志参数快速替换占位符 sql参数替换工具html
MyBatis传入参数与parameterType.doc
主要给大家介绍了关于Mybatis参数传递的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
MyBatis拦截器分页与动态修改SQL及其参数值 提取SQL Like 字段
mybatis中内置的全局参数,用于学习mybatis框架,在不确定是否有该别名的时候可以查查这份文档
mybatis中的事务的开启,有利于读者自己配置mybatis参数,实现自己的要求。
MyBatis传入多个参数
Mybatis Log(自动填充sql参数打印到控制台)
Mybatis多参数查询与列表查询不同方式实现,效果看博文 http://blog.csdn.net/evankaka/article/details/45671473