当前位置: 首页 > news >正文

手机网站开发怎么收费最近的时事新闻

手机网站开发怎么收费,最近的时事新闻,网站首页图片滑动怎么做,app开发定制的公司哪家好文章目录 问题简述场景描述问题描述问题原因解决办法 问题简述 笔者在使用 MyBatis 进行一对多查询的时候遇到一个奇怪的问题。对于笔者的一对多的查询结果#xff0c;出现了这样的一个现象#xff1a;原来每个组里有多个元素#xff0c;查询目标是查询所查的组#xff0c;… 文章目录 问题简述场景描述问题描述问题原因解决办法 问题简述 笔者在使用 MyBatis 进行一对多查询的时候遇到一个奇怪的问题。对于笔者的一对多的查询结果出现了这样的一个现象原来每个组里有多个元素查询目标是查询所查的组以及每个组中的元素。但查询的结果却是变成了这样每组元素变得只有一个且总组数与元素数总数相等。举个例子假设一共有 3 个组每组 4 个元素。而现在的查询结果却是显示出了 12 个组每组 1 个元素。 场景描述 笔者原来的表的情况比这要复杂很多这里为了便于说明简单抽象出这样一个情景。数据库中有很多用户User每个用户有他的好友分组Folder每个分组下面有该用户的好友Contact。现在需要查找这个用户所有的分组及好友返回的数据结构需要是一个一个 List 分组且一个分组中包含一个 List 好友。List 指的是 Java 的一个内置的数据结构。 User 表建表示例代码如下 CREATE TABLE User (id VARCHAR(64) NOT NULL,name VARCHAR(64) NOT NULL,# ...为了简化说明此表省略其它字段...PRIMARY KEY (id) ); Folder 表建表示例代码如下 CREATE TABLE Folder (id VARCHAR(64) NOT NULL,userId VARCHAR(64) NOT NULL,name VARCHAR(64) NOT NULL,# ...为了简化说明此表省略其它字段...PRIMARY KEY (userId, id),# 因为上面的是复合主键所以自动创建的是联合索引而其它表的外键引用需要的是单个索引INDEX idIndex (id),FOREIGN KEY (userId) REFERENCES User (id) ); Contact 表建表示例代码如下 CREATE TABLE Contact (id VARCHAR(64) NOT NULL,# 表示此联系人属于谁的好友userId VARCHAR(64) NOT NULL,# 表示此联系人对应 User 中的 idlinkedUserId VARCHAR(64) NOT NULL,folderId VARCHAR(64) NOT NULL,# ...为了简化说明此表省略其它字段...PRIMARY KEY (userId, id),# 因为上面的是复合主键所以自动创建的是联合索引而其它表的外键引用需要的是单个索引INDEX idIndex (id),# 同一个用户不能拥有两个相同 ID 的 ContactUNIQUE (userId, linkedUserId),# 当复合主键成为外键时必须整个复合主键一起作为外键不能只引用复合主键其中的某个属性FOREIGN KEY (userId) REFERENCES Folder (userId),FOREIGN KEY (folderId) REFERENCES Folder (id),FOREIGN KEY (linkedUserId) REFERENCES User (id) );建表示意图如下 查询之后的 Java 数据结构如下 Getter Setter ToString NoArgsConstructor AllArgsConstructor EqualsAndHashCode(callSuper false) Accessors(chain true) public class FolderWithContacts {private Folder folder;private ListContact contacts; }其中 Setter Getter ToString NoArgsConstructor AllArgsConstructor EqualsAndHashCode(callSuper false) Accessors(chain true) public class Folder {private String id;private String userId;private String name; }Setter Getter ToString NoArgsConstructor AllArgsConstructor EqualsAndHashCode(callSuper false) Accessors(chain true) public class Contact {private String id;private String userId;private String linkedUserId;private String folderId; }DAO 类代码如下 public interface ContactDao {ListFolderWithContacts getFolderWithContacts(String userId); }?xml version1.0 encodingUTF-8? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtdmapper namespaceXXX.xxx.ContactDaoresultMap idfolderResultMap typeXXX.xxx.Folder!-- property 指的是 Java 的字段名column 指的是 SQL 的属性名 --id propertyid columnfolder_id/id propertyuserId columnfolder_user_id/result propertyname columnfolder_name//resultMapresultMap idcontactResultMap typeXXX.xxx.Contactid propertyid columncontact_id/id propertyuserId columncontact_user_id/result propertyfolderId columncontact_folder_id/result propertyname columncontact_name//resultMapresultMap idfolderWithContactsResultMap typeXXX.xxx.FolderWithContacts!-- association 表示这是一个普通 Java 对象而不是 Java 内置类型 --association propertyfolder resultMapfolderResultMap/!-- collection 表示这是一个 Java 集合。javaType 指的是 Java 集合的类型 --collection propertycontacts javaTypejava.util.ArrayList resultMapcontactResultMap//resultMapselect idgetFolderWithContacts resultMapfolderWithContactsResultMapSELECT Folder.id AS folder_id,Folder.userId AS folder_user_id,Folder.name AS folder_name,Folder.sequence AS folder_sequence,Contact.id AS contact_id,Contact.userId AS contact_user_id,Contact.folderId AS contact_folder_id,Contact.name AS contact_name,Contact.description AS contact_descriptionFROM Contact,FolderWHERE Contact.folderId Folder.idAND Contact.userId #{userId}AND Folder.userId #{userId}ORDER BY folder_sequence ASC/select/mapper问题描述 以上就是笔者用于某个用户的好友分组及每个分组下的好友的示例代码。但使用上面的代码的查询会出现问题。如果一个用户有 3 个好友每组 4 个好友则上述代码的查询结果会变成该用户有 12 个好友分组每个分组 1 个好友。而且上面的整个查询过程在运行中都是正常的不会发生报错。而且返回结果的每个字段都没有出现 null 值。 可以看出上面的代码会导致无法区分好友与分组把好友当成分组返回了。 问题原因 是什么原因出现上述问题呢由于上面的整个查询过程都没有发生报错且返回数据没有 null 值。因此不会是笔者的语法编写出现问题。 于是笔者将上面的 SQL 单独在 MySQL 客户端命令行运行了一下运行输出是正常的确实是一个一对多查询的输出。一个一对多查询的输出输出结果的数量应该和元素总个数相等且同一个分组的所有元素关于这个分组的属性列的值应该也都是相等的。 这就说明并不是笔者 SQL 代码的问题所以问题出现在 MyBatis 对 MySQL 输出结果的解析上。笔者非常确定MyBatis 是肯定支持一对多查询的因此一定是笔者关于 MyBatis 的 mapper 文件的编写出现问题。 笔者之后在不断地建新的更基本的表进行一对多查询终于让笔者发现了问题所在。 MyBatis 对于多表查询要求组元素的字段必须是基本类型而笔者编程时非常喜欢隔离、封装、解耦擅自在上面将组元素的字段封装成了一个单独的类然后把这个类的对象作为组元素的字段。在这种情况下虽然 MyBatis 注入数据没有出问题但它却没能识别出这是一对多查询的数据因此将其当成一对一的数据来注入了。 可以看出笔者在上面使用了 association.../ 来映射一个 Java 对象因此引发了上述问题。 解决办法 知道原因就好办了。可以直接将上面类 Folder 的字段合并在类 FolderWithContacts然后去掉类 Folder。 改进后的相关代码如下 Getter Setter ToString NoArgsConstructor AllArgsConstructor EqualsAndHashCode(callSuper false) Accessors(chain true) public class FolderWithContacts {private String id;private String userId;private String name;private ListContact contacts; }?xml version1.0 encodingUTF-8? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtdmapper namespaceXXX.xxx.ContactDaoresultMap idcontactResultMap typeXXX.xxx.Contactid propertyid columncontact_id/id propertyuserId columncontact_user_id/result propertyfolderId columncontact_folder_id/result propertyname columncontact_name//resultMapresultMap idfolderWithContactsResultMap typeXXX.xxx.FolderWithContactsid propertyid columnfolder_id/id propertyuserId columnfolder_user_id/result propertyname columnfolder_name/!-- collection 表示这是一个 Java 集合。javaType 指的是 Java 集合的类型 --collection propertycontacts javaTypejava.util.ArrayList resultMapcontactResultMap//resultMapselect idgetFolderWithContacts resultMapfolderWithContactsResultMapSELECT Folder.id AS folder_id,Folder.userId AS folder_user_id,Folder.name AS folder_name,Folder.sequence AS folder_sequence,Contact.id AS contact_id,Contact.userId AS contact_user_id,Contact.folderId AS contact_folder_id,Contact.name AS contact_name,Contact.description AS contact_descriptionFROM Contact,FolderWHERE Contact.folderId Folder.idAND Contact.userId #{userId}AND Folder.userId #{userId}ORDER BY folder_sequence ASC/select/mapper现在这段代码运行起来查询到的数据就是正常的了。
http://www.hkea.cn/news/14317396/

相关文章:

  • 网站建设的技术路线layui做网站前端
  • 网站开发采购合同模板下载教务管理系统app
  • 沁阳建网站邯郸住房城乡建设厅网站
  • 户县做网站关键词在线试听免费
  • 电商网站开发详细流程官方网站投诉平台
  • 网站佣金怎么做会计分录网页设计作业是什么格式
  • 什么做的网站推广微信小程序低代码开发平台
  • 搭建网站需要注意什么蓬莱做网站公司
  • 网页设计怎么做网站济南网站怎么做seo
  • 江西省城乡建设厅网站湛江seo网站推广
  • 招聘网站简历数据分析怎么做网站制作时间
  • 58同城类似的网站开发做外贸用哪个网站好
  • 嘉兴网站建设咨询金华建站价格
  • 做网站登录制作网站公司那家好
  • 网站做专题页面做网站虚拟主机和云服务器
  • 实现微信绑定登录网站陕西新站seo
  • 英迈思做网站怎么样哪个网站可以做兼职讲师
  • 网站维护运营怎么做新闻发稿平台
  • 济南行知网站建设有限公司怎么样wordpress导出图片不显示不出来
  • 域名空间网站建设做网站域名优化的怎么样
  • 做网站怎么把背景变成纯色自己做网站接入微信和支付宝
  • 深圳外贸企业网站建设微信朋友圈营销文案
  • 印刷建设网站高端品牌衣服
  • 外贸营销网站建设方案重庆市建设施工安全网
  • 四川德行天下建设工程有限公司网站做网站的行情
  • 企业网站栏目规划的重要性百度 验证网站
  • html转WordPress pageseo优化快排
  • 贵阳网络公司网站建设亮点云建站
  • 支付的网站建设费整么做账莱芜在线话题莱芜拉呱
  • 辽宁网站建设电话wordpress网站换空间