有两张表A(id,name),B(id,hobby), 两表id关联,比如向A表中插入一条数据(1,张三),可以向B表中插入多条数据(1,篮球),(1,足球),(1,排球),该如何使用mybatis实现呢?

解决方案 »

  1.   

    <insert id="insert"  useGeneratedKeys="true" keyProperty="id" parameterType="com.*.vo.User">
    insert into t_user values(default,#{userName},#{password},#{realmId.id},0)
    </insert>
      

  2.   

    useGeneratedKeys="true" :设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。(适用于mysql、sqlserver数据库,oracle不能使用)
    keyProperty:赋值的对象的属性名称。demo:<insert id="insertUser" useGeneratedKeys="true" keyProperty="userId" parameterType="com.domain.User">  
        insert into user(userName,password)  
        values(#{userName},#{password})  
    </insert>  userDao.insertUser(user);//插入操作  
    //插入B表逻辑,其中id为user.getUserId();
      

  3.   

    在业务层实现不就行了,或者controller里面写操作另外一张表的方法
      

  4.   

    使用mybatis 在同一时间向不同的表插入数据,如果直接写在 insert 标签中,每个语句用分号分开,这样运行直接报错,sql语法不正确,其他写法未试,
    你插入同时插入多表数据,mybatis 可以使用 mysql 支持的存储过程将实现插入多个表。现在mysql 创建你的存储过程 myProcedure 
    DELIMITER $
    CREATE PROCEDURE myProcedure (IN id INTEGER,IN name VARCHAR,IN age INTEGER)
    BEGIN
        INSERT INTO A VALUES (NULL,id,name ,age );
        INSERT INTO BVALUES (NULL,id,NULL,0,NOW(),NULL);
        INSERT INTO CVALUES(NULL,id,name ,NULL,NULL,LAST_INSERT_ID());
    END $
    在mybatis 中,标签中直接使用 call myProcedure() ; 将你需要传入的参数按照mybatis 规范写入就OK。
      

  5.   

    修改数据库连接参数加上allowMultiQueries=true
    参考网址:
    https://www.cnblogs.com/yuananyun/p/5445181.html
    https://www.huangdi.me/?p=129
      

  6.   

    这样就可以在insert标签中使用多条insert语句(每个语句用分号分开)。