设为首页 收藏本站
查看: 686|回复: 0

[经验分享] MyBatis 批量操作、添加日志显示、MyBatis与iBatis区别

[复制链接]

尚未签到

发表于 2016-11-25 06:28:03 | 显示全部楼层 |阅读模式
        
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.iyunv.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
表达式简化了配置文件的复杂性,使用起来更简洁。

 

 

 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-305047-1-1.html 上篇帖子: mybatis + spring 全注解 下篇帖子: mybatis中配置批量insert list
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表