返回顶部
首页 > 资讯 > 后端开发 > Python >mybatis如何批量添加一对多中间表
  • 134
分享到

mybatis如何批量添加一对多中间表

2024-04-02 19:04:59 134人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录批量添加一对多中间表mybatis中的写法多对多条件下插入中间表(使用insert标签的属性)说下需求解决方案测试批量添加一对多中间表 建立中间表A,一个id对应多个lid; 传

批量添加一对多中间表

建立中间表A,一个id对应多个lid;

传入两条参数

long id;//单个数值
List lid;//集合数值

dao层语句

int insertb(@Param("id")long id,@Param("lid")List lid);

mybatis中的写法

insert into A(id,lid) values
        <foreach collection="lid" item="data" separator=",">
            (#{id},#{data})
        </foreach>

多对多条件下插入中间表(使用insert标签的属性)

说下需求

我的数据库中有两张表,一张是Blog表,一张是Type表,分别代表了博客和博客类别,它们之间是多对多关系,它们由一张中间表blog_type维护。

(简单起见,blog表只有两个数据,id和title。type表只有id和name)

那么需求就是:

现在我想插入一条Blog数据,因为blog和type是多对多关系,想插入其中一个数据,就得维护他们之间那个中间表blog_type的关系(插入中间表字段)。

解决方案

那么我能想到的解决方案是:

写两段insert标签,第一段sql语句插入blog表,第二段sql语句插入insert表:

    <insert id="insertBlogWithoutType" parameterType="blog">
        insert into t_blog (title)
        values (#{title});
    </insert>
    <insert id="insertBlog_Type">
        insert into blog_type (bid, tid) values(#{blog.id},#{type.id})
    </insert>

但是这么做会有它的问题

由于blog表id为自增,所以我并没有插入id。如何在第二个insert查询语句中获取刚刚插入的id呢?

经过多方查找我发现了解决方案:

要用到MyBatis中insert标签的三个属性:

  • useGeneratedKeys (仅对 insert 和 update 有用)这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键(比如:像 MysqlSQL Server 这样的关系数据库管理系统的自动递增字段),默认值:false。
  • keyProperty (仅对 insert 和 update 有用)唯一标记一个属性,MyBatis 会通过 getGeneratedKeys 的返回值或者通过 insert 语句的 selecTKEy 子元素设置它的键值,默认:unset。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。
  • keyColumn (仅对 insert 和 update 有用)通过生成的键值设置表中的列名,这个设置仅在某些数据库(像 postgresql)是必须的,当主键列不是表中的第一列的时候需要设置。如果希望得到多个生成的列,也可以是逗号分隔的属性名称列表。

重新生成的代码如下所示:

    <insert id="insertBlogWithoutType" parameterType="blog" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
        insert into t_blog (title)
        values (#{title});
    </insert>
    <insert id="insertBlog_Type">
        insert into blog_type (bid, tid) values(#{blog.id},#{type.id})
    </insert>

注意!keyProperty是Java对象的属性名!不是数据库表中字段名!

测试

编写Dao层

//分成两个方法,但是他们两个将在Service层合二为一
    int insertBlogWithoutType(Blog blog);
    int insertBlog_Type(@Param("blog")Blog blog, @Param("type")Type type);

Dao层就是对应的前面mapper文件里的两个方法

Service层

public void insertBlog(Blog blog, List<Type> types) {
        blogDao.insertBlogWithoutType(blog);
        for (Type type : types) {
            blogDao.insertBlog_Type(blog, type);
        }
    }

这里的意思是,先插入一个传进来的blog(第一个参数)。然后插入之后根据插进来的blog的主键(blog的id)和传入的type的主键(type的id),插入中间表。

Test类

@Test
    public void test2(){
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        BlogService blogServiceImpl = (BlogService) context.getBean("BlogServiceImpl");
        //设置blog
        Blog blog = new Blog();
        blog.setTitle("【MyBatis】多对多条件下插入中间表(使用insert标签的属性)");
        
        //设置该blog对应的type
        List<Type> types = new ArrayList<Type>();
        types.add(new Type(1,"数据库"));
        types.add(new Type(2,"Debug专题"));
        blogServiceImpl.insertBlog(blog, types);
    }

可以看到,设置blog的时候,并没有设置blog的id属性,但是调用insertBlog时,插入中间表却已经知道了blog的id属性。这就是MyBatis中insert标签的三个属性的作用了!

执行完上面的代码,数据库里既插入了一条新的blog,又维护了他们之间那个中间表blog_type的关系(插入了中间表),至此问题解决。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: mybatis如何批量添加一对多中间表

本文链接: https://lsjlt.com/news/140685.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • mybatis如何批量添加一对多中间表
    目录批量添加一对多中间表mybatis中的写法多对多条件下插入中间表(使用insert标签的属性)说下需求解决方案测试批量添加一对多中间表 建立中间表A,一个id对应多个lid; 传...
    99+
    2024-04-02
  • navicat如何批量添加
    这篇文章给大家分享的是有关navicat如何批量添加的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。当有大量的数据需要你手动输入的时候一条一条的添加会很麻烦,现在教给大家一个简单的...
    99+
    2024-04-02
  • MyBatis如何实现多表查询(多对一、一对多)
    MyBatis实现多表查询  一、多对一查询 数据库的准备 创建两张表,一张老师表,一张学生表 将老师主键id关联学生外键tid 创建sql的语句 create ta...
    99+
    2024-04-02
  • Mybatis中怎么批量删除多表
    这篇文章给大家介绍Mybatis中怎么批量删除多表,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一. 这里主要考虑两种参数类型:数组或者集合.而这点区别主要体现在EmpMapper.xml文件中标签的collectio...
    99+
    2023-05-31
    mybatis
  • Linux如何添加批量用户
    这篇文章将为大家详细讲解有关Linux如何添加批量用户,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Linux系统提供了创建大量用户的工具,可以让您立即创建大量用户,方法如下:(1)先编辑一个文本用户文件...
    99+
    2023-06-05
  • java如何批量添加数据
    在Java中,可以使用循环结构来批量添加数据。首先,你需要创建一个数据容器,比如数组或集合,用于存储批量添加的数据。然后,使用循环结...
    99+
    2023-08-29
    java
  • 详解MyBatis-Puls中saveBatch批量添加慢的问题
    目录问题原因测试优化问题 在项目过程中使用MyBatis-Puls的saveBatch一次性添加大量数据时很慢 原因 MyBatis-Puls的saveBatch默认并没有批量添加,...
    99+
    2023-01-16
    MyBatis-Puls saveBatch批量添加慢 MyBatis-Puls saveBatch 添加慢
  • plsql怎么向表中批量添加数据
    要向表中批量添加数据,可以使用PL/SQL的FORALL语句。FORALL语句可以将多个数据行一次性插入到表中,可以提高插入数据的效...
    99+
    2023-10-11
    plsql
  • 一文带你学会Mysql表批量添加字段
    目录1 mysql表批量添加字段1.1 添加单个字段1.2 批量添加多个字段 如果需要批量添加多个字段,可以使用逗号隔开多个字段的添加语句,如下所示:2 mysql 为多个表添加字段2.1 方法一:手动逐个添加2.2 方...
    99+
    2023-05-05
    Mysql表批量添加字段 Mysql表添加字段 Mysql批量添加
  • mybatis通过中间表实现一对多查询功能
    需求: 通过一个学生的id查询出该学生所学的所有科目。 使用到的表格: 1.student:学生表 2.subject:科目表 3.stu_sub:学生-科目表(这里的成绩字段没...
    99+
    2024-04-02
  • Linux下如何批量添加用户
    这篇文章主要为大家展示了“Linux下如何批量添加用户”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux下如何批量添加用户”这篇文章吧。有时需要让几十个或更多的用户在主机上完成相同或相似的...
    99+
    2023-06-27
  • MyBatis 实现多对多中间表插入数据
    目录多对多中间表插入数据方法具体实现多对多的关联表中,如何同时插入数据的学习心得插入步骤多对多中间表插入数据 在做这个员工管理系统demo的时候,由于user和role是多对多关系,...
    99+
    2024-04-02
  • 利用Mybatis如何实现模糊查询、批量添加等功能
    利用Mybatis如何实现模糊查询、批量添加等功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。模糊查询:@Select({ "SELECT * ...
    99+
    2023-05-31
    mybatis 模糊查询
  • sql语句如何批量添加数据
    这篇文章将为大家详细讲解有关sql语句如何批量添加数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。sql语句批量添加数据的方法是什么?方法1:逐条执行,速度慢。INSE...
    99+
    2024-04-02
  • arcgis字段如何批量添加属性
    要批量添加属性,可以按照以下步骤进行操作:1. 打开ArcGIS软件并加载要添加属性的图层。2. 在ArcMap的“表格视图”中,选...
    99+
    2023-08-15
    arcgis
  • sql数据库如何批量添加数据
    要在SQL数据库中批量添加数据,可以使用INSERT INTO语句结合VALUES子句来一次性插入多条数据。以下是一个示例: INS...
    99+
    2024-04-10
    sql
  • sql如何在一个表中添加字段并添加备注
    这篇文章主要介绍sql如何在一个表中添加字段并添加备注,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、加字段:alter table 表名 ADD 字段名 类型;eg:alter&...
    99+
    2024-04-02
  • oracle如何在表中间加一列
    要在表中间添加一列,可以使用ALTER TABLE语句。例如,要在表中间的某个位置添加一列,可以使用以下语法: ALTER TABL...
    99+
    2024-04-09
    oracle
  • mybatis注解如何实现对象批量更改
    mybatis注解对象批量更改 一、介绍 当有多个对象需要进行更改时,批量修改对象集合List 二、代码 @Update("<script>" + "<fore...
    99+
    2024-04-02
  • js中如何对表格进行逐行添加
    这篇文章主要介绍了js中如何对表格进行逐行添加,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。关于js对表格进行逐行添加,今天抽空整理了一下:...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作