mybatis报错

提问 已结
21 210
波神
波神 2018-11-2
悬赏:20飞吻
回帖
  • 我懂你的意思, 这个代码可以再业务代码里面做默认值处理
    0 回复
  • 波神
    2018-11-2
    0 回复
  • 波神
    2018-11-2
    感觉没啥问题, navicat上也可以执行~
    0 回复
  • 更换成空格试试
    0 回复
  • 波神
    2018-11-2
    0 回复
  • 错误全部弄出来
    0 回复
  • 波神
    2018-11-2
    @寒江独钓 空格是肯定不行的 不过您居然能看懂我这个意思,佩服。先谢过大佬~
    0 回复
  • 批量插入也不应该这样写啊!
    0 回复
  • 波神
    2018-11-2
    @寒江独钓 我需要配合数据库的默认值,所以每一条数据都要判断一下有没有空字段 报错就是简单的sql报错
    0 回复
  • 只要mysql 支持 insert into t_name values(a, b, c) insert into t_name values(a, b, c) 如果不支持就没辙, navicat支持的条件是sql中间得用分号隔开, navicat才好对sql进行切分, 按照两条sql执行
    0 回复
  • 波神
    2018-11-2
    @寒江独钓 mybatis不会把我的sql用分号分割? 明白了 也就是说无解了
    0 回复
  • 波神
    2018-11-2
    @寒江独钓 明白你为啥让我用空格了
    0 回复
  • 不会的, 他会当前一条sql去执行的, 相当于执行的sql中包含的分号, 这肯定是不可以的, navicat用分号进行分割, 变成两个sql, 在同一个事物中分开执行(相当于把分号去除了)
    0 回复
  • 波神
    2018-11-2
    @寒江独钓 如果我在service层循环调用mapper的单条insert方法会不会爆炸? 大概存5W至10W条数据[酷]
    0 回复
  • 不会炸, 但是数据库的性能贼差, 可以考虑分批进行批量插入, 比如每次一次性插入1000条(根据服务器性能决定), 不要逐条插入
    0 回复
  • 波神
    2018-11-2
    @寒江独钓 我和您说一下我的需求
    数据库中有表table 三个字段 'a', 'b', 'c'
    c字段有默认值
    obj1.setA('a') obj1.setB('b')
    obj2.setA('a')
    list.add(obj1 obj2)
    然后mapper.insert这个list


    大概就这样子
    0 回复
  • 波神
    2018-11-2
    @寒江独钓 嗯 这个是知道的 我就准备分1000条插入 但是现在这个情况好像是不能批量插入了~
    0 回复
  • 有默认值的话, 你的业务代码不用管啊!如果插入的值为空, 数据库自己会设置成默认值 name varchar(100) default '小明'
    0 回复
  • 波神
    2018-11-2
    @寒江独钓 需要用insertSelective中的if判断的形式,所以sql才写成这样子的
    0 回复
  • 波神
    2018-11-2
    @寒江独钓 他会插入空值 默认值不生效了 因为我在insert的参数里写了这个字段
    0 回复
  • 波神
    2018-11-2
    @寒江独钓 好的 懂了。不过我们的业务比较复杂,有一些表基本上每个字段都有默认值,之前用的hibernate没问题,现在换了mybatis,问题暴露出来了。还是谢谢您[爱你]
    0 回复