您的位置:首页 > 其它

mybatis以map的方式批量插入list集合数据操作步骤

2017-07-27 18:28 791 查看
介绍:因为项目框架的存在未知的版本号org错误,导致使用mybatis自带的常规以list集合和array数组的形式批量插入不可行,因此解决办法是:自行创建map以"list"为map的键,要批量输入的list对象为值,再调用mybaits的getSqlSession().insert()方法即可.

1,首先创建抽象类AbstracTestDao继承SqlSessionDaoSupport

import javax.annotation.Resource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.support.SqlSessionDaoSupport;

public abstract class AbstractTestDao extends SqlSessionDaoSupport{

@Resource
public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory){
super.setSqlSessionFactory(sqlSessionFactory);
}

}


2,创建接口方法

public interface TestDaos {

//@Param("list")
void ib(List<TmCisCustIdx> clist);
}


3,创建接口的实现类

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Repository;

import com.allinfinance.cis.dao.impl.AbstractTestDao;
import com.allinfinance.cis.infrastructure.TmCisCustIdx;
import com.allinfinance.cis.zm.dao.TestDaos;

@Repository("testDao")
public class TestDao extends AbstractTestDao implements TestDaos{

public void ib(List<TmCisCustIdx> clist){
Map<String,List<TmCisCustIdx>> map = new HashMap<String,List<TmCisCustIdx>>();
map.put("list",clist);//将传来的list参数放进map中,因为mybits的批量mapping文件中的for循环的collection的值key固定为"list",所以map的key也为list,如果参数是数组,key则为"array"
getSqlSession().insert("com.allinfinance.cis.infrastructure.mapping.TmCisCustIdxMapper.insertBatch",map);//mapper文件对应的id方法
}

}


4,mapping文件的id方法

<insert id="insertBatch" parameterType="java.util.Map">
insert into TM_CIS_CUST_IDX ( ORG,CUST_ID,BIZ_ORG_CODE,ID_TYPE,ID_NO,CREATE_DATE,CREATE_BY,UPDATE_DATE,UPDATE_BY,JPA_VERSION )
values
<foreach collection="list" item="item" index="index" open="(" close=")" separator="union all">
select #{item.org,jdbcType=VARCHAR } ,#{item.custId,jdbcType=VARCHAR } , #{item.bizOrgCode,jdbcType=VARCHAR } ,
#{item.idType,jdbcType=VARCHAR } , #{item.idNo,jdbcType=VARCHAR } , #{item.createDate,jdbcType=TIMESTAMP } ,
#{item.createBy,jdbcType=VARCHAR } ,#{item.updateDate,jdbcType=TIMESTAMP } ,
#{item.updateBy,jdbcType=VARCHAR } , #{item.jpaVersion,jdbcType=INTEGER }from dual
</foreach>
</insert>


5,Junit测试类

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring-context.xml")
public class TestTest{

@Autowired
private TmCisCustIdxDao tmCisCustIdxDao;
@Autowired
private TestDaos testDao;

@Before
public void setUp() throws Exception {
}

@Test
public void test() {
TmCisCustIdx tmCisCustIdx = new TmCisCustIdx();
String custId = UUID.randomUUID().toString();
Date date = new Date();
tmCisCustIdx.setCustId(custId);
tmCisCustIdx.setOrg("01");
tmCisCustIdx.setBizOrgCode("TLJR");
tmCisCustIdx.setIdNo("6200000CP");
tmCisCustIdx.setIdType("I");
tmCisCustIdx.setCreateBy("admin");
tmCisCustIdx.setCreateDate(date);
tmCisCustIdx.setUpdateBy("admin");
tmCisCustIdx.setUpdateDate(date);
tmCisCustIdx.setJpaVersion(0);
List<TmCisCustIdx> clist = new ArrayList<TmCisCustIdx>();
clist.add(tmCisCustIdx);
testDao.ib(clist);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: