日期:2014-05-16 浏览次数:20468 次
public class Test1 { /** * 使用iBatis进行批量操作 * @param args */ public static void main(String[] args) throws Exception{ // iBatis处理 Reader reader = Resources.getResourceAsReader("SqlMapConfig.xml"); SqlMapClient sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader); reader.close(); // 生成对象 List<User> list = new ArrayList<User>(); for (int i = 1; i <= 100; i++) { User u = new User(); u.setName("user" + i); u.setAge(10 + i); u.setSex("m"); list.add(u); } // 批量操作,每次保存20条记录,并使用事务 long t1 = System.currentTimeMillis(); for (int i = 1; i <= list.size(); i++) { if (i % 20 == 0) { updateBatch(sqlMapClient, list.subList(i - 20, i), i / 20); } } long t2 = System.currentTimeMillis(); // 计算操作用时,可以将事务去掉进行比较 System.out.println(t2 - t1); } /** * @Description: 使用iBatis进行批量操作,并且使用事务 * 此方法前两个事务操作正常结束;第三个事务操作到一半时会抛出异常,检测事务是否回滚 * * @param sqlMapClient * @param users 要保存到数据库的用户集合 * @param count 方法的执行次数 * @throws Exception 异常,让方法第三次执行且操作第十条数据时抛出异常 */ private static void updateBatch(SqlMapClient sqlMapClient, List<User> users, int count) throws Exception { try{ // 事务开始 sqlMapClient.startTransaction(); // 批量操作开始 sqlMapClient.startBatch(); for (int i = 0; i < users.size(); i++) { // 抛出异常 if (count == 3 && i == 10) throw new RuntimeException(); // 保存数据 sqlMapClient.insert("saveUser", users.get(i)); } // 批量操作执行 sqlMapClient.executeBatch(); // 事务提交 sqlMapClient.commitTransaction(); } catch (Exception e) { throw e; } finally { try { // 事务结束 sqlMapClient.endTransaction(); } catch (SQLException e) { e.printStackTrace(); } } } }