MyBatis
中的批量操作主要是通过
feacher
标签进行循环完成的,主要有批量删除、批量更新、批量插入等。
批量删除
<!-- 设备的批量删除 -->
<delete id="deleteEquipmentList" parameterType="java.lang.Integer" >
delete from dbo.teg_equipment
where id in
<foreach item="idItem" index="index" collection="list" open="(" separator="," close=")">
#{idItem}
</foreach>
</delete>
这里对于
foreach
标签的使用可以参考:
MyBatis
动态
SQL
Mapper
接口中定义一个方法:
/**
* @descrption 批量删除
* @author xdwang
* @create 2012-11-21下午2:32:52
* @param ids 需要删除的id集合
*/
void deleteEquipmentList(List<Integer> ids);
批量更新
<update id="delByUpdateEquipmentList">
update dbo.teg_equipment
<set >
isdeleted = 1
</set>
where id in
<foreach item="idItem" index="index" collection="list" open="(" separator="," close=")">
#{idItem}
</foreach>
</update>
批量插入
<insert id="addBatchStudent" useGeneratedKeys="true" parameterType="java.util.List">
<selectKey resultType="long" keyProperty="id" order="AFTER">
SELECT
LAST_INSERT_ID()
</selectKey>
insert into tbl_student (name,birth,birth)
values
<foreach collection="list" item="item" index="index" separator="," >
(#{item.name},#{item.birth},#{item.birth})
</foreach>
</insert>
这里需要注意的时,如果我们将
foreach
放进
<![CDATA[ ]]>
中去,执行时会报错
: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException
,查看错误信息就是传入的参数都是
null
。是因为
<![CDATA[ ]]>
把
xml
中的
<foreach>
标签括起来后把标签直接当成字符串处理了。后面把外面的
<![CDATA[ ]]>
去掉后就能正常执行了。
添加日志显示
SQL
MyBatis
添加日志是非常有必要的,因为
MyBatis
可以采用动态
SQL
,很难保证一次性将
SQL
语句拼写正常,这时候就需要日志将
SQL
显示出来,然后供出错时分析。
Ok
,废话少说,将上次项目中添加的日志拿过来
log4j.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{MMM dd yyyy HH:mm:ss,SSS} %-5p %c - %m%n" />
</layout>
</appender>
<category name="net.carefx" additivity="false">
<priority value="DEBUG" />
<appender-ref ref="console" />
</category>
<category name="org.springframework" additivity="false">
<priority value="DEBUG" />
<appender-ref ref="console" />
</category>
<category name="org.springframework.orm.ibatis3" additivity="false">
<priority value="DEBUG" />
<appender-ref ref="console" />
</category>
<category name="org.apache.ibatis" additivity="false">
<priority value="DEBUG" />
<appender-ref ref="console" />
</category>
<category name="java.sql" additivity="false">
<priority value="DEBUG" />
<appender-ref ref="console" />
</category>
<logger name="org.apache.ibatis.common.jdbc.SimpleDataSource">
<level value="DEBUG" />
</logger>
<logger name="org.apache.ibatis.common.jdbc.SimpleDataSource">
<level value="DEBUG" />
</logger>
<logger name="org.apache.ibatis.common.jdbc.ScriptRunner">
<level value="DEBUG" />
</logger>
<logger name="org.apache.ibatis.common.jdbc.SqlMapClientDelegate">
<level value="DEBUG" />
</logger>
<logger name="java.sql.Connection">
<level value="DEBUG" />
</logger>
<logger name="java.sql.Statement">
<level value="DEBUG" />
</logger>
<logger name="java.sql.PreparedStatement">
<level value="DEBUG" />
</logger>
<logger name="java.sql.ResultSet">
<level value="DEBUG" />
</logger>
<root>
<priority value="DEBUG" />
<appender-ref ref="console" />
</root>
</log4j:configuration>
至此,
MyBatis
也基本上总结完了,简单总结一下
MyBatis
与
iBatis
的区别吧
1
、
Mybatis
实现了接口绑定,使用更加方便
·在
iBatis2.x
中,我们需要在
DAO
的是实现类中指定具体对应哪个
XML
文件,这一点,可以从
iBatis
入门(
http://xdwangiflytek.iteye.com/blog/1332520
)
中可以发现。而
MyBatis
实现了
DAO
接口与
XML
映射文件的绑定,自动为我们生成接口的具体实现,使用起来更加省事和方便,这点可以在
TODO
中发现。
说明:虽然
MyBatis
支持在接口中直接使用
annotation
的配置方式来简化配置,不过强烈建议仍然使用
XML
配置的方式,毕竟
annotation
的配置方式功能有限且代码侵入性太强,使用
XML
配置方式才能体现
MyBatis
的优势所在,自己在项目中也是以
XML
的方式开发的。
2
、对象关系映射的改进,效率更高
·相信很多在使用
ibatis2.x
的朋友并没有通过
ibatis
的
xml
映射文件来实现对象间的关系映射。其实也确实没有必要那么做,因为
ibatis2.x
采用的是“嵌套查询”的方式将对象之间的关系通过查询语句的直接拼装来实现,其效果和在
DAO
或
Service
中自行封装是一样的。不过这种方式存在“
N+1
查询问题”。概括地讲,
N+1
查询问题可以是这样引起的:
·
你执行了一个单独的
SQL
语句来获取结果列表(就是
+1
)。
·
对返回的每条记录,你执行了一个查询语句来为每个加载细节(就是
N
)。
这个问题会导致成百上千的
SQL
语句被执行。这通常不是期望的。
而在
Mybatis
中,除了兼容
ibatis2.x
中的“嵌套查询”方式外,还提供了直接“嵌套结果”的方式,其效果相当于直接通过一句
sql
将查询出的
dto
对象自动封装成所需的对象。不过实际上这一改进所带来的好处也是很有限的。因为这一方式在使用分页的时候并不起作用,或者说嵌套对象的结果集是不允许进行分页的。这一点在
Mybatis
框架中已经做出了明确的限制
3
、
MyBatis
采用功能强大的基于
OGNL
的表达式来消除其他元素。
·熟悉
struts2
的人应该对
OGNL
表达式不会感到陌生,
MyBatis
采用
OGNL
表达式简化了配置文件的复杂性,使用起来更简洁。
分享到:
相关推荐
标题 "从iBatis迁移到MyBatis" 暗示了本次讨论的主题是关于数据库持久层框架的升级,从较早的iBatis转向更现代的MyBatis。iBatis是一个Java语言中的SQL映射框架,而MyBatis是在iBatis的基础上发展起来的,提供了更多...
### myBatis与ibatis的区别 #### 一、概述 myBatis与ibatis是两款在Java领域中非常流行的持久层框架,它们均基于SQL映射机制,为开发者提供了便捷的方式来处理数据库操作。两者间的关系密切,ibatis是myBatis的...
在IT行业中,数据库操作是应用程序开发的核心部分,而MyBatis、iBatis和Hibernate都是流行的Java持久层框架,它们简化了与数据库交互的过程。这三个框架各有特点,但都提供了ORM(对象关系映射)机制,帮助开发者将...
iBatis 3是MyBatis的前身,随着时间的推移,MyBatis逐渐发展成为一个更加成熟、功能更加强大的框架。MyBatis消除了几乎所有的JDBC代码和手动设置参数以及获取结果集。它使开发者能够专注于SQL本身,而不再需要处理...
在Java EE开发领域,iBatis和MyBatis是两个广受欢迎的持久层框架,它们都提供了SQL映射的功能,帮助开发者处理数据库操作。iBatis作为早期的代表,以其简洁和灵活性赢得了开发者们的青睐,特别是对于熟悉SQL的程序员...
在IT行业中,`iBatis` 和 `MyBatis` 是两种非常流行的持久层框架,它们主要用于简化Java应用程序中的数据库操作。本篇文章将深入探讨这两个框架,并基于`CRUD`(Create, Read, Update, Delete)操作来阐述如何使用它们...
与Ibatis Helper相比,Mybatis Generator提供了更多高级特性,例如自动添加主键生成策略、自定义模板支持、JavaBean规范遵循等。此外,它还支持多数据源配置,对于大型项目尤为实用。 这两款工具都遵循了Maven插件...
描述中的“一键转换,不用自己再手动替换标签”意味着这个工具可以自动化处理iBATIS与MyBatis之间的转换工作,减少了开发者手动修改大量代码的时间和精力。通常,这样的转换涉及到的主要任务包括: 1. **XML配置...
Ibatis和Mybatis都是广泛使用的Java ORM(对象关系映射)框架,它们帮助开发者将数据库操作与业务逻辑解耦。本篇文章将探讨从ibatis2.x升级到mybatis3.x的过程,揭示其中的技术变迁和核心变化。 Ibatis2.x是一款轻...
总的来说,这份资源对于学习和实践Ibatis与Mybatis的CRUD操作以及分页功能非常有价值。通过理解并掌握这些知识,开发者能够有效地管理数据库操作,提升应用的性能和用户体验。同时,提供的公司网站链接也为开发者...
MyBatis和iBatis是两个著名的Java持久层框架,它们简化了数据库操作与Java对象之间的映射。本文将深入探讨“generate mybatis ibatis artifacts”这个主题,它是一款为Eclipse开发的插件,旨在帮助开发者自动化创建...
Mybatis拦截器(Interceptor)是一种插件机制,它允许我们在Mybatis执行SQL语句之前或之后进行自定义操作,比如统计SQL执行时间、添加日志等。拦截器基于Java的动态代理实现,可以拦截Mapper接口方法的调用。 接...
ibatis和mybatis对比
《MyBatis(iBATIS) 学习指南》 MyBatis,原名iBATIS,是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML...
标题中的“myBatis or ibatis 神器”指的是两个知名的Java持久层框架——myBatis和iBatis。这两个框架在Java开发中扮演着重要角色,它们简化了数据库操作,让开发者能够更加专注于业务逻辑,而不是底层的SQL查询。 ...
在里面总结了ibatis和mybatis的主要区别,包括xml文件等
MyBatis和iBatis是两个著名的Java持久层框架,它们都致力于简化数据库与Java代码之间的交互。在Java开发中,代码生成工具可以极大地提高开发效率,减少手动编写重复的CRUD(创建、读取、更新、删除)操作。本压缩包...
在IT领域,尤其是在数据库操作与框架应用中,批量插入数据是一项常见且重要的需求。相比于单条插入,批量插入能够显著提升数据处理效率,减少数据库I/O操作,从而提高整体性能。本文将深入探讨如何利用MyBatis框架...
为了解决这个问题,ibatis(现已更名为MyBatis)提供了一种支持批量更新的机制,能够显著提高数据处理的速度。 #### 批量Update背景与问题 在实际应用中,经常会遇到需要批量更新数据库中的数据的情况,例如:商品...
在MyBatis中,操作JSON类型数据涉及到对MySQL数据库中JSON字段类型的映射和转换,以便于在Java代码中能够方便地处理这些数据。这里,我们主要关注如何自定义TypeHandler来实现这一功能。 首先,MySQL引入了JSON类型...