jfinal 简单批量保存实现

最近要使用excel导入数据,在保存的时候,发现还是有保存瓶颈的.

简单查了下,发现jfinal是自带有批量保存的.所以基于项目实际情况做了简单的二次封装,喜欢就做参考.直接上代码:

200是可变的,即可以根据项目的需求设置为500,1000or其他.有问题可及时沟通.

/**
     * 批量保存
     * 
     * @param modelList
     */
    public void batchSave(List modelList) {
        // 判断list的大小,如果大于200条,则size/200分批次保存
        int size = modelList.size();
        if (200 >= size) {
            Db.batchSave(modelList, size);
            return;
        }
        int serial = size / 200;
        for (int i = 0; i < serial; i++) {
            Db.batchSave(modelList.subList(i * 200, i * 200 + 200), 200);
        }
        int remain = size - serial * 200;
        Db.batchSave(modelList.subList(serial * 200, size), remain);
    }
}

转载于:https://my.oschina.net/dimmer/blog/752289

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NIO(Non-blocking I/O)是Java中的一种I/O模型,它可以实现非阻塞式的I/O操作。使用NIO实现文件批量上传可以提高文件上传的效率,下面是一个简单实现过程: 1. 创建ServerSocketChannel对象,并且绑定一个端口号。 2. 创建Selector对象,并且将ServerSocketChannel注册到Selector中,同时设置为非阻塞模式。 3. 在循环中,使用Selector的select()方法来监听事件。当有事件发生时,使用selectedKeys()方法来获取事件集合。 4. 对于每一个事件,判断其类型。如果是连接事件,就创建一个SocketChannel对象,并将其注册到Selector中,同时设置为非阻塞模式。如果是读事件,就从SocketChannel中读取数据,并将其保存到文件中。 5. 在客户端中,创建SocketChannel对象,并连接到服务器。然后将文件分成多个块,每个块都创建一个ByteBuffer对象,并将其写入SocketChannel中。 下面是一个简单的NIO文件上传的示例代码: ``` public class NIOFileUploadServer { private static final int PORT = 8888; private static final int BUFFER_SIZE = 1024; private static final String UPLOAD_DIR = "D:\\upload\\"; public static void main(String[] args) throws IOException { ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); serverSocketChannel.socket().bind(new InetSocketAddress(PORT)); serverSocketChannel.configureBlocking(false); Selector selector = Selector.open(); serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT); while (true) { int readyChannels = selector.select(); if (readyChannels == 0) { continue; } Set<SelectionKey> selectedKeys = selector.selectedKeys(); Iterator<SelectionKey> keyIterator = selectedKeys.iterator(); while (keyIterator.hasNext()) { SelectionKey key = keyIterator.next(); keyIterator.remove(); if (key.isAcceptable()) { ServerSocketChannel serverChannel = (ServerSocketChannel) key.channel(); SocketChannel socketChannel = serverChannel.accept(); socketChannel.configureBlocking(false); socketChannel.register(selector, SelectionKey.OP_READ); } else if (key.isReadable()) { SocketChannel socketChannel = (SocketChannel) key.channel(); ByteBuffer buffer = ByteBuffer.allocate(BUFFER_SIZE); FileChannel fileChannel = new FileOutputStream(UPLOAD_DIR + "test.txt").getChannel(); while (socketChannel.read(buffer) > 0) { buffer.flip(); fileChannel.write(buffer); buffer.clear(); } fileChannel.close(); socketChannel.close(); } } } } } ``` 客户端代码: ``` public class NIOFileUploadClient { private static final String SERVER_IP = "localhost"; private static final int SERVER_PORT = 8888; private static final int BUFFER_SIZE = 1024; private static final String FILE_PATH = "D:\\test.txt"; public static void main(String[] args) throws IOException { SocketChannel socketChannel = SocketChannel.open(); socketChannel.connect(new InetSocketAddress(SERVER_IP, SERVER_PORT)); socketChannel.configureBlocking(false); FileChannel fileChannel = new FileInputStream(FILE_PATH).getChannel(); ByteBuffer buffer = ByteBuffer.allocate(BUFFER_SIZE); while (fileChannel.read(buffer) > 0) { buffer.flip(); socketChannel.write(buffer); buffer.clear(); } fileChannel.close(); socketChannel.close(); } } ``` 需要注意的是,上述代码仅为示例,实际使用时需要添加必要的异常处理和错误处理。同时,文件上传时需要对文件进行分块,以免一次性上传过大的文件导致服务器负载过高。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值