河北招投标信息网官网,网站优化细节怎么做,网站建设教程(项目式),网络营销怎么做网站在数据库设计中#xff0c;一对多关系是非常多的#xff0c;例如消息通知和附件#xff0c;一个消息通知中往往会包含多个附件#xff0c;这种情况下使用mybatis动态sql可以很方便的查询出来。 1、数据库设计
消息表#xff1a;sys_message
CREATE TABLE sys_message (i… 在数据库设计中一对多关系是非常多的例如消息通知和附件一个消息通知中往往会包含多个附件这种情况下使用mybatis动态sql可以很方便的查询出来。 1、数据库设计
消息表sys_message
CREATE TABLE sys_message (id varchar(40) COLLATE utf8mb4_unicode_ci NOT NULL,title varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 标题,content mediumtext COLLATE utf8mb4_unicode_ci COMMENT 内容,message_fk varchar(40) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 附件fkPRIMARY KEY (id)
) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COLLATEutf8mb4_unicode_ci COMMENT消息管理;附件表sys_attachment
CREATE TABLE sys_attachment (id varchar(40) NOT NULL COMMENT 主键,file_name varchar(50) NOT NULL COMMENT 原文件名,storing_name varchar(100) NOT NULL COMMENT 存储文件名,size bigint(20) NOT NULL COMMENT 大小,fk varchar(40) NOT NULL COMMENT 业务主键,suffix_type tinyint(4) DEFAULT NULL COMMENT 类型后缀,file_type tinyint(4) DEFAULT 0 COMMENT 文件类型0其他 1图片 2视频,url varchar(200) NOT NULL COMMENT 访问地址,absolute_path varchar(200) NOT NULL COMMENT 绝对路径,PRIMARY KEY (id)
)一条消息对应多个附件附件表中的 fk引用消息表的message_fk。 2、实现
返回类型是Message对象其中有一个 ListSysAttachment fileList存储附件信息。
public class SysMessage extends LaboratoryBaseModelSysMessage {private static final long serialVersionUID1L; TableField(id)private String id;TableField(title)private String title;TableField(content)private String content;TableField(message_fk)private String messageFk;TableField(exist false)private ListSysAttachment fileList;}这种情况下在动态sql的标签中返回值只能使用resultMap属性接收 select idselectMessagePage resultMapsysMessageMapSELECT*FROMsys_message a
/selectresultMap是一个外部结果映射关系的引用描述了结果数据的映射关系在resultMap中有一个 collection标签分别是
columnmessage表的message_fk即一对多的一中被引用的字段名propertySysMessage中fileList属性属性名是fileListjavaTypeSysMessage中fileList属性的对应的java类型ArraylistofTypejavaType的数据类型SysAttachmentselect需要引用的select标签的名字select idselectFileByFk
实际上 collection标签的含义是对于每一条【消息查询】的结果都要根据message_fk去到执行select属性中的查询语句将查询结果封装到fileList属性。其中column属性会当作参数传递select idselectFileByFk标签中。 resultMap idsysMessageMap typecn.xxx.model.SysMessageresult propertyid columnid/result propertytitle columntitle/result propertycontent columncontent/result propertymessageFk columnmessage_fk/collection columnmessage_fkpropertyfileListjavaTypeArraylistofTypecn.yibiao163.laboratory.model.SysAttachmentselectselectFileByFk/collection/resultMapselect idselectFileByFk resultMapcn.xxx.repository.SysAttachmentMapper.sysAttachmentMapselect * from sys_attachment where is_deleted 0 and fk #{message_fk}
/selectselect idselectFileByFk 标签中使用了resultMapcn.yibiao163.laboratory.repository.SysAttachmentMapper.sysAttachmentMap除了resultMap还有一个 resultType属性可以配置一个java类用来转换sql语句执行的结果。应用如下
select idselectFileByFk resultTypecn.xxx.model.SysAttachmentselect * from sys_attachment where is_deleted 0 and fk #{message_fk}
/selectpublic class SysAttachment extends LaboratoryBaseModelSysAttachment {private static final long serialVersionUID1L;TableField(file_name)private String fileName;TableField(storing_name)private String storingName;TableField(size)private Long size;TableField(fk)private String fk;TableField(suffix_type)private String suffixType;TableField(file_type)private Integer fileType;TableField(url)private String url;TableField(absolute_path)private String absolutePath;}3、完整mapper.xml
resultMap idsysMessageMap typecn.yibiao163.laboratory.model.SysMessageresult propertyid columnid/result propertytitle columntitle/result propertycontent columncontent/result propertymessageFk columnmessage_fk/collection columnmessage_fkpropertyfileListjavaTypeArraylistofTypecn.yibiao163.laboratory.model.SysAttachmentselectselectFileByFk/collection
/resultMapselect idselectMessagePage resultMapsysMessageMapSELECT*FROMsys_message a
/selectselect idselectFileByFk resultTypecn.xxx.model.SysAttachmentselect * from sys_attachment where is_deleted 0 and fk #{message_fk}
/select