数据库批量插入(最常规,最有效的方式)

1.在bean层中定义一个实体类,用于和数据库的字段相对应。

package com.lanou3g.mybatis.bean;
public class Country {
    private Integer id;
    private String name;
    private String capital;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name == null ? null : name.trim();
    }
    public String getCapital() {
        return capital;
    }
    public void setCapital(String capital) {
        this.capital = capital == null ? null : capital.trim();
    }
}

2.在dao层定义一个接口,接口里定义一个方法:
int batchInsertByNormalch(List countryList);
方法的参数是一个存放Country对象的List集合。

3.在mapper的xml配置文件中进行以下操作:




<mapper namespace="com.lanou3g.mybatis.dao.CountryMapper">

  <resultMap id="BaseResultMap" type="com.lanou3g.mybatis.bean.Country">
    <id column="id" property="id" />
    <result column="name" property="name" />
    <result column="capital" property="capital" />
  resultMap>


  
	
  <insert id="batchInsertByNormalch" parameterType="com.lanou3g.mybatis.bean.Country">
    insert into country (name,capital) values
        <foreach collection="list" item="country" separator="," close=";">
            (#{country.name},#{country.capital})
        foreach>
  insert>
mapper>

4.在mybatisConfig根配置文件中将CountryMapper.xml注册进配置文件中。

 	<mappers> 
        <mapper resource="mapper/CountryMapper.xml"/>
    </mappers>

5.数据库有相应的字段,需要将数据插入到数据库中。并在最后调用.

	public class AppTest {   
    CountryMapper countryMapper = null;
    //首先定义一个数组,里面存放每一个Country对象,因为批量插入的是一个list数组。
    List<Country> testCountry = new ArrayList<>();
    //然后需要制造一些数据,让国家和首都都能从数组里随机抽取,并匹配相对应的首都:
    String[] countryArr = new String[]{"日本", "埃及", "朝鲜", "俄罗斯", "伊朗",};
    String[] capitalArr = new String[]{"东京", "开罗", "平壤", "莫斯科", "德黑兰"};
    
    @Before
    public void setUp() {
    //实例化countryMapper对象(官方推荐使用自己封装的工具类,里面封装了Mybatis的初始化操作,再生成接口的或实体类的对象只需用工具类的类名即可),参数是Dao层的接口或实现类
    countryMapper = MyBatisTools.getInstance().openSession().getMapper(CountryMapper.class);
	//从数组中随机将信放到对象中,再将对象存放到list数组中
   	    Random random = new Random();
        for (int i = 0; i < 20; i++) {
            Country country = new Country();
            int idx1 = random.nextInt(countryArr.length);
            country.setId(i+7);
            country.setName(countryArr[idx1]);
            country.setCapital(capitalArr[idx1]);
            testCountry.add(country);
        }
    }
    /**
     * 常规批量插入。(通过foreach,生成很长的SQL)
     */
	//调用接口中的testBatchInsertByNormal方法,最终数据库信息如下:
    @Test
    public void testBatchInsertByNormal() {
        long start = System.currentTimeMillis();
       // int rows = teacherDao.batchInsertByNormal(testData);
        int rows = countryMapper.batchInsertByNormalch(testCountry);
        log.info("插入数据行数: " + rows+", 耗时: " + (System.currentTimeMillis() - start));
    }
}
    

数据库批量插入(最常规,最有效的方式)_第1张图片

你可能感兴趣的:(Mybatis)