精华内容
下载资源
问答
  • java批量插入方法代码和一些注释
  • java数据批量插入问题

    2021-05-11 09:55:58
    批量插入问题: 用sql进行循环 Mapper.xml文件 <insert id="insertBatch" parameterType="java.util.List"> INSERT INTO menu (`menu_name`, `menu_belong_sys_id`, `menu_url`, `menu_parent_id`,`menu_...
    • 批量插入问题:
    1. 用sql进行循环
    • Mapper.xml文件
    <insert id="insertBatch" parameterType="java.util.List">
    INSERT INTO menu (`menu_name`, `menu_belong_sys_id`, `menu_url`,
    `menu_parent_id`,`menu_child_id`,`create_time`,`create_staff_id`,`create_dept`,`modify_time`,
    `delete_flag`,`remarks`,`check_status`,`ext1`,`ext2`,`ext3`)
    VALUES
        <foreach collection="list" item="item" separator=",">
    (#{item.menuName}, #{item.menuBelongSysId}, #{item.menuUrl},#{item.menuParentId},
    #{item.menuChildId},#{item.createTime},#{item.createStaffId},#{item.createDept},
    #{item.modifyTime},#{item.deleteFlag},#{item.remarks},#{item.checkStatus},#{item.ext1},#{item.ext2},#{item.ext3})
        </foreach>
    </insert>

     

    注意:在不要加分号,数值要用item。

                                                                                                                                                                     

    • Mapper.java文件
    Integer insertBatch(List<Menu> list);
    
    

     

    1. 批量插入数据时,一个出错,全部回滚
    • Springboot在service层的实现类@override下面加注释
    @Transactional(rollbackFor = Exception.class)
    

     

     

    展开全文
  • //非批处理,插入100条数据所花费的时间 long start = System.currentTimeMillis(); for ( int i = 0 ; i 100 ; i++) create(i); long end = System.currentTimeMillis(); System.out.println( ...

    原文转载自:http://blog.csdn.net/wang379275614/article/details/26294569

    一、使用批处理

    批处理,可以大幅度提升大量增、删、改的速度,就是对大数据操作有很大的效率提升。
      与上篇文章中提到的“连接池”相似。其实就是先将多次操作(增删改)打包,然后再一次发送执行
      主要用到两个方法:
       Ø 打包:PreparedStatement.addBatch();
       Ø 发送、执行:PreparedStatement.executeBatch();
       Ø 关闭自动提交、提交:conn.setAutoCommit(false)、conn.commit();

    二、正确关闭JDBC连接的顺序

    直接关闭Connection
    在一般的处理中,直接关闭connection没有问题,但必须保证是这里的关闭是真正的《关闭》

    但在使用连接池运用中,关闭connection并不意味着真正的关闭了connection,而是将connection返回到池中,并没有关闭。在这种情况下,你的prepsttment和resulset都没有被关闭。

    这样就不行了。
    正确顺序是:

    • 打开时:Connection -> PreparedStatement -> ResultSet
    • 关闭时:ResultSet-> PreparedStatement -> Connection

    三、代码

    package com;
    
    import java.sql.Connection;  
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;  
    import java.sql.ResultSet;  
    import java.sql.SQLException;  
    import java.sql.Statement;  
    /** 
     * @author-zhipeng 
     * 
     * 对比批处理与非批处理的差别(本例的循环所在位置) 
     */  
    public class BatchTest {  
    
        /** 
         * 对比“批处理”与“非批处理”的执行效率 
         */  
        public static void main(String[] args) throws SQLException {  
            //非批处理,插入100条数据所花费的时间  
            long start = System.currentTimeMillis();  
           for (int i = 0; i < 100; i++)  
                create(i);  
            long end = System.currentTimeMillis();  
            System.out.println("create:" + (end - start));  
            //批处理,插入100条数据所花费的时间  
           start = System.currentTimeMillis();  
            createBatch();  
            end = System.currentTimeMillis();  
            System.out.println("createBatch:" + (end - start)); 
        }  
        /** 
         * 非批处理-插入1条数据 
         */  
        static void create(int i) throws SQLException {  
            Connection conn = null;  
            PreparedStatement ps = null;  
            ResultSet rs = null;  
    
            try {  
                //JdbcUtils为自定义的操作类,这里不多介绍  
                String a = "jdbc:sqlite://e:/work/soft/sqlite-dll-win64-x64-3200100/test.db";
                conn = DriverManager.getConnection(a);  
                String sql = "insert into person values("+i+", 'leo')";  
                ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);  
                //执行插入  
                ps.executeUpdate();  
            } finally {  
                //释放资源  
                conn.close();
    
            }  
        }  
        /** 
         * 批处理-插入100条数据 
         */  
        static void createBatch() throws SQLException { 
            Connection conn = null;  
            PreparedStatement ps = null;  
            ResultSet rs = null;  
            try {  
                String a = "jdbc:sqlite://e:/work/soft/sqlite-dll-win64-x64-3200100/test.db";
                conn = DriverManager.getConnection(a);    
                conn.setAutoCommit(false);  
                String sql = "insert into person values(?, ?)";  
                ps = conn.prepareStatement(sql);  
                //注意批处理与“非批处理”循环放的位置  
                for (int i = 0; i < 100; i++) {  
    
                    ps.setInt(1, i);
                    ps.setString(2, "meimei");  
                    //关键方法1:打包  
                    ps.addBatch();  
                }  
                int[] is = ps.executeBatch();  
                ps.close();
                conn.commit();
                //关键方法2:执行  
    
            } finally {  
                conn.close();
            }  
        }  
    }  

    另外还有第二种方法,据说效率更高
    地址:http://blog.csdn.net/fengkaungdewoniu/article/details/52740113

    展开全文
  • 今天小编就为大家分享一篇关于通过反射注解批量插入数据到DB的实现方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
  • 通过 mybatis 框架,实现 SQL 批量插入并返回每条数据的主键id。   2.山重水复 通过使用 MyBatis,在插入单条数据的时候有两种方式返回自增主键id: 对于支持生成自增主键的数据库:<insert> 标签属性...

    楔子:当然,世上有很多优秀的女性,我也会被她们吸引。这对男人来说是理所当然的。但目光被吸引和内心被吸引是截然不同的。- 东野圭吾《黎明之街》

    1.今日书签

    通过 mybatis 框架,实现 SQL 批量插入并返回每条数据的主键id。
     

    2.山重水复

    通过使用 MyBatis,在插入单条数据的时候有两种方式返回自增主键id:

    1. 对于支持生成自增主键的数据库:<insert> 标签属性增加 useGenerateKeys 和 keyProperty
    2. 对于不支持生成自增主键的数据库:在SQL语句中使用 <selectKey> 标签。

    案例详见链接:Java书签 #MyBatis返回插入/更新记录的id,及selectKey标签的巧用
     

    3.柳暗花明

    MyBatis 是支持批量插入时返回每条数据自增主键id的。需要注意有四点:

    1. 升级 MyBatis 依赖版本到 3.3.1 或以上。因为官方在这个版本中加入了批量新增返回主键id的功能。
    2. 要操作的表的主键id设置的是自增。
    3. 在 DAO interface 接口入参中不要乱用 @param 注解。如果使用,请先确保 @param 注解的参数名与 SQL 接收的参数名都为 list。否则,会出现异常:
      org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'list' not found. Available parameters are [couponCodeList, param1]
    4. Mapper.xml 中的批量插入SQL入参对象变量名一定要使用 list 变量名,<insert> 标签参数类型用 parameterType="java.util.List" 接收 DAO 接口中的参数集合。否则,会出现异常:
      org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'couponCodeList' not found. Available parameters are [collection, list]

    3.1.代码示例

    1)mybatis jar 包依赖

    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.3.1</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.2.0</version>
    </dependency>
    

    2)mapper xml 示例

    <insert id="saveBatch" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="couponId">
        INSERT INTO
            t_coupon (activity_id, coupon_code, use_status, create_user, create_time)
        VALUES
        <foreach collection="list" item="item" index="index" separator=",">
            (#{item.activityId}, #{item.couponCode}, 0, 'meiwei', NOW())
        </foreach>
    </insert>
    

    3)DAO 接口示例

    public interface TCouponMapper {
    
        int saveBatch(List<TCoupon> couponCodeList);
    }
    

    这里的 keyProperty="couponId" 对应的是取插入表的自增id字段,入参对象定义的自增id字段名须与其保持严格一致。示例代码入参对象这里使用的自增id是别名 couponId,所以 keyProperty 的返回字段严格保持一致,也为 couponId。
     
    一般情况下,入参对象的主键属性定义为 id,使用 keyProperty="id" 即可。
     

    3.2.单元测试

    批量插入数据前,每条数据自增id为空:

    在这里插入图片描述

    批量插入数据后,每条数据自增id已经通过入参对象列表返回:

    在这里插入图片描述

    展开全文
  • java批量添加注解到所有业务接口

    千次阅读 2018-06-06 17:15:15
    背景:已经完成或者持续更新的一个项目,已经有上千个业务接口,需要在这上千个业务接口上添加一个我自定义的注解...import java.io.*; /** * 在文件指定位置添加注解 * @author Administrator * */ public cl...

    背景:

    已经完成或者持续更新的一个项目,已经有上千个业务接口,需要在这上千个业务接口上添加一个我自定义的注解,不可能一个一个添加呀!!!

    所以应该批量吧:批量操作使用缓存流

    package com.dakun.jianzhong.config;
    
    import java.io.*;
    
    /**
     * 在文件指定位置添加注解
     * @author Administrator
     *
     */
    public class ContentReplace {
        private static  int i=0;
        public static void main(String[] args) {
            //File file = new File("D:\\Program Files\\project\\IdeaProjects\\social-service\\src\\main\\java\\com\\dakun\\jianzhong\\controller");
            //File file = new File("D:\\Program Files\\project\\IdeaProjects\\resource-service\\src\\main\\java\\com\\dakun\\jianzhong\\controller");
            //File file = new File("D:\\Program Files\\project\\IdeaProjects\\product-service\\src\\main\\java\\com\\dakun\\jianzhong\\controller");
            File file = new File("D:\\Program Files\\project\\IdeaProjects\\account-service\\src\\main\\java\\com\\dakun\\jianzhong\\controller");
            list(file);
            System.out.println("总修改:"+i+"处。");
        }
    
        private static void list(File file){
            File[] listFiles = file.listFiles();
            for (File file2 : listFiles) {
                if (file2.isFile()) {
              
                    try {
                        StringBuffer sb = new StringBuffer();
                        BufferedReader br = new BufferedReader(new FileReader(file2));
                        String s="";
                        boolean change=false;
                        while ((s=br.readLine())!=null) {
                            if (s.indexOf("@PostMapping")>-1||s.indexOf("@GetMapping")>-1||s.indexOf("@RequestMapping")>-1) {
                                sb.append(s);
                                sb.append("\r\n");
                                change=true;
                                sb.append("    @IsPublic");
                                i++;
                            }else {
                                sb.append(s);
                            }
                            sb.append("\r\n");
                        }
                        br.close();
                        if (change) {
                            BufferedWriter bw = new BufferedWriter(new FileWriter(file2));
                            bw.write(sb.toString());
                            bw.close();
                            System.out.println(++i);
                        }
    
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }else {
                    list(file2);
                }
            }
        }
    }

    最终修改1285处,在1000个左右的接口上成功添加了自定义的注解。

    参考学习:http://www.aichengxu.com/java/2863530.htm


    展开全文
  • java mysql数据库实现批量插入

    千次阅读 2019-04-28 10:45:16
    * 批量插入 * * @param tableName * @param datas * @return */ public boolean insertBatch(String tableName, List<Map<String, Object>> datas) { PreparedStatement prepared = null; Connection co...
  • java 多线程批量插入数据 带返回值

    千次阅读 2019-12-17 19:11:28
    之前写过一篇文章是关于多线程如何操作数据库,且控制事务的全局回滚,今天继续上一次进行扩展,上一次主要是针对单个线程操作没有返回值,而有时候我们希望进行多个线程批量操作数据库的同时,能返回每次成功插入到...
  • 借助mybatis 的provider实现一个比较通用的,批量插入数据接口。 Mapper接口 第一参数为需要批量插入的数据,第二个参数为对应实体类的class public interface BaseDao<T> { @InsertProvider(type = ...
  • 使用POI批量添加图片到word前言效果图第一步 添加依赖新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中...
  • 自定义版mybatis-generator代码生成插件mybatis-generator代码生成插件,实体中文注释,能生成批量插入和批量修改,一对多,多对多
  • 本文给大家介绍Oracle+Mybatis的foreach insert批量插入报错的快速解决办法,非常不错,具有参考借鉴价值,感兴趣的朋友参考下吧
  • 我们在写Mapper的时候,经常会通过注解的方式来写SQL语句,像下面这样。这要求我们传递的参数为一个具体的对象。 @Insert("INSERT INTO student (name, sex, addr) VALUES (#{name}, #{sex}, #{addr})"...
  • 分批次批量插入 假设我们的List<Person>集合一共有1200条数据。分批次,一次500条。 Person类只有三个字段:id,name,age。 1.在service层写java代码,进行分批 具体步骤写在了下面的代码里,注释也有。 //...
  • 一、应用情景介绍 在实际的项目开发过程中,常常遇到...我们通过查看 mybatis-plus 源码发现,mybatis-plus 的 IService API 接口提供了批量插入的接口: public interface IService<T> { ...... /** * 插入
  • MyBatis批量插入Update

    热门讨论 2013-03-05 16:13:59
    MyBatis批量插入,效率经测试,1000条数据,批量插入和单条插入,执行效率至少快一倍,送上源码,供参考学习
  • mybatis @Insert 注解批量插入数据库 bean:实体类 private Integer sysRoleFunctionId; private String operation; private Integer sysRoleId; Mapper @Insert( "<script>" + "insert into sys_role_...
  • mybatis用注解的方式批量插入数据

    千次阅读 2019-05-28 11:16:34
    批量插入的方式用两分钟左右,用时减少一半。插入一万条数据在12秒左右 CommodityController代码 package security.controller; import java.util.ArrayList; import java.util.Date; import java.uti...
  • 可以使用MyBatis的@InsertProvider注解 实现代码如下: @InsertProvider(type = CyQuestionDetailProvider.class, method = "batchInsertQuestionDetail") Integer batchInsertQuestionDetail(@Param("list...
  • mybatis 注解方式批量插入

    千次阅读 2017-08-09 21:19:20
    [java]   view plain   copy @Test   public   void  shouldHandleComplexNullItem() {  SqlSession sqlSession = sqlSessionFactory.openSession();  try  {   ...
  • 1. 批量插入 1.1 注解形式的批量插入(一) @Repository public interface UserMapper { public String tableName = "user"; public String columnNoId = "ages, pa...
  • 作者 | 王磊来源 | Java中文社群(ID:javacn666)转载请联系授权(微信ID:GG_Stone批量插入功能是我们日常工作中比较常见的业务功能之一,之前我也写过一篇关于《My...
  • Mybatis批量插入数据到数据库

    千次阅读 2019-06-28 19:49:20
    Mybatis批量插入数据到数据库 常规方式(foreach)批量插入 数据库里的Teacher表有如下字段:id,tname,age。 创建与数据库表对应的实体类Teacher.java package com.lanou3g.mybatis.bean; import lombok.Getter; ...
  • 1、升级Mybatis版本到3.3.1。官方在这个版本中加入了批量新增返回主键id的功能 2、在Dao中不能使用@param注解。...-- insertForeachWord 批量插入 --> <insert id="insertForeachWord" parameterType=".
  • 文章目录正常插入批量插入解决错误查询官方文档常见问题官方文档连接器官方文档高效写入数据官方文档最终结论修改后的代码       最近在使用涛思旗下tdengine数据库的时候,因为需求...
  • mapper批量插入

    千次阅读 2019-06-27 21:41:48
    1.常规方式的批量插入 sql语句 int bathNorm(List<Teacher> teacherList); <insert id="bathNorm" parameterType="Teacher"> insert into teacher (tname,age) values <foreach collection="li...
  • 在代码生成的过程标记唯一索引字段,统一抽象服务层插入和更新方法,对数据排序和拆分单次插入量 三、实现 基于统一抽象服务层解决思路 查询唯一索引字段 MYSQL: INNODB_SYS_INDEXES中记录表的索引 INNODB_SYS_...
  • SpringBoot MongoDB批量插入数据

    千次阅读 2019-03-19 12:05:57
    1.在实体User中添加Collection注解 ...2.UserDao中添加批量插入方法 List<User> insertCollection(List<User> userList) throws Exception; 3.UserDaoImpl中实现方法 @Override public Lis...
  • 坑还是有点,特别是加spring事务,还有就是删除文件不稳定,还有接收参数时一些注解会造成误导,有些注解也是不能用 的,请慎重,只做参考(上传TXT文件)。 1.准备: <!-- ...
  • 1.使用union all 来串连每个values,其中jdbcType的设置...insert id="saveList" parameterType="java.util.List"> INSERT INTO DDZHPT.CMS_SCHEDUAL_DETIAL ( DEPT_ID, SCHEDUAL_DATE, CMS_SCHEDUAL_T...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,012
精华内容 8,404
关键字:

java批量插入注解

java 订阅