- 浏览: 535496 次
- 性别:
- 来自: 长沙
文章分类
最新评论
-
wocan23:
镜像是不是就是集群里面的从服务器啊
高并发处理方案 -
chenyi0834:
net.sf.ehcache.Cache ehCache=Ap ...
spring+ehCache简单整合使用示例 -
fsh430623:
是一个获取spring容器bean的工具类
spring+ehCache简单整合使用示例 -
hxc985815621:
ApplicationContextUtils是什么?
spring+ehCache简单整合使用示例 -
peixingchen:
你好,楼主,Action里面的CompanyApplyDTO类 ...
jquery+struts1.3.8的ajax上传文件
接使用JDBC一个非常普遍的问题就是动态SQL。使用参数值、参数本身和数据列都是动态SQL,通常是非常困难的。典型的解决办法就是用上一堆 的IF-ELSE条件语句和一连串的字符串连接。对于这个问题,Ibatis提供了一套标准的相对比较清晰的方法来解决一个问题,这里有个简单的例子:
<select id="getUserList" resultMap="user">
select * from user
<isGreaterThan prepend="and" property="id" compareValue="0">
where user_id = #userId#
</isGreaterThan>
order by createTime desc
</select>
上面的例子中,根据参数bean“id”属性的不同情况,可创建两个可能的语句。如果参数“id”大于0,将创建下面的语句:
select * from user where user_id = ? order by createTime desc
或者,如果“id”参数小于等于0,将创建下面的语句:
select * from user order by createTime desc
以上的这个例子是否可以看出Ibatis里提供的简单的写法来实现了复杂拖沓的动态SQL呢?我们在做查询的时候,对于同一个表,甚至可以用来定义一个动态SQL,做到重用的地步,还是上面那个例子:
<sql id="queryCondition">
<dynamic prepend="WHERE">
<isGreaterThan prepend="and" property="id" compareValue="0">
where user_id = #userId#
</isGreaterThan>
</dynamic>
</sql>
<select id="getUserList" resultMap="user">
select * from user
<!-- 引入动态的查询条件 -->
<include refid="queryCondition"/>
order by createTime desc
</select>
这个使用的话是否更加的具有公用性能,这就是Ibatis带来的便利。
在Ibatis中,动态的条件元素包含一下几种:二元条件元素、一元条件元素和其他条件元素:
(1)、二元条件元素:将一个属性值和静态值或另一个属性值比较,如果条件为真,元素将被包容在查询SQL语句中。
二元条件元素的属性:
perpend——可被覆盖的SQL语句组成部分,添加在语句的前面(可选)
property——是比较的属性(必选)
compareProperty——另一个用于和前者比较的属性(必选或选择compareValue)
compareValue——用于比较的值(必选或选择compareProperty)
<isEqual> 比较属性值和静态值或另一个属性值是否相等。
<isNotEqual> 比较属性值和静态值或另一个属性值是否不相等。
<isGreaterThan> 比较属性值是否大于静态值或另一个属性值。
<isGreaterEqual> 比较属性值是否大于等于静态值或另一个属性值。
<isLessThan> 比较属性值是否小于静态值或另一个属性值。
<isLessEqual>
比较属性值是否小于等于静态值或另一个属性值。
举个小例子:
<isLessEqual prepend=”AND” property=”age” compareValue=”18”>
ADOLESCENT = ‘TRUE’
</isLessEqual>
如果大于等18岁时,则为成年人
(2)、一元条件元素:一元条件元素检查属性的状态是否符合特定的条件。
一元条件元素的属性:
prepend——可被覆盖的SQL语句组成部分,添加在语句前面(可选)
property——被比较的属性(必选)
<isPropertyAvailable> 检查是否存在该属性(存在parameter bean的属性)
<isNotPropertyAvailable> 检查是否不存在该属性(不存在parameter bean的属性)
<isNull> 检查属性是否为null
<isNotNull> 检查属性是否不为null
<isEmpty> 检查Collection.size()的值,属性的String或String.valueOf()值,是否为null或空(“”或size() < 1)
<isNotEmpty> 检查Collection.size()的值,属性的String或String.valueOf()值,是否不为null或不为空(“”或size() > 0)
小例子:
<isNotEmpty prepend="AND" property="firstName" >
FIRST_NAME=#firstName#
</isNotEmpty>
(3)、其他元素条件
(a).Parameter Present:这些元素检查参数对象是否存在
Parameter Present条件的属性
prepend - 可被覆盖的SQL语句组成部分,添加在语句的前面(可选)
<isParameterPresent> 检查是否存在参数对象(不为null)
<isNotParameterPresent> 例子:
<isNotParameterPresent prepend=”AND”>
EMPLOYEE_TYPE = ‘DEFAULT’
</isNotParameterPresent>
(b)、Iterate:这属性遍历整个集合,并为List集合中的元素重复元素体的内容。
Iterate的属性:
prepend - 可被覆盖的SQL语句组成部分,添加在语句的前面(可选)
property - 类型为java.util.List的用于遍历的元素(必选)
open - 整个遍历内容体开始的字符串,用于定义括号(可选)
close -整个遍历内容体结束的字符串,用于定义括号(可选)
conjunction - 每次遍历内容之间的字符串,用于定义AND或OR(可选)
<iterate> 遍历类型为java.util.List的元素。
例子:
<iterate prepend="AND" property="userNameList"
open="(" close=")" conjunction="OR">
username=#userNameList[]#
</iterate>
注意:使用<iterate>时,在List元素名后面包括方括号[]非常重要,方括号[]将对象标记为List,以防解析器简单地将List输出成String。
<select id="getUserList" resultMap="user">
select * from user
<isGreaterThan prepend="and" property="id" compareValue="0">
where user_id = #userId#
</isGreaterThan>
order by createTime desc
</select>
上面的例子中,根据参数bean“id”属性的不同情况,可创建两个可能的语句。如果参数“id”大于0,将创建下面的语句:
select * from user where user_id = ? order by createTime desc
或者,如果“id”参数小于等于0,将创建下面的语句:
select * from user order by createTime desc
以上的这个例子是否可以看出Ibatis里提供的简单的写法来实现了复杂拖沓的动态SQL呢?我们在做查询的时候,对于同一个表,甚至可以用来定义一个动态SQL,做到重用的地步,还是上面那个例子:
<sql id="queryCondition">
<dynamic prepend="WHERE">
<isGreaterThan prepend="and" property="id" compareValue="0">
where user_id = #userId#
</isGreaterThan>
</dynamic>
</sql>
<select id="getUserList" resultMap="user">
select * from user
<!-- 引入动态的查询条件 -->
<include refid="queryCondition"/>
order by createTime desc
</select>
这个使用的话是否更加的具有公用性能,这就是Ibatis带来的便利。
在Ibatis中,动态的条件元素包含一下几种:二元条件元素、一元条件元素和其他条件元素:
(1)、二元条件元素:将一个属性值和静态值或另一个属性值比较,如果条件为真,元素将被包容在查询SQL语句中。
二元条件元素的属性:
perpend——可被覆盖的SQL语句组成部分,添加在语句的前面(可选)
property——是比较的属性(必选)
compareProperty——另一个用于和前者比较的属性(必选或选择compareValue)
compareValue——用于比较的值(必选或选择compareProperty)
<isEqual> 比较属性值和静态值或另一个属性值是否相等。
<isNotEqual> 比较属性值和静态值或另一个属性值是否不相等。
<isGreaterThan> 比较属性值是否大于静态值或另一个属性值。
<isGreaterEqual> 比较属性值是否大于等于静态值或另一个属性值。
<isLessThan> 比较属性值是否小于静态值或另一个属性值。
<isLessEqual>
比较属性值是否小于等于静态值或另一个属性值。
举个小例子:
<isLessEqual prepend=”AND” property=”age” compareValue=”18”>
ADOLESCENT = ‘TRUE’
</isLessEqual>
如果大于等18岁时,则为成年人
(2)、一元条件元素:一元条件元素检查属性的状态是否符合特定的条件。
一元条件元素的属性:
prepend——可被覆盖的SQL语句组成部分,添加在语句前面(可选)
property——被比较的属性(必选)
<isPropertyAvailable> 检查是否存在该属性(存在parameter bean的属性)
<isNotPropertyAvailable> 检查是否不存在该属性(不存在parameter bean的属性)
<isNull> 检查属性是否为null
<isNotNull> 检查属性是否不为null
<isEmpty> 检查Collection.size()的值,属性的String或String.valueOf()值,是否为null或空(“”或size() < 1)
<isNotEmpty> 检查Collection.size()的值,属性的String或String.valueOf()值,是否不为null或不为空(“”或size() > 0)
小例子:
<isNotEmpty prepend="AND" property="firstName" >
FIRST_NAME=#firstName#
</isNotEmpty>
(3)、其他元素条件
(a).Parameter Present:这些元素检查参数对象是否存在
Parameter Present条件的属性
prepend - 可被覆盖的SQL语句组成部分,添加在语句的前面(可选)
<isParameterPresent> 检查是否存在参数对象(不为null)
<isNotParameterPresent> 例子:
<isNotParameterPresent prepend=”AND”>
EMPLOYEE_TYPE = ‘DEFAULT’
</isNotParameterPresent>
(b)、Iterate:这属性遍历整个集合,并为List集合中的元素重复元素体的内容。
Iterate的属性:
prepend - 可被覆盖的SQL语句组成部分,添加在语句的前面(可选)
property - 类型为java.util.List的用于遍历的元素(必选)
open - 整个遍历内容体开始的字符串,用于定义括号(可选)
close -整个遍历内容体结束的字符串,用于定义括号(可选)
conjunction - 每次遍历内容之间的字符串,用于定义AND或OR(可选)
<iterate> 遍历类型为java.util.List的元素。
例子:
<iterate prepend="AND" property="userNameList"
open="(" close=")" conjunction="OR">
username=#userNameList[]#
</iterate>
注意:使用<iterate>时,在List元素名后面包括方括号[]非常重要,方括号[]将对象标记为List,以防解析器简单地将List输出成String。
发表评论
-
springjdbc的对象映射与命名参数问题
2016-01-07 09:24 1692springjdbctemplate ... -
mappingDirectoryLocations/mappingJarLocations/mappingResources/mappingLocations的
2015-10-20 17:38 2437于spring对hibernate配置文件hibernate ... -
springmvc服务端数据验证的自定义验证与扩展使用
2014-02-20 11:37 1973... -
springmvc服务端验证
2014-02-20 11:26 4525... -
spring+ehCache简单整合使用示例
2013-11-08 10:31 19615下面介绍一下简单使用的配置过程:ehcache.jar及spr ... -
springmvc拦截器使用小结
2013-09-28 11:59 1587springmvc拦截器使用小结 想做个session拦截验 ... -
mybaits级联查询
2013-09-22 11:03 995mybaits级联查询 1对1的级联或关联查询如下:用ass ... -
access is denied 可能的原因分析
2013-07-30 09:51 1677access is denied 可能的原因分析 用 ap ... -
spring3配置文件中的context:property-placeholder/元素
2013-07-29 15:42 1225spring3配置文件中的context:property-p ... -
mybatis批量添加数据与主键处理:
2013-07-22 09:38 20016mybatis批量添加数据处理: 主要在于xml文件中 ... -
hibernate如何执行本地sql
2012-02-10 13:30 1609因本人记性不好,所以在此做个记录,以便日后查找。呵呵 执行 ... -
spring quartz 整合示例
2011-11-29 16:33 1408很简单,导入jar包我就不说了,百度一下,多的是。 附件是另 ... -
spring aop简单应用示例
2011-11-01 17:46 1532spring的 aop功能强大,这里是一个简单示例: 监控对特 ... -
There is no ID/IDREF binding for IDREF
2011-07-21 15:10 2957<bean id="mySingProduct ... -
query specified join fetching, but the owner of the fetched association was not
2011-07-20 11:11 3413from TSignpartDTO Z left join f ... -
could not initialize proxy - no Session 问题处理
2011-07-15 18:59 1821在做关联查询后,在页面列表显示出现could not init ... -
hibernate子表数据关联修改
2011-07-13 15:07 1820String hql = "update TProj ... -
spring的JdbcDaoSupport的一些用法示例
2011-03-04 16:20 1420一些API的示例用法,希望有所帮助。看附件吧。大家 -
普通java bean中获取Spring的ApplicationContext
2010-11-06 10:57 5104很多情况下,我们需要在普通javabean中获取spring ... -
Spring2.5的新特性:第一部分
2010-07-19 11:34 917(转载来源:http://www.infoq.com/cn/a ...
相关推荐
在实际开发过程中,我们往往需要编写复杂的SQL语句,拼接稍有不注意就会导致错误,Mybatis给开发者提供了动态SQL,大大降低了拼接SQL导致的错误。 动态标签 if标签 if标签通常用那个胡where语句,update语句,insert...
if 、where、set、trim、choose 、foreach等在mybatis中的具体用法,有具体实例可供参考,玩转mybatis
mybatis动态sql批量增删改查,增强了mybatis的认识。
mybatis之动态SQL
基于mybatis的慢SQL小插件,原理是mybatis拦截器。只需要在springboot的配置文件做简单的配置,mybatis拦截器将SQL中所有参数自动做了填充。拦截器监控慢SQL并将完整的可执行的SQL语句打印在日志文件中,复制该SQL...
MyBatis动态拼接SQL
这是一个测试,专门测试Mybatis的动态sql。里面包含了所有的动态sql的用法,全部用代码形式描述出来,并给与适当的注释。
Mybatis动态SQL实现,详细,简单,!
MyBatis动态SQL,MyBatis批量插入(Oracle数据库)[收集].pdf
把 mybatis 输出的sql日志还原成完整的sql语句。 将日志输出的sql语句中的问号 ? 替换成真正的参数值。 通过 "Tools -> MyBatis Log Plugin" 菜单或快捷键 "Ctrl+Shift+Alt+O" 启用。 点击窗口左边的 "Filter" ...
mybatis动态SQL语句--基于xml配置。
mybatis动态sql.md
mybatis动态sql详解,网络查询,自己实践整理,希望对大家有帮助
该工具可以将mybatis输出的sql日志提取出来,并将其格式化为可以直接执行的sql语句,节约开发人员时间
MyBatis动态SQL
适用于springboot(整合过mybatis的)和常规SSM项目,可以获取完整的mybatis执行的sql语句,用于直观的看到执行sql是否异常
mybatis动态sql及参数的传递,还可以。有需要的可以下载看看
SpringMVC+Mybatis+SQLServer整合源码 含数据库文件
MyBatis 动态 SQL,内含3个教学视频,欢迎观看,谢谢!
MyBatis连接 SQL server 数据库