
1、对于支持生成自增主键的数据库:useGenerateKeys和keyProperty。
2、不支持生成自增主键的数据库:<selectKey>。
但是怎对批量插入数据返回自增主键的解决方式网上看到的还是比较少,至少百度的结果比较少。
Mybatis官网资料提供如下:
First, if your database supports auto-generated key fields (eg MySQL and SQL Server), then you can simply set useGeneratedKeys="true" and set the keyProperty to the target property and you're done For example, if the Authortable above had used an auto-generated column type for the id, the statement would be modified as follows:
<insert id="insertAuthor" useGeneratedKeys="true"
keyProperty="id">
insert into Author (username,password,email,bio)
values (#{username},#{password},#{email},#{bio})
</insert>
If your database also supports multi-row insert, you can pass a list or an array of Authors and retrieve the auto-generated keys
<insert id="insertAuthor" useGeneratedKeys="true"
keyProperty="id">
insert into Author (username, password, email, bio) values
<foreach item="item" collection="list" separator=",">
(#{itemusername}, #{itempassword}, #{itememail}, #{itembio})
</foreach>
</insert>
从官网资料可以看出Mybatis是支持批量插入时返回自增主键的。(百度上说不支持的,多打脸 开玩笑的)
但是在本地测试的时候使用上述方式确实不能返回自增id,而且还报错(不认识keyProperty中指定的Id属性),然后在网上找相关资料。终于在Stackoverflow上面找到了一些信息。
解决办法:
1、升级Mybatis版本到331。
2、在Dao中不能使用@param注解。
3、Mapperxml中使用list变量接受Dao中的集合。
参考地址:
>
方法:在系统运行过程中,针对不同数据库类型区分加载不同文件路径下的sqlmap配置。留给开发人员做的事依旧是快乐地编写原始数据库语句,而不再为多数据库兼容问题挠头。
分析问题:
1、解决ibatis多数据库兼容的问题,实际上就是让ibatis可以自动选择不同数据库sqlmap配置文件。
2、打开ibatis源码工程并进行代码跟踪,最终定位到comibatissqlmapenginebuilderxmlSqlMapConfigParserjava处,系统中运行的sqlmap节点均从这里统一转化加载的。
3、很明显SqlMapConfigParser源码中的addSqlMapNodelets负责解析“/sqlMapConfig/sqlMap”路径,即也就是sqlmap文件路径。
4、要实现“多数据库兼容”,这里改造下这个方法即可。
解决方法:
1、首选我们在<setting>节点新增一个“DBProductName”用于判断数据库种类。当然通过javasqlDatabaseMetaData也可以获得,但这太依赖于jdbc驱动,还是手动配置保险。
2、重构SqlMapConfigParser的addSqlMapNodelets方法。
" 1)首选获得单个sqlmap文件的位置,如 sqlmap主目录\XXXxml;
2)依据上面设置的DBProductName属性值获得数据库类型;
3)将sqlmap的文件路径重定位到运行数据库类型文件下。如 sqlmap主目录\mysql\XXXxml,代表程序当前运行于msql数据库上,并加载系统mysql数据库对应的 sqlmap文件"
4、ok,现在ibatis支持“多数据库兼容”了(完整源码见附件)。
使用方法:
1、编译SqlMapConfigParserjava生成可运行文件SqlMapConfigParserclass(见附件),并将其覆盖添加到ibatisjar中。
2、在系统sqlmap配置文件存放主目录如src\conf\mapping添加多数据库兼容支持的子目录,如src\conf\mapping\mysql,src\conf\mapping\oracle等
3、以实际项目需要编写多数据库sqlmap配置文件。注意:不同数据库类型需要确保具有相同的sqlmap配置文件名和sql节点名
4、在ibatis主配置文件(如sql-map-configxml)中,<setting>指定当前程序运行数据库类型
以上就是关于mybaitis批量插入怎么得到批量返回的自增ID全部的内容,包括:mybaitis批量插入怎么得到批量返回的自增ID、解析txt文件,将文件中明细批量插入mysql数据库表中,怎么做、oracle的批量插入和mysql的批量插入不一致,mybatis要怎么做兼容等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)