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

手机网站开发方案360网站卫士代备案流程

手机网站开发方案,360网站卫士代备案流程,做翻译兼职的网站是哪个,企业网站内容以及功能模块规划的依据有哪些文章目录 问题简述场景描述问题描述问题原因解决办法 问题简述 笔者在使用 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/14306658/

相关文章:

  • 电商网站如何备案大气自适应网站源码
  • 东莞市长安镇做网站wordpress友情链接单页
  • 长春网站建设开发网站怎么做关键词搜索排面
  • 手机网站功能百度广告标识
  • 如何用百度搜自己做的网站无限流量网站建设
  • c#网站开发技术南昌专业做网站
  • 广州网站建设设计公司信息如何注册域名网站
  • 沈阳做网站的电话网站双线选择
  • 江西建设周记网站个人品牌打造方案
  • 做动态h5的网站大学生旅游网站策划书
  • 网站如何集成微信支付网络推广员是什么工作
  • 建设网站哪家强gom传奇网站建设
  • 个人网站建设与维护征婚网站上拉业务做恒指期货
  • 商业网站 模板做网站都需要准备什么软件
  • 网站权重高 做别的关键词wordpress首页封面图片不显示
  • 湛江网站建设与网页一个人能建设一个公司网站吗
  • 青岛建设集团招聘信息网站做游戏ppt下载网站有哪些内容
  • 做的比较好的法律实务培训网站邯郸logo设计
  • 广州网站制作有哪些怎么样建立学校网站
  • 巩义便宜网站建设公司常州网站建设哪家便宜
  • 阿里巴巴国际网站官网谷歌字体wordpress
  • 德阳市做网站网站模板案例
  • 建公司网站一般多少钱建设集团工程有限公司
  • 佛山的网站建设做淘宝保健品药品在哪个网站找素材
  • wordpress 建网站腾讯建站官网
  • 潍坊市作风建设年网站手机网站前
  • 快速排名网站海南网站建设推广公司哪家好
  • flash型网站国外 网站开发框架
  • 深圳最好的网站开发公司创意设计与制作作品
  • 制作简单的个人网站网站海外推广