`

MyBatis 批量操作、添加日志显示、MyBatis与iBatis区别

阅读更多

 

         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转向更现代的MyBatis。iBatis是一个Java语言中的SQL映射框架,而MyBatis是在iBatis的基础上发展起来的,提供了更多...

    myBatis和ibatis的区别

    ### myBatis与ibatis的区别 #### 一、概述 myBatis与ibatis是两款在Java领域中非常流行的持久层框架,它们均基于SQL映射机制,为开发者提供了便捷的方式来处理数据库操作。两者间的关系密切,ibatis是myBatis的...

    mybatis,ibatis,hibernate 显示查询SQL

    在IT行业中,数据库操作是应用程序开发的核心部分,而MyBatis、iBatis和Hibernate都是流行的Java持久层框架,它们简化了与数据库交互的过程。这三个框架各有特点,但都提供了ORM(对象关系映射)机制,帮助开发者将...

    MyBatis(iBatis 3)入门示例 及 整合Mybatis与Spring3

    iBatis 3是MyBatis的前身,随着时间的推移,MyBatis逐渐发展成为一个更加成熟、功能更加强大的框架。MyBatis消除了几乎所有的JDBC代码和手动设置参数以及获取结果集。它使开发者能够专注于SQL本身,而不再需要处理...

    iBatis和MyBatis对比

    在Java EE开发领域,iBatis和MyBatis是两个广受欢迎的持久层框架,它们都提供了SQL映射的功能,帮助开发者处理数据库操作。iBatis作为早期的代表,以其简洁和灵活性赢得了开发者们的青睐,特别是对于熟悉SQL的程序员...

    ibatis mybatis crud 完整代码

    在IT行业中,`iBatis` 和 `MyBatis` 是两种非常流行的持久层框架,它们主要用于简化Java应用程序中的数据库操作。本篇文章将深入探讨这两个框架,并基于`CRUD`(Create, Read, Update, Delete)操作来阐述如何使用它们...

    Ibatis/mybatis代码生成工具

    与Ibatis Helper相比,Mybatis Generator提供了更多高级特性,例如自动添加主键生成策略、自定义模板支持、JavaBean规范遵循等。此外,它还支持多数据源配置,对于大型项目尤为实用。 这两款工具都遵循了Maven插件...

    ibatis2mybatis-master.zip

    描述中的“一键转换,不用自己再手动替换标签”意味着这个工具可以自动化处理iBATIS与MyBatis之间的转换工作,减少了开发者手动修改大量代码的时间和精力。通常,这样的转换涉及到的主要任务包括: 1. **XML配置...

    ibatis2.X升级mybatis3.X之曲径通幽处

    Ibatis和Mybatis都是广泛使用的Java ORM(对象关系映射)框架,它们帮助开发者将数据库操作与业务逻辑解耦。本篇文章将探讨从ibatis2.x升级到mybatis3.x的过程,揭示其中的技术变迁和核心变化。 Ibatis2.x是一款轻...

    ibatis mybatis 分页 crud 完整代码

    总的来说,这份资源对于学习和实践Ibatis与Mybatis的CRUD操作以及分页功能非常有价值。通过理解并掌握这些知识,开发者能够有效地管理数据库操作,提升应用的性能和用户体验。同时,提供的公司网站链接也为开发者...

    generate mybatis ibatis artifacts

    MyBatis和iBatis是两个著名的Java持久层框架,它们简化了数据库操作与Java对象之间的映射。本文将深入探讨“generate mybatis ibatis artifacts”这个主题,它是一款为Eclipse开发的插件,旨在帮助开发者自动化创建...

    ibatis和mybatis对比

    ibatis和mybatis对比

    通过Mybatis拦截器自动定位慢SQL并记录日志

    Mybatis拦截器(Interceptor)是一种插件机制,它允许我们在Mybatis执行SQL语句之前或之后进行自定义操作,比如统计SQL执行时间、添加日志等。拦截器基于Java的动态代理实现,可以拦截Mapper接口方法的调用。 接...

    MyBatis(iBATIS) 学习

    《MyBatis(iBATIS) 学习指南》 MyBatis,原名iBATIS,是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML...

    myBatis or ibatis 神器

    标题中的“myBatis or ibatis 神器”指的是两个知名的Java持久层框架——myBatis和iBatis。这两个框架在Java开发中扮演着重要角色,它们简化了数据库操作,让开发者能够更加专注于业务逻辑,而不是底层的SQL查询。 ...

    ibatis和mybatis的区别

    在里面总结了ibatis和mybatis的主要区别,包括xml文件等

    mybatis和ibatis代码生成工具

    MyBatis和iBatis是两个著名的Java持久层框架,它们都致力于简化数据库与Java代码之间的交互。在Java开发中,代码生成工具可以极大地提高开发效率,减少手动编写重复的CRUD(创建、读取、更新、删除)操作。本压缩包...

    Mybatis 3+Mysql 实现批量插入

    在IT领域,尤其是在数据库操作与框架应用中,批量插入数据是一项常见且重要的需求。相比于单条插入,批量插入能够显著提升数据处理效率,减少数据库I/O操作,从而提高整体性能。本文将深入探讨如何利用MyBatis框架...

    ibatis应对批量update

    为了解决这个问题,ibatis(现已更名为MyBatis)提供了一种支持批量更新的机制,能够显著提高数据处理的速度。 #### 批量Update背景与问题 在实际应用中,经常会遇到需要批量更新数据库中的数据的情况,例如:商品...

    根据MyBatis或iBatis的SQLMapper文件反向生成数据库表

    根据MyBatis或iBatis的...这可以通过编程语言与数据库操作的API来实现,比如Java中的JDBC或者MyBatis/iBatis提供的API。 执行SQL语句: 最后,将生成的数据库表结构信息通过执行相应的SQL语句来创建或者修改数据库表。

Global site tag (gtag.js) - Google Analytics