zoukankan      html  css  js  c++  java
  • mybatis批量操作

    sad

    <?xml version="1.0" encoding="UTF-8" ?>  
    <!DOCTYPE mapper  
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
    <mapper namespace="com.mybatis.mappers.StudentMapper">  
        <!– 1,size:表示缓存cache中能容纳的最大元素数。默认是1024;   
             2,flushInterval:定义缓存刷新周期,以毫秒计;   
             3,eviction:定义缓存的移除机制;默认是LRU(least recently userd,最近最少使用),还有FIFO(first in   
                first out,先进先出)   
             4,readOnly:默认值是false,假如是true的话,缓存只能读。 —>  
        <cache size="1024" flushInterval="60000" eviction="LRU" readOnly="false" />  
        <resultMap type="Student" id="StudentResult">  
            <id property="id" column="id" />  
            <result property="name" column="name" />  
        </resultMap>  
        <delete id="batchDeleteStudentWithArray" parameterType="java.lang.String">  
            DELETE FROM t_student where id in  
            <foreach item="idItem" collection="array" open="(" separator=","  
                close=")">  
                #{idItem}  
            </foreach>  
        </delete>  
        <delete id="batchDeleteStudentWithIdList" parameterType="java.util.List">  
            DELETE FROM t_student where id in  
            <foreach collection="list" item="idItem" index="index" open="("  
                separator="," close=")">  
                #{idItem}  
            </foreach>  
        </delete>  
        <delete id="batchDeleteStudentWithListOnlyId" parameterType="java.util.List">  
            DELETE FROM t_student where id in  
            <foreach collection="list" index="index" item="item" open="("    
                separator="," close=")">    
                #{item.id}    
            </foreach>    
        </delete>  
        <!– 效率低,不推荐 –>  
        <delete id="batchDeleteStudentWithList" parameterType="java.util.List">  
            <foreach collection="list" item="item" index="index" open="" close="" separator=";">  
            DELETE  FROM t_student  
                where id=#{item.id}  
            </foreach>  
        </delete>  
        <update id="batchUpdateByIdList" parameterType="java.util.List">  
            UPDATE t_student set name=‘test’ where id in  
            <foreach collection="list" item="idItem" index="index" open="("  
                separator="," close=")">  
                #{idItem}  
            </foreach>  
        </update>  
        <update id="batchUpdateStudentWithList" parameterType="java.util.List">  
            <foreach collection="list" item="item" index="index" open="" close="" separator=";">  
            UPDATE t_student  
                <set>  
                    name=#{item.name}  
                </set>  
                where id=#{item.id}  
            </foreach>  
        </update>  
        <update id="batchUpdateStudentWithMap" parameterType="java.util.Map">  
            UPDATE t_student SET name = #{name} WHERE id IN  
            <foreach collection="idList" index="index" item="idItem" open="("  
                separator="," close=")">  
                #{idItem}  
            </foreach>  
        </update>  
        <insert id="batchInsertStudentWithList" parameterType="java.util.List">  
            INSERT INTO /*+append_values */ t_student (name)  
            VALUES  
            <foreach collection="list" item="item" index="index" separator=",">  
                (#{item.name})  
            </foreach>  
        </insert>  
    </mapper>    

    gfsh

    import java.util.List;  
    import java.util.Map;  
    import com.mybatis.model.Student;  
    public interface StudentMapper {  
        /** 
         * 通过List集合批量插入 
         * @param list 
         * @return 
         */  
        public int batchInsertStudentWithList(List<Student> list);  
        /** 
         * 通过IdList进行Update特定字段为特定值 
         * @param list 
         * @return 
         */  
        public int batchUpdateByIdList(List<Integer> list);  
        /** 
         * 通过Map批量更新 
         * @param map 
         * @return 
         */  
        public int batchUpdateStudentWithMap(Map<String, Object> map);  
        /** 
         * 通过List集合批量更新 
         * @param list 
         * @return 
         */  
        public int batchUpdateStudentWithList(List<Student> list);  
        /** 
         * 通过数组进行批量删除 
         * @param array 
         * @return 
         */  
        public int batchDeleteStudentWithArray(int array[]);  
        /** 
         * 能过IdList进行批量删除 
         * @param list 
         * @return 
         */  
        public int batchDeleteStudentWithIdList(List<Integer> list);  
        /** 
         * 通过list删除 
         * @param list 
         * @return 
         */  
        public int batchDeleteStudentWithList(List<Student> list);  
        /** 
         * 通过list中对象进行删除 
         * @param list 
         * @return 
         */  
        public int batchDeleteStudentWithListOnlyId(List<Student> list);  
    }   

    hg

    import java.util.ArrayList;  
    import java.util.HashMap;  
    import java.util.List;  
    import java.util.Map;  
    import org.apache.ibatis.session.SqlSession;  
    import org.apache.log4j.Logger;  
    import org.junit.After;  
    import org.junit.Before;  
    import org.junit.Test;  
    import com.mybatis.mappers.StudentMapper;  
    import com.mybatis.model.Student;  
    import com.mybatis.util.SqlSessionFactoryUtil;  
    public class StudentBatchTest {  
        private static Logger logger=Logger.getLogger(Student.class);  
        private SqlSession sqlSession=null;  
        private StudentMapper studentMapper=null;  
        /** 
         * 测试方法前调用 
         * @throws Exception 
         */  
        @Before  
        public void setUp() throws Exception {  
            sqlSession=SqlSessionFactoryUtil.openSession();  
            studentMapper=sqlSession.getMapper(StudentMapper.class);  
        }  
        /** 
         * 测试方法后调用 
         * @throws Exception 
         */  
        @After  
        public void tearDown() throws Exception {  
            sqlSession.close();  
        }  
        //通过list进行批量插入  
        @Test  
        public void batchInsertStudentWithList(){  
              List<Student> list= new ArrayList<Student>();  
                for(int i = 2;i < 10;i++){  
                    Student student = new Student();  
                    student.setName("test" + i);  
                    list.add(student);  
                }  
                int n=studentMapper.batchInsertStudentWithList(list);  
                System.out.println("成功插入"+n+"条记录");  
                sqlSession.commit();  
        }  
        //分页批量插入  
        @Test  
        public void batchInsertStudentPage(){  
            List<Student> list= new ArrayList<Student>();  
            for(int i = 0;i < 2000;i++){  
                Student student = new Student();  
                student.setName("test" + i);  
                list.add(student);  
            }  
            try {  
                save(list);  
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
        }  
        private void save(List<Student> uidCodeList) throws Exception {  
            SqlSession batchSqlSession = null;  
            try {  
                batchSqlSession =SqlSessionFactoryUtil.openSession();//获取批量方式的sqlsession          
                int batchCount = 1000;//每批commit的个数  
                int batchLastIndex = batchCount – 1;//每批最后一个的下标  
                for(int index = 0; index < uidCodeList.size()-1;){  
                    if(batchLastIndex > uidCodeList.size()-1){  
                        batchLastIndex = uidCodeList.size() – 1;  
                        batchSqlSession.insert("com.mybatis.mappers.StudentMapper.batchInsertStudentWithList", uidCodeList.subList(index, batchLastIndex+1));  
                        batchSqlSession.commit();  
                        System.out.println("index:"+index+"     batchLastIndex:"+batchLastIndex);  
                        break;//数据插入完毕,退出循环  
                    }else{  
                        batchSqlSession.insert("com.mybatis.mappers.StudentMapper.batchInsertStudentWithList", uidCodeList.subList(index, batchLastIndex+1));                                   batchSqlSession.commit();  
                        System.out.println("index:"+index+"     batchLastIndex:"+batchLastIndex);  
                        index = batchLastIndex + 1;//设置下一批下标  
                        batchLastIndex = index + (batchCount – 1);                        
                    }                 
                }                         
            }finally{  
                batchSqlSession.close();  
            }         
        }  
        //通过IdList批量更新  
        @Test  
        public void batchUpdateByIdList() {  
            logger.info("通过IdList批量更新");  
            List<Integer> list = new ArrayList<Integer>();  
            list.add(5);  
            list.add(6);  
            int n = studentMapper.batchUpdateByIdList(list);  
            System.out.println("成功更新" + n + "条记录");  
            sqlSession.commit();  
        }  
        //通过map进行批量更新  
        @Test  
        public void batchUpdateStudentWithMap() {  
            List<Integer> ls = new ArrayList<Integer>();  
            for (int i = 5; i < 7; i++) {  
                ls.add(i);  
            }  
            Map<String, Object> map = new HashMap<String, Object>();  
            map.put("idList", ls);  
            map.put("name", "小群11");  
            int n = studentMapper.batchUpdateStudentWithMap(map);  
            System.out.println("成功更新" + n + "条记录");  
            sqlSession.commit();  
        }  
        //通过list批量更新  
        @Test  
        public void batchUpdateStudentWithList() {  
            logger.info("更新学生(带条件)");  
            List<Student> list = new ArrayList<Student>();  
            list.add(new Student(6, "张三aa"));  
            list.add(new Student(6, "李四aa"));  
            int n = studentMapper.batchUpdateStudentWithList(list);  
            System.out.println("成功更新" + n + "条记录");  
            sqlSession.commit();  
        }  
        //通过Array进行批量删除  
        @Test  
        public void batchDeleteStudentWithArray() {  
            logger.info("删除学生,通过Array");  
            int array[] = new int[] { 3, 4 };  
            studentMapper.batchDeleteStudentWithArray(array);  
            sqlSession.commit();  
        }  
        @Test  
        public void batchDeleteStudentWithIdList() {  
            logger.info("通过IdList批量更新");  
            List<Integer> list = new ArrayList<Integer>();  
            list.add(9);  
            list.add(10);  
            int n = studentMapper.batchDeleteStudentWithIdList(list);  
            System.out.println("成功删除" + n + "条记录");  
            sqlSession.commit();  
        }  
        @Test  
        public void batchDeleteStudentWithList() {  
            logger.info("通过IdList批量更新");  
            List<Student> list = new ArrayList<Student>();  
            list.add(new Student(12, null));  
            list.add(new Student(13, null));  
            int n = studentMapper.batchDeleteStudentWithList(list);  
            System.out.println("成功删除" + n + "条记录");  
            sqlSession.commit();  
        }  
        @Test  
        public void batchDeleteStudentWithListOnlyId() {  
            logger.info("通过IdList批量更新");  
            List<Student> list = new ArrayList<Student>();  
            list.add(new Student(14, null));  
            list.add(new Student(15, null));  
            int n = studentMapper.batchDeleteStudentWithListOnlyId(list);  
            System.out.println("成功删除" + n + "条记录");  
            sqlSession.commit();  
        }  
    }   
  • 相关阅读:
    swift延时执行
    Swift3.0 — CocoaAsyncSocket客户端(Socket通信)
    SnapKit配置过程
    iOS App图标和启动画面尺寸
    mac升级到10.13 CocoaPods不能使用
    上传app到app store遇到 An error occurred uploading to the iTunes Store.(iTunes Store Operation Failed)的解决方法
    swift高斯模糊的自定义view
    Swift 实现部分圆角
    android 代码设置、打开wifi热点及热点的连接
    自定义android Dialog
  • 原文地址:https://www.cnblogs.com/xuerong/p/5316921.html
Copyright © 2011-2022 走看看