java 批量添加、批量更新 操作數據庫


(1)三種插入操作的方法

1.1 利用for循環的批量插入

示例xml

    <insert id="insertUser"> insert into test_user (u_name,create_date) value (#{userName},SYSDATE()) </insert>

示例代碼:

for (int i = 1; i <= num; i++) { User user = new User(); user.setUserName("a" + i); user.setCreateDate(new Date()); userDao.insertUser(user); }

1.2 采用jdbc

示例代碼:

        Connection conn; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://192.168.0.200:3306/xxx", "root", "root"); conn.setAutoCommit(false); String sql = "insert into test_user (u_name,create_date) value (?,SYSDATE())"; PreparedStatement prest = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY); conn.setAutoCommit(false); for (int i = 1; i <= 100; i++) { prest.setString(1, "a" + i); prest.addBatch(); } prest.executeBatch(); conn.commit(); conn.close(); } catch (Exception ex) { ex.printStackTrace(); }

1.3 采用mybatis的批量插入方法

其實也是根據一個list 拼接成一個sql 
示例xml

    <insert id="batchInsertList"> insert into test_user(u_name,create_date) values <foreach item="item" index="index" collection="userList" separator=","> (#{item.userName},SYSDATE()) </foreach> </insert>

示例代碼

        List<User> userList = new ArrayList<User>(); for (int i = 1; i <= num; i++) { User user = new User(); user.setUserName("a" + i); user.setCreateDate(new Date()); userList.add(user); } userDao.batchInsertList(userList);

(2)三種批量更新的方法

2.1 利用for循環批量更新

示例xml

    <update id="updateUser">
        update test_user set test_user.u_name = (#{updateUserName}) where test_user.u_name = (#{userName}) </update>

示例代碼

        for (int i = 1; i <= num; i++) { User user = new User(); user.setUserName("a" + i); user.setUpdateUserName("b" + i); userDao.updateUser(user); }

2.2 jdbc 批量更新

示例代碼

Connection conn; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql://192.168.0.200:3306/xxx", "root", "root"); conn.setAutoCommit(false); // 保存當前自動提交模式 boolean autoCommit = conn.getAutoCommit(); // 關閉自動提交 conn.setAutoCommit(false); Statement stmt =conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); for (int i = 1; i <= num; i++) { stmt.addBatch("update test_user set test_user.u_name = ('d"+i+"') where test_user.u_name = ('c"+i+"')"); } stmt.executeBatch(); conn.commit(); conn.close(); } catch (Exception ex) { ex.printStackTrace(); }

2.3 mybatis 批量更新

其實是利用了mysql的批量更新的語法 
case when的語法 
詳見 【case when 語法】 
示例xml

    <update id="batchUpdateList"> update test_user <trim prefix="set" suffixOverrides=","> <trim prefix="u_name =case" suffix="end,"> <foreach item="item" collection="userList"> when test_user.u_name = (#{item.userName}) then #{item.updateUserName} </foreach> </trim> </trim> where <foreach item="item" collection="userList" separator="or"> (test_user.u_name = (#{item.userName})) </foreach> </update>

示例代碼

        for (int i = 1; i <= num; i++) { User user = new User(); user.setUserName("a" + i); user.setUpdateUserName("b" + i); userList.add(user); } userDao.batchUpdateList(userList);
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM