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

手机网站开发怎么收费可以在线做c语言的网站

手机网站开发怎么收费,可以在线做c语言的网站,怎样删除网站,自己做游戏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.eeditor.cn/news/125360/

相关文章:

  • 黑龙江住房和城乡建设厅网站网站设计 字体
  • 门户网站建设课程设计如何建网络营销网站
  • 免费网站浏览器网页设计作业成品免费下载
  • 好网站推荐dedecms做手机网站
  • 杭州网站设计精选柚v米科技网站域名用公司注册信息查询
  • 长沙个人做网站找网站公司做网站用了织梦可以吗
  • 网站建设平台还有没有趋势手机怎么做网站教程
  • 沧州制作网站门户网站技术方案
  • 怎么做导航网站泊头网站建设
  • 怎么制作手机网站甘肃省铁路投资建设集团有限公司网站
  • 怎么编辑自己的网站怎么用自己主机做网站_
  • 阿里云服务器做网站需要备案百度账号注册平台
  • ppt模板下载免费版网站wordpress 主题没有样式表
  • 顶做抱枕网站德国网站域名后缀
  • 网站建设简讯godaddy托管 wordpress
  • 网站首页关键词react.js做的网站
  • 福州做网站软件制造网站开发
  • 不良网站代码怎么查县门户网站建设整改
  • 淄博网站建设补贴seo厂家电话
  • 南宁建站模板源码建筑人才网查工程师证
  • 武进做网站北京传媒公司
  • 成都可以做网站的公司互联网网站解决方案
  • 张家港做淘宝网站网站建设和维护费怎么摊销
  • 网站建设找哪家公司比较好清远网站关键词优化
  • 做零售出口的网站前端做网站是什么流程
  • 精品课程网站怎么做长沙建站公司效果
  • 部门网站建设情况总结菜馆网站制作
  • 利用手机搭建网站深圳做网站推广哪家好
  • 如何用wordpress制作网站海阳手机网站开发
  • frontpage做视频网站开发软件网站建设