mybatis批量插入


针对上一篇的bootstarp table 页面最后提交表格所有数据到后台,统一保存到后台批量插入。
bootstrap table 页面的增删改,不通过后台。http://blog.csdn.net/orangetop/article/details/76532707

下面是mybatis的批量插入:

java后台

@Controller
@RequestMapping("/assets")
public class AssetsController {

    @Resource
    private BizAssetsService assetsService;

    @RequestMapping(value = "/insert")
    @ResponseBody
    public void insertBizAssetsList(HttpServletRequest request, HttpServletResponse response){

String data = request.getParameter("mydata");   //获取表格中的数据mydata是传递过来data的name
List dataList =  JSONObject.parseArray(data.toString(),BizAssets.class);   //把json转为list数组,类型是自己定义的bean

assetsService.insertBizAssetsList(dataList);   //批量插入方法
}
}

Dao:

public interface IAssetsDao {
    
    /**
     * 批量插入
     */
    int insertBizAssetsList(List list);

}

service:

@Service
public class BizAssetsService {
    
    @Autowired
    private IAssetsDao assetsDao;

   public int insertBizAssetsList(List assetsList){
        return assetsDao.insertBizAssetsList(assetsList);
    }

}

java bean:

public class BizAssets {

    private String assetsType;


    private BigDecimal assetsAmt;

    private Integer coefficient;

    private BigDecimal valueAmt;

   //  get set方法略
 }


mapper.xml的配置




    
 
          
              SELECT LAST_INSERT_ID()
          

        insert into biz_assets (REC_UID, CREDIT_RATING_ID, ASSETS_TYPE, ASSETS_AMT,
            COEFFICIENT, VALUE_AMT, STATUS, CREATE_USER, CREATE_TIME)
        values
        
         ( #{item.assetsType,jdbcType=VARCHAR},
          #{item.assetsAmt,jdbcType=DECIMAL}, #{item.coefficient,jdbcType=INTEGER}, #{item.valueAmt,jdbcType=DECIMAL}
          )
        

    


到此代码已经结束,下面说下自己在使用mybatis过程遇到的坑吧!

首先刚开始,直接insert,数据,搞了好久都没有成功一直报错,后来看了 一下,加入

 
              SELECT LAST_INSERT_ID()
 

总算可以了。解释下:

SelectKey在Mybatis中是为了解决Insert数据时不支持主键自动生成的问题,他它可以很随意的设置生成主键的方式。

resultType:结果的类型。MyBatis 通常可以算出来,但是写上也没有问题。MyBatis 允许任何简单类型用作主键的类型,包括字符串。

keyProperty:selectKey 语句结果应该被设置的目标属性。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。

order:这可以被设置为 BEFORE 或 AFTER。如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素 - 这和像 Oracle 的数据库相似,在插入语句内部可能有嵌入索引调用。

还有我写的数据库原来为空的,如何数据库已经有值,你在新增的时候,新增了已经存在的主键di,mybatis会报错,要么你避免插入已经存在的数据,要么在插入之前进行判断数据是否存在,我是直接加入了ignore .用法-在into 前加ignore例如:insert ignore into biz_assets(,,,,)values(?,?,?,?)

加入ignore, 插入重复的数据不报错也不插入。


下面对顺便对foreach标签解释下:

foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。

foreach元素的属性主要有 item,index,collection,open,separator,close。

item表示集合中每一个元素进行迭代时的别名,
index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,
open表示该语句以什么开始,与colse一起使用,
separator表示在每次进行迭代之间以什么符号作为分隔 符,
close表示以什么结束,与open一起使用。

当传入的参数不一样collection属性也不一样,具体可以参看http://www.cnblogs.com/fangyu19900812/p/6046209.html

你可能感兴趣的:(java,mybatis,数据库,springmvc)