在MyBatis中插入子对象

2023-12-09

我有一个非常简单的对象图,我想使用 MyBatis 将其存储在数据库中。如果我创建一个全新的对象图(具有两个细节的 BatisNode),如何编写代码以确保创建子对象?详细信息如下:


public class BatisNode {
    protected int id;
    protected List details;
    protected String name;
        //Constructor and getters.
}

public class BatisNodeDetail {
    protected int id;
    protected BatisNode parent;
    protected String name;
        //Constructor and getters.
}

Schema:



CREATE TABLE node (
    node_id int auto_increment primary key,
    name varchar(255)
);

CREATE TABLE node_detail(
    node_detail_id int auto_increment primary key,
    name varchar(255)
);
  

Mapper:



    
        
INSERT INTO node (
  name
)
SELECT #{name};
        

        
SELECT node_id id,
name
FROM node
WHERE node_id=#{id};
        

        
        


  

Ibatis/Mybatis 不是一个 ORM,只是一个 DataMapper,并且这种简单性/局限性在这些场景(对象图)中特别表现出来:它(基本上)不了解对象图。

我采取的一种方法是:

I have:

  1. 一层轻量级 POJO 对象(“DTO 对象”),每个对象对应一个数据库表(一个对象 数据库表的一条记录),它们只不过是属性(如您的 BatisNode 和 BatisNodeDetail 示例)

  2. 一个 DAO 层,每个 DTO 一个服务对象(例如,BatisNodeDAO 和 BatisNodeDetailDAO),并注入数据源,以及标准的 insert/loadById/delete 和 select 方法(iBator可以在这里帮助你)

  3. 服务层除了具有典型的服务类(通常是单例)之外,还定义了一些它们处理的重量级对象(“域对象”),这些对象通常对应于 DTO 对象的图(在您的示例中,是一个 BatisNodeWithDetails )。这些域对象知道如何加载/保存包装的 DTO 的图、调用 DAO(以及处理事务、检测“脏”对象等)。请注意,对于不同的服务方法或用例,可以有多个包装相同 DTO(即不同的图)的“域类”。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在MyBatis中插入子对象 的相关文章

  • Java - 如何将特殊字符放入字符串中

    Java 似乎有很好的字符串处理能力 尽管如此 我还是遇到了最简单的问题 我需要动态字符串 它们在运行时更改 因此字符串类型不是一个好的选择 因为它们是不可变的 所以我使用字符数组 设置起来有点痛苦 但至少它们是可以修改的 我想创建一个字符
  • 在Java中使用命令行编译多个包

    您好 我一直在使用 IDE 但现在我需要从命令行运行和编译 问题是我有多个软件包 我试图找到答案 但没有任何效果 所以我有 src Support java files Me java files Wrapers java files 你知
  • 将 Hibernate 对象序列化为 JSON 时抛出异常

    好吧 我正在使用 Hibernate 将一个小型数据库加载到一些表示表的类并与数据库交互 一切都很好 我真的可以看到所有结果 而且我没有任何空字段 所有这些都已被使用 这里我展示了 主 类 表 import javax persistenc
  • jvm 次要版本与编译器次要版本

    当运行使用具有相同主要版本但次要版本高于 JVM 的 JDK 编译的类时 JVM 会抛出异常吗 JDK 版本并不重要 类文件格式版本 http blogs oracle com darcy entry source target class
  • Java、Oracle 中索引处缺少 IN 或 OUT 参数:: 1 错误

    您好 我使用 Netbeans 8 0 2 和 Oracle 11g Express Edition 在 JSF 2 2 中编写了一个图书馆管理系统 我有几个名为 书籍 借阅者 等的页面 以及数据库中一些名为相同名称的表 我的问题是这样的
  • 如何开始使用 Chainsaw for Log4j?

    我想开始使用 Chainsaw v2 几乎没有关于它的信息 我只找到了this http www velocityreviews com forums t140105 help using chainsaw for log4j html 但
  • 如何比较 Struts 2 中 url 请求参数中的单个字符

    我正在读取具有单个字符的 url 参数 它将是Y or N 我必须写一个条件来检查它是否Y or N并做相应的事情 这是我写的 但似乎不起作用 总是转到其他地方 网址是
  • 将过滤器添加到 Eclipse 中的 Project Explorer

    我想向 Project Explorer 添加一个新的过滤器 以向用户隐藏一些在 Eclipse RCP 应用程序中自动创建的项目 到目前为止我已经找到了两个扩展点 org eclipse ui ide resourceFilters 允许
  • 字符串池可以包含两个具有相同值的字符串吗? [复制]

    这个问题在这里已经有答案了 字符串池可以包含两个具有相同值的字符串吗 String str abc String str1 new String abc Will the second statement with new operator
  • 容器中的 JVM 计算处理器错误?

    最近我又做了一些研究 偶然发现了这一点 在向 OpenJDK 团队抱怨之前 我想看看是否有其他人观察到这一点 或者不同意我的结论 因此 众所周知 JVM 长期以来忽略了应用于 cgroup 的内存限制 众所周知 现在从 Java 8 更新某
  • 异步迭代器

    我有以下代码 while slowIterator hasNext performLengthTask slowIterator next 由于迭代器和任务都很慢 因此将它们放入单独的线程中是有意义的 这是对迭代器包装器的快速而肮脏的尝试
  • 我想在java中使用XQuery进行Xml处理

    我想用XQuery用于从 java 中的 Xml 获取数据 但我没有得到需要为此添加哪个 Jar 我在谷歌上搜索了很多 但没有得到任何有用的例子 例如我得到以下链接 https docs oracle com database 121 AD
  • 如何在Java媒体框架中学习.wav持续时间?

    我正在尝试使用 java 媒体框架将 mov 文件与 wav 文件合并 因此我需要知道它们的持续时间 我怎样才能做到这一点 任何想法 将不胜感激 您可以使用以下方式了解声音文件的持续时间 即 VitalyVal 的第二种方式 import
  • Hibernate HQL:将对值作为 IN 子句中的参数传递

    我面临一个问题 如何使用 IN 子句将查询中的成对值的参数传递给 HQL 例如 select id name from ABC where id reg date in x y 并且参数是不同的数据类型string id 和reg date
  • JavaFX - 为什么多次将节点添加到窗格或不同的窗格会导致错误?

    我现在正在学习基本的 JavaFX 我不明白我正在阅读的书中的这一说法 不 诸如文本字段之类的节点只能添加到一个窗格中一次 将节点添加到多次窗格或不同的窗格将导致运行时错误 我可以从书中提供的UML图看出它是一个组合 但我不明白为什么 库类
  • 为什么我的代码会产生错误:该语句没有返回结果集[重复]

    这个问题在这里已经有答案了 我正在从 Microsoft SQL Server Studio 执行以下查询 该查询工作正常并显示结果 SELECT INTO temp table FROM md criteria join WHERE us
  • 使用 secp256r1 曲线和 SHA256 算法生成 ECDSA 签名 - BouncyCastle

    我正在尝试使用带有 secp256r1 曲线 P256 的 ECDSA 和用于消息哈希的 SHA256 算法生成签名 我也在使用 Bouncy Castle 库 下面的代码 public class MyTest param args pu
  • 公共方法与公共 API

    在干净的代码书中 有一个观点是 公共 API 中的 Javadocs 同样 Effective java 一书也有这样的内容 项目 56 为所有公开的 API 元素编写文档注释 所以这就是我的问题 所有公共方法都被视为公共 API 吗 它们
  • 对于当前月份和日期但年份不同的日期,经过的月份计算未给出正确的结果

    我正在尝试计算自特定日期以来经过的月份 该函数工作正常 尽管如果我将今天的日期与过去的不同年份放在一起 它会给我一个月的差异 不到一个月 假设对于所有日期 该函数都运行良好 除了 如果今天是 2014 03 06 YYYY MM DD 并且
  • 为什么范围为“provided”的依赖项会隐藏 Maven 中的传递依赖项?

    我的 Maven 项目中有三个模块 这稍微简化了 model包含JPA注释的实体类 坚持实例化一个实体管理器并调用它的方法 应用创建类的实例model 设置一些值并将它们传递给坚持 model and 坚持显然取决于javax persis

随机推荐

  • 在 Laravel 4 的 Eloquent 中使用枢轴模型数据作为与另一个模型的关系

    我有一个用于多对多关系的数据透视表 其中包括另一个模型的第三个索引参数 我希望能够使用 Eloquent 来访问这个模型 在我的应用程序中 我有一个User谁可以拥有很多Subjects还有很多Semesters 当用户拥有Subject
  • 当选择另一个单选按钮时,如何将其更改为“选中”?

    我希望你们能帮我解决这个问题 我怎样才能有一个单选按钮id A 将其属性更改为 已检查 当单选按钮id B 被选中 单选按钮 A 和 B 位于不同的组中 Thanks
  • 如何编写反汇编程序? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我有兴趣编写一个 x86
  • Yii CMultiFileUpload 选择多个文件

    得到了答案 将多个文件上传到数据库进行注册 已经尝试了很多方法来使用 CMultiFileUpload 小部件使多个文件上传可行 我已经检查并关注了以下链接 http www yiiframework com forum index php
  • safeUnbox() 无法反转

    我试图消除 Android 应用程序的所有警告 其中之一是 viewModel value 是一个装箱字段 但需要取消装箱才能执行 android checked 这可能会导致 NPE 因此数据绑定将安全地拆箱它 您可以更改表达式并使用 s
  • 太阳能标签云

    我似乎陷入了 Solr 分面支持的标签云的逻辑背后 首先 我使用 OpenNLP 解析我的文档并从中获取相关单词 因此每个文档都被分成 n 个单词 我的 Solr 响应基本上是这样的
  • 是否为容器启用?

    有没有办法禁用容器内的所有控件 例如网格 谢谢你 UPD 虽然Silverlight的Grid有IsEnabled属性 但Windows Phone 7 Grid肯定没有IsEnabled属性 对于 Silverlight 我在网格周围添加
  • 如何创建位图形式的Drawable对象

    我正在为 Android 开发自定义视图 为此 我希望让用户能够选择和使用图像 就像使用时一样ImageView In attr xml我添加了以下代码
  • 拖动源容器时,jsPlumb 源端点不会移动

    Using jsPlumb 其中在可拖动内部的细分之间创建键absolute定位的容器称为 projects 这些都出现在一个大型通用容器中 container 代码中设置为默认容器jsPlumb Defaults Container co
  • PY2EXE 编译 Python 代码运行速度更快吗?

    我真的很喜欢 PY2EXE 模块 它确实帮助我与其他同事共享脚本 这些脚本对他们来说非常易于使用 我的问题是 当 PY2EXE 模块将代码编译为可执行文件时 生成的可执行文件处理速度是否更快 感谢您的回复 py2exe 只是将 Python
  • 测试开关中的多种情况,例如 OR (||)

    你会如何使用switch case当你需要测试时a or b在同样的情况下 switch pageid case listing page case home page alert hello break case details page
  • 将具有数据绑定的“动态”元素添加到我的聚合物元素中

    几天来 我尝试为聚合物提供一些 动态 元素 不幸的是没有成功 我的目标是在运行时添加一个元素 并通过聚合物数据绑定 以 自然 聚合物方式 用内容填充它 没有另一个建议的解决方法堆栈溢出答案 请看一下这个小提琴中的代码 https jsfid
  • 在单个函数中设置状态两次 - ReactJS

    我有一个设置状态两次的函数 第二次setState必须在第一次之后 500 毫秒后发生setState已经发生 动画目的 代码如下 const showAnimation gt this setState hidden false setT
  • 连接 ODP.Net 时出现 ORA-01005 错误

    我尝试使用以下代码访问 Oracle 数据库 版本 10 2 0 4 0 但在调用其 open 方法时 连接会引发 ORA 01005 给出空密码 登录被拒绝 异常 var connBuilder new OracleConnectionS
  • ChromeDriver driver = new ChromeDriver(); 之间有什么区别和 WebDriver 驱动程序 = new ChromeDriver();

    有什么区别 ChromeDriver driver new ChromeDriver and WebDriver driver new ChromeDriver 如果我在 Selenium Java 中使用这些代码 我会得到相同的输出吗 我
  • 错误:[Header] 不是 组件

    尽管我努力修复它们 但我仍然遇到上述错误 终端声称应用程序编译没有问题 但浏览器上没有显示任何内容 我在查看控制台时发现了错误 以下是错误所指的 Header 组件的 index js 文件 import React from react
  • 使用 pywin32 库中的 win32evtlog 写入 Windows 事件日志

    我有一个简单的 python 脚本 将在 Windows 服务器上运行 我想将整个脚本中的特定事件记录到 Windows 事件日志中 有谁有一个简单而精确的写入 Windows 事件日志的示例 以便我可以从事件查看器查看该事件 我已阅读 p
  • SQL-收缩数据库日志文件

    我正在尝试缩小我的数据库日志文件 我尝试过运行 USE databasename BACKUP log databasename WITH truncate only DBCC shrinkfile databasename log 1 我
  • 如何定义一个将函数文字(带有隐式参数)作为参数的函数?

    我希望能够在这些行上做一些事情 不会编译 def logScope logger Logger operation implicit l Logger gt Unit code operation logger code def opera
  • 在MyBatis中插入子对象

    我有一个非常简单的对象图 我想使用 MyBatis 将其存储在数据库中 如果我创建一个全新的对象图 具有两个细节的 BatisNode 如何编写代码以确保创建子对象 详细信息如下 public class BatisNode protect