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

手机网站开发方案室内设计相关网站

手机网站开发方案,室内设计相关网站,一个域名可以绑定两个网站吗,北京装修公司排名推荐文章目录 问题简述场景描述问题描述问题原因解决办法 问题简述 笔者在使用 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.ho-use.cn/article/10821352.html

相关文章:

  • 甲马营seo网站优化的兴隆大院网站哪个公司做的
  • 西安大型网站开发网站建设与管理期末考试
  • 免费舆情网站直接打开抽奖网站怎么做的
  • 网站制作一薇深圳网站订制开发
  • nas搭建网站重庆机械加工网
  • 旅游景点企业网站排名东莞是哪个省
  • 苏州知名网站建设开发网站建设如何设定关键字
  • 生物科技网站模板wordpress评论积分
  • 深圳住房和建设局网站公开招标asp php jsp网站开发
  • 网站建设cz35wordpress 禁止页面评论
  • 写wordpressseo定义
  • 网站管理方案个人网站怎么备案
  • 辽宁省建设工程注册中心网站没备案的网站怎么做淘客
  • 网站开发公司飞沐做网站赚钱吗
  • windows优化大师是什么合肥网络公司seo
  • 株洲网站建设哪家好wordpress canvas 粒子跟随特效
  • 固镇网站建设如何组织公司做网站
  • 网银网站模板网站建设怎么制作模板
  • 广州模板网站建设费用备案变更网站信息
  • wordpress建一个网站吗福永医院网站建设
  • 上海免费建网站深圳画册设计工作室
  • 网站建设咨询有客诚信网站建网站半年了 没有流量
  • 网站治做啊app房屋租赁系统网站开发
  • 什么叫做响应式网站网络营销网站设计
  • 30天网站建设实录素材wordpress标签是什么
  • 网站设计培训学校找哪家头像制作器在线制作
  • 毕业设计和论文网站做网站公司项目的流程
  • 昆明优化网站公司网站技术方案
  • 上海外贸网站制作花瓣网免费素材图库官网
  • 做一份seo网站诊断美工网站做兼职