Mybatis 常用sql之批量添加和修改
Dao层
mybatis批量添加 mybatis批量添加数据
int updateByList(List list);
Mappe层
批量修改
update jt_fin_repayment_plan
erestTotal != null" >
ORG_INTEREST_TOTAL = #{},
DEL_FLAG = #{item.delFlag},
STATE = #{item.state},
CREATE_BY = #{item.createBy},
CREATE_TIME = #{item.createTime},
UPDATE_BY = #{item.updateBy},
UPDATE_TIME = #{NOW(),
where REPAYMENT_ID = #{item.repaymentId}
----------------------------------------------------------------------------------------------------------
dao层
//批量添加
int addList(List list);
Map层
批量添加
insert into jt_fin_adjust_rates_project_history (
ID,ADJUST_RATES_ID,PROJECT_ID,START_WHOLE,
END_WHOLE,START_WITHOUT,END_WITHOUT,PROJECT_DATE,
KEEP,AUDIT_FLAG,STATUS,REMARK,DEL_FLAG,
CREATE_BY,CREATE_TIME,UPDATE_TIME,UPDATE_BY
)values
((select UUID()), #{item.adjustRatesId},#{item.projectId},#{item.startWhole},
#{item.endWhole},#{item.startWithout},#{item.endWithout},#{item.projectDate},
#{item.keep},#{item.auditFlag},#{item.status},#{item.remark},#{item.delFlag},
#{item.createBy},sysdate(), #{item.updateTime}, #{item.updateBy})
注意:我的id VARCHAR类型 主键 不能递增 在这里我用的是UUID生成的
原本,想写一个批量添加,回显id但是没实现就不写了,有大佬可以补充一下
mybatis怎么批量插入数据库
你的意思应该是用oracle数据库的序列自动生成的主键id,那么
种方法:你可以在插入主键的时候用序列生成,就是为主键id赋值xxx_seq.nextval,这个序列是你创建的这个table的序列
第二种方法:你可以按照楼上说的,用主键映射,当然对于mysql这种有自增主键和oracle这种用序列的需要不同的设置,楼上代码
很清楚,不做赘述。
第三种方法:有人说不用添加主键,能够自动生成,这个方法我没有尝试过,只记得在nicat
for
mysql
不写主键可以自动计算生成的,楼主可以尝试下。
对于支持自动生成主键的数据库(如SQL
Server),可以采用以下方式:
....
对于不支持自动生成主键(如Oracle),可以采用以下方式:
select
my_seq.nextval
from
dual
....
springboot手动回滚之后再往库里添加数据
可以使用JdbcTemplate类的execute()方法重新执行SQL语句,将数据入库。通过JdbcTemplate的batchUpdate()方法,也可以实现批量添加数据的功能。SpringBoot还提供了其他的数据库作工具,如Hibernate、Mybatis等,也可以用来对数据库进行回滚作和添加数据。
mybatis-plus解决 sqlserver批量插入list报错
解决版本:3.0.6
原因分析:mybatis-plus默认使用Jdbc3KeyGenerator进行添加,但是sqlserver不支持批量返回id,所以会抛出如下异常
解决方案: 重写默认seBatch和seOrUpdateBatch(缺点是批量添加不能返回id,对于不需要返回id的场景适用)将Jdbc3KeyGenerator替换为NoKeyGenerator
步: 建立NoahSqlMethod(也可以不写,但是项目尽量不出现魔法值)
第二步: 建立InsertBatch对象
第三步: 建立NoahSqlInjector对象
第四步: 重写ServiceImpl超类为AbstractNoahServiceImpl
第五步: 将业务service继承类改为AbstractNoahServiceImpl
第六步: 将SqlInjector注入系统中
mybatis 批量作数据
mybatis的批量作有两种方式,一是使用foreach标签,二是使用mybatis的BATCH模型
在xml中通过foreach对表数据进行循环作
在oracle中不支持insert into product(name, type, price) values ('a', 'tv', 1233), ('b', 'ac', 3455),....('','','')这种形式的sql,因此oracle批量插入使用 insert all into table(...) values(...) into table(...) values(...) select from dual; 语句来解决以下方式,并且需要显示指定useGeneratedKeys=false
另一种方法是使用另外一种方法是 insert into table(...) (select ... from dual) union all (select ... from dual)
Mybatis内置的ExecutorType一共有三种,默认为SIMPLE,该模式下它为每个语句的执行创建一个新的预处理语句,并单条提交sql。
而 BATCH 模式会重复使用已经预处理的语句,并且批量执行所有更新语句,显然batch性能将更优;
注意 : batch模式也有自己的问题,比如在Insert作时,在事务没有提交之前,是没有办法获取到自增的id,这在某型情形下是不符合业务要求的。
具体用法如下:
ProductMapper.ja 如下:
mapper.xml 如下:
mybatis怎么批量插入数据库
对于支持自动生成主键的数据库(如SQL Server),可以采用以下方式:
对于不支持自动生成主键(如Oracle),可以采用以下方式:
mybatis批量作,怎么实现
方法一:
resultType="ja.lang.String"> SELECT CURRENT_TIMESTAMP()
insert into kangaiduoyaodian ( depart1, depart2, product_name,
generic_name, img, product_specification, unit,
approval_certificate, manufacturer, marketPrice, vipPrice,
website, fetch_time, productdesc ) values
separator=","> ( #{item.depart1}, #{item.depart2}, #{item.productName}, #{item.genericName}, #{item.img}, #{item.productSpecification}, #{item.unit}, #{item.approvalCertificate}, #{item.manufacturer}, #{item.marketprice}, #{item.vipprice}, #{item.website}, #{fetchTime}, #{item.productdesc} )
方法二:
insert into xxxxtable(hkgs,hkgsjsda,office,asdf,ddd,ffff,supfullName,classtype,agent_type,remark)
select #{item.hkgs,jdbcType=VARCHAR},
#{item.hkgsjsda,jdbcType=VARCHAR},
#{item.office,jdbcType=VARCHAR},
#{item.asdf,jdbcType=VARCHAR},
#{item.ddd,jdbcType=VARCHAR},
#{item.ffff,jdbcType=VARCHAR},
#{item.supfullName,jdbcType=VARCHAR},0,0,
#{item.remark,jdbcType=VARCHAR} from dual
可以考虑用union all来实现批量插入。
例如:
insert into XX_TABLE(XX,XX,XX)select 'xx','xx','xx' union all select 'xx','xx','xx' union all select 'xx','xx','xx' ...
先拼装好语句再动态传入insert into XX_TABLE(XX,XX,XX)后面部分
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至836084111@qq.com 举报,一经查实,本站将立刻删除。