前序
java后端開發,因為現在主流的模式是前后端分離開發的模式,所以后端開發人員的工作除了邏輯上的功能實現之外最終的操作都是對數據庫的增刪改查,在公司中往往需要向數據庫中批量的插入數據,我們已經擁有了文本式的數據那么怎么將它插入到數據庫中呢?
自定義工具類:
我們自己定義一個工具類,這個工具類的主要功能是讀取文本文檔txt文件中的數據(前提是每一行是一個對象,並且以空格將屬性分開)讀取出來封裝成一個個對象,講對象存儲到集合當中,然后工具類將這個集合返回.
工具類代碼如下:
public class BankUtil { public static List<BankValue> readTxtFile(String filePath, List<BankValue> list){ try { // String encoding="GBK"; File file=new File(filePath); if(file.isFile() && file.exists()){ //判斷文件是否存在 InputStreamReader read = new InputStreamReader( new FileInputStream(file));//考慮到編碼格式 BufferedReader bufferedReader = new BufferedReader(read); String lineTxt = null; while((lineTxt = bufferedReader.readLine()) != null){ BankValue bankValue=new BankValue(); // BankCode bankCode = new BankCode(); String [] arr = lineTxt.split("\\s+"); bankValue.setBankName(arr[0]); bankValue.setBankValue(arr[1]); // bankCode.setBankCode(arr[0]); // bankCode.setBankName(arr[1]); list.add(bankValue); // System.out.println(lineTxt); } read.close(); }else{ System.out.println("找不到指定的文件"); } } catch (Exception e) { System.out.println("讀取文件內容出錯"); e.printStackTrace(); } return list; } }
批量插入
實體類對應的接口如下:
public interface BankValueMapper { int insert(List<BankValue> list); }
在對應的映射配置文件中的批量插入的代碼如下:
<insert id="insert" parameterType="list"> insert into tb_bank_value (bank_name, bank_value) values <foreach collection="list" item="item" index="index" separator=","> ( #{item.bankName}, #{item.bankValue} ) </foreach> </insert>
測試代碼如下:
@Test public void testBankCode(){ String filePath = "C:\\Users\\ZYH\\Desktop\\bankvalue.txt"; // "res/"; List<BankValue> list=new ArrayList<>(); List<BankValue> BankValueList = BankUtil.readTxtFile(filePath, list); int i = bankValueMapper.insert(BankValueList); System.out.println(i); }