老师,我想通过list方式insert进数据表,但是遇到一个问题

老师,我想通过list方式insert进数据表,但是遇到一个问题

-------------------------classes.xml------------------------------
<?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="schools">
    <insert id="classInsert" parameterType="java.util.List"
        useGeneratedKeys="true" keyProperty="id" keyColumn="id">
        insert into classes(classno,name,major)
        values
        <foreach collection="list" item="item" separator=",">
            (#{item.classno},#{item.name},#{item.major})
        </foreach>
    </insert>
</mapper>
-------------------------Testor-------------------------------------
public class Testor {
    @Test
    public  void testClassesInsert(){
        SqlSession session = null;
        try{
            session = MyBatisUtils.openSession();
            List<Classes> list = new ArrayList();
            list.add(new Classes("Class001","一班","计算机"));
            list.add(new Classes("Class002","二班","计算机"));
            list.add(new Classes("Class003","三班","会计"));
            list.add(new Classes("Class004","四班","会计"));
            for (Classes classes : list) {
                System.out.println(classes.toString());
            }
            int num = session.insert("schools.classInsert",list);
//            session.commit();
        }catch(Exception e){
            e.printStackTrace();
            if(session!=null) {
                session.rollback();
            }
        }finally {
            MyBatisUtils.closeSession(session);
        }
    }

}

结果却是重复的数据,请问是哪里出了问题呢。

https://img1.sycdn.imooc.com//climg/64925b0b09e253e602780154.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕小尤 2023-06-21 10:42:37

同学你好,1、静态属性是类属性,通过类名就可以调用,不用再new一个对象去调用属性。静态属性是会随着类的加载而加载,并且只加载一次,全局唯一。在

2、同学代码中每一次实例化,都会将属性值进行修改,并会将之前的属性值覆盖。从而导致出现一样的值,建议去除静态修饰。如下所示:

https://img1.sycdn.imooc.com//climg/6492648a0997b70205920626.jpg

public class Classes {
    private  Integer id;
    private  String classno;
    private  String name;
    private  String major;

    public Classes() {
    }

    public Classes(String classno,String name,String major){
        this.classno = classno;
        this.name = name;
        this.major = major;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getClassno() {
        return classno;
    }

    public void setClassno(String classno) {
        this.classno = classno;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getMajor() {
        return major;
    }

    public void setMajor(String major) {
        this.major = major;
    }

    @Override
    public String toString() {
        return id+" "+classno+" "+name+" "+major;
    }
}

祝学习愉快!

  • 提问者 会java泰酷辣 #1

    老师,还是有问题,我刷新缓存在新的页面试了还是一样,您看下我的代码

    -------------------------------Classes-----------------------------------
    package com.imooc;
    
    public class Classes {
        private static Integer id;
        private static String classno;
        private static String name;
        private static String major;
    
        public Classes() {
        }
    
        public Classes(String classno,String name,String major){
            this.classno = classno;
            this.name = name;
            this.major = major;
        }
    
        public static Integer getId() {
            return id;
        }
    
        public static void setId(Integer id) {
            Classes.id = id;
        }
    
        public static String getClassno() {
            return classno;
        }
    
        public static void setClassno(String classno) {
            Classes.classno = classno;
        }
    
        public static String getName() {
            return name;
        }
    
        public static void setName(String name) {
            Classes.name = name;
        }
    
        public static String getMajor() {
            return major;
        }
    
        public static void setMajor(String major) {
            Classes.major = major;
        }
    
        @Override
        public String toString() {
            return id+" "+classno+" "+name+" "+major;
        }
    }
    ------------------------------stest测试类-------------------------------- 
    package com.imooc;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class stest {
        public static void main(String[] args) {
            List<Classes> list = new ArrayList<>();
            list.add(new Classes("Class001","一班","计算机"));
            list.add(new Classes("Class002","二班","计算机"));
            list.add(new Classes("Class003","三班","会计"));
            list.add(new Classes("Class004","四班","会计"));
            for (Classes classes : list) {
                System.out.println(classes);
            }
        }
    }

    结果还是一样:

    https://img1.sycdn.imooc.com//climg/6492659709dff05308010302.jpg

    2023-06-21 10:51:09
  • 提问者 会java泰酷辣 #2

    老师,我找到问题了,calsses类我给成员属性static属性了,导致后面所有赋值都成一样的了。

    2023-06-21 10:54:28
  • 好帮手慕小尤 回复 提问者 会java泰酷辣 #3

    同学你好,1、同学根据你提供的classes类,重新进行测试,则是因classes类中定义的静态属性导致的,已经重新发布了回答,同学可以前去查看。

    2、如果下次还是遇到类似的问题,建议同学将代码反馈全,这样便于老师定位问题。

    祝学习愉快!

    2023-06-21 10:56:18
会java泰酷辣 提问者 2023-06-21 10:39:18

这是classes类的代码

package com.imooc.mybatis.entity;

public class Classes {
    private static Integer id;
    private static String classno;
    private static String name;
    private static String major;

    public Classes() {
    }

    public Classes(String classno,String name,String major){
        this.classno = classno;
        this.name = name;
        this.major = major;
    }

    public static Integer getId() {
        return id;
    }

    public static void setId(Integer id) {
        Classes.id = id;
    }

    public static String getClassno() {
        return classno;
    }

    public static void setClassno(String classno) {
        Classes.classno = classno;
    }

    public static String getName() {
        return name;
    }

    public static void setName(String name) {
        Classes.name = name;
    }

    public static String getMajor() {
        return major;
    }

    public static void setMajor(String major) {
        Classes.major = major;
    }

    @Override
    public String toString() {
        return id+" "+classno+" "+name+" "+major;
    }
}


问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师