栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mybatis高级映射、动态SQL及获得自增主键的解析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mybatis高级映射、动态SQL及获得自增主键的解析

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。下文给大家介绍Mybatis高级映射、动态SQL及获得自增主键的内容,具体详情请参考本文。

一、动态SQL

相信大家在用mybatis操作数据库时时都会碰到一个问题,假如现在我们有一个关于作者的list authorList,需要根据authorList里已有的作者信息在数据库中查询相应作者的博客信息。那么最容易想到的做法就是遍历authorList,获取相应的信息查询数据库。

for(int i=0;I < authorList.size();i++) {
……
//查询数据库代码
//select * from blog where author=#{author,jdbcType=VARCHAR}
}

想一想,如果假设authorList的长度为N,那么我们就需要查询N次数据库,如果用这种方法,程序的开销不仅仅是查询,还有从数据库连接池中取出连接实例、建立数据库连接、将数据库实例返还给数据库连接池,假设这三个动作加起来总共用时0.001秒。那么采取遍历的办法查询,将会多耗时0.001N秒,如果需要查询1000次,那么将多1秒钟的时间,对于程序猿来说,这是不可忍受的,因为这只是一个循环查询,还不算其它的业务代码。

那么,有没有更好的办法呢,答案是肯定,其中之一是动态SQL:

先上代码:


select * from blog where author in

#{item}



tem表示集合中每一个元素进行迭代时的别名,

index指定一个名字,用于表示在迭代过程中,每次迭代到的位置,

open表示该语句以什么开始,

separator表示在每次进行迭代之间以什么符号作为分隔符,

close表示以什么结束这样返回值就可以用List接受.

但是动态SQL中的foreach语句用的最多的实在insert语句中,并且通常在in子句中使用。

二、高级映射

在使用mybatis的时候,一般是使用resultType = com.blog.author 实体类来接受查询结果

或者是使用resultType = java.util.map将数据库列名作为key,记录值作为value返回。

但是这次需要使用resultMap,它可以允许自由组合返回值的形式,用以处理更复杂的查询。

还是先上代码:

SQL: