以信息系统为例(含有附件)的增删改查书写(后端)
首先我们先建两个表(sys_message和sys_message_file),这两个表用来存放信息系统的信息以及附件信息。
前后端需要统一字段:
message表字段 | 注释 |
---|---|
id | 编号 |
file_name | 文件名称 |
file_type | 文件类型 |
introduction | 内容简介 |
create_by | 创建人 |
create_time | 创建时间 |
update_by | 更新人 |
update_time | 更新时间 |
file表字段 | 注释 |
---|---|
id | 文件ID |
message_id | 信息编号 |
name | 文件名 |
path | 文件路径 |
del_flag | 删除标志(0:正常,2:已删除) |
根据两个表使用若依代码生成器,生成controller,service,domain,mapper,mapper.xml,以及前端的Vue文件.
这两个表的关联方式为sys_message.id=sys_message_file.message_id;
但是我们可以通过实体类来关联:
private List<SysMessageFile> files;
这就把信息与附件绑定在一起,并且附件是一个数组对象。
public class SysMessage extends BaseEntity
{
private static final long serialVersionUID = 1L;
/** 编号 */
private Long id;
/** 文件名称 */
@Excel(name = "文件名称")
private String fileName;
/** 文件类型 */
@Excel(name = "文件类型")
private String fileType;
/** 内容简介 */
@Excel(name = "内容简介")
private String introduction;
private List<SysMessageFile> files;
private String delFlag;
public List<SysMessageFile> getFiles() {
return files;
}
public void setFiles(List<SysMessageFile> files) {
this.files = files;
}
public String getDelFlag() {
return delFlag;
}
public void setDelFlag(String delFlag) {
this.delFlag = delFlag;
}
public void setId(Long id)
{
this.id = id;
}
public Long getId()
{
return id;
}
public void setFileName(String fileName)
{
this.fileName = fileName;
}
public String getFileName()
{
return fileName;
}
public void setFileType(String fileType)
{
this.fileType = fileType;
}
public String getFileType()
{
return fileType;
}
public void setIntroduction(String introduction)
{
this.introduction = introduction;
}
public String getIntroduction()
{
return introduction;
}
@Override
public String toString() {
return "SysMessage{" +
"id=" + id +
", fileName='" + fileName + '\'' +
", fileType='" + fileType + '\'' +
", introduction='" + introduction + '\'' +
", files=" + files +
", delFlag='" + delFlag + '\'' +
'}';
}
}
信息发布系统及附件增删改查功能(自动生成的就不写了)
信息发布系统的业务层:
@Service
public class SysMessageServiceImpl implements ISysMessageService
{
@Autowired
private SysMessageMapper sysMessageMapper;
@Autowired
private ISysMessageFileService sysMessageFileService;
@Autowired
private SysMessageFileMapper sysMessageFileMapper;
/**
* 查询信息发布系统
*
* @param id 信息发布系统ID
* @return 信息发布系统
*/
@Override
public SysMessage selectSysMessageById(Long id)
{
SysMessage sysMessage =sysMessageMapper.selectSysMessageById(id);
SysMessageFile file =new SysMessageFile();
file.setMessageId(sysMessage.getId());
sysMessage.setFiles(sysMessageFileService.selectSysMessageFileList(file));
return sysMessage;
}
/**
* 查询信息发布系统列表
*
* @param sysMessage 信息发布系统
* @return 信息发布系统
*/
@Override
public List<SysMessage> selectSysMessageList(SysMessage sysMessage)
{
List<SysMessage> list = sysMessageMapper.selectSysMessageList(sysMessage);
for(SysMessage item :list){
SysMessageFile file = new SysMessageFile();
file.setMessageId(item.getId());
List<SysMessageFile> files =sysMessageFileService.selectSysMessageFileList(file);
item.setFiles(files);
}
return list;
}
/**
* 新增信息发布系统
*
* @param sysMessage 信息发布系统
* @return 结果
*/
@Override
public int insertSysMessage(SysMessage sysMessage)
{
sysMessage.setCreateBy(SecurityUtils.getUsername());
sysMessage.setCreateTime(DateUtils.getNowDate());
int row = sysMessageMapper.insertSysMessage(sysMessage);
if(!CollectionUtils.isEmpty(sysMessage.getFiles())){
for(int j = 0;j<sysMessage.getFiles().size();j++){
SysMessageFile file =sysMessage.getFiles().get(j);
file.setMessageId(sysMessage.getId());
sysMessageFileService.insertSysMessageFile(file);
}
}
return row;
}
/**
* 修改信息发布系统
*
* @param sysMessage 信息发布系统
* @return 结果
*/
@Override
public int updateSysMessage(SysMessage sysMessage)
{
sysMessage.setUpdateBy(SecurityUtils.getUsername());
sysMessage.setUpdateTime(DateUtils.getNowDate());
List<SysMessageFile> fileList = sysMessage.getFiles();
if(!CollectionUtils.isEmpty(fileList)){
for (SysMessageFile file:fileList) {
if(file!=null){
file.setMessageId(sysMessage.getId());
sysMessageFileService.insertSysMessageFile(file);
}
}
// sysRepository.setFile(sysRepository.getFiles().get(0).getName());
}
return sysMessageMapper.updateSysMessage(sysMessage);
}
/**
* 批量删除信息发布系统
*
* @param ids 需要删除的信息发布系统ID
* @return 结果
*/
@Override
public int deleteSysMessageByIds(Long[] ids)
{
List<SysMessage> list = sysMessageMapper.selectSysMessageByIds(ids);
list.forEach(item->{
SysMessageFile file = new SysMessageFile();
file.setMessageId(item.getId());
sysMessageFileService.updateSysMessageFileByDelFlag(file);
});
return sysMessageMapper.deleteSysMessageByIds(ids);
}
/**
* 删除信息发布系统信息
*
* @param id 信息发布系统ID
* @return 结果
*/
@Override
public int deleteSysMessageById(Long id)
{
SysMessageFile file = new SysMessageFile();
file.setMessageId(id);
sysMessageFileService.updateSysMessageFileByDelFlag(file);
return sysMessageMapper.deleteSysMessageById(id);
}
}
Mapper及Mapper.xml
/**
*通过多个Id批量查询
*/
public interface SysMessageMapper
{
public List<SysMessage> selectSysMessageByIds(Long[] ids);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.SysMessageMapper">
<resultMap type="SysMessage" id="SysMessageResult">
<result property="id" column="id" />
<result property="fileName" column="file_name" />
<result property="fileType" column="file_type" />
<result property="introduction" column="introduction" />
<result property="createBy" column="create_by" />
<result property="createTime" column="create_time" />
<result property="updateBy" column="update_by" />
<result property="updateTime" column="update_time" />
</resultMap>
<sql id="selectSysMessageVo">
select id, file_name, file_type, introduction, create_by, create_time, update_by, update_time from sys_message
</sql>
<select id="selectSysMessageByIds" parameterType="Long" resultMap="SysMessageResult">
<include refid="selectSysMessageVo"/>
where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>
</select>
</mapper>
File功能:
ISysMessageFileService
public interface ISysMessageFileService
{
public int updateSysMessageFileByDelFlag(SysMessageFile sysMessageFile);
}
SysMessageFileServiceImpl:
@Service
public class SysMessageFileServiceImpl implements ISysMessageFileService
{
@Autowired
private SysMessageFileMapper sysMessageFileMapper;
/**
* 新增
*
* @param sysMessageFile
* @return 结果
*/
@Override
public int insertSysMessageFile(SysMessageFile sysMessageFile)
{
if(StringUtils.isEmpty(sysMessageFile.getName()))throw new UtilException("请填写文件名称");
if(StringUtils.isEmpty(sysMessageFile.getPath()))throw new UtilException("请填写文件路径");
return sysMessageFileMapper.insertSysMessageFile(sysMessageFile);
}
@Override
public int updateSysMessageFileByDelFlag(SysMessageFile sysMessageFile){
return sysMessageFileMapper.updateSysMessageFileByDelFlag(sysMessageFile);
}
}
FileMapper:
public interface SysMessageFileMapper
{
/**
* 新增
*
* @param sysMessageFile
* @return 结果
*/
public int insertSysMessageFile(SysMessageFile sysMessageFile);
public int updateSysMessageFileByDelFlag(SysMessageFile sysMessageFile);
Mapper.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.system.mapper.SysMessageFileMapper">
<resultMap type="SysMessageFile" id="SysMessageFileResult">
<result property="id" column="id" />
<result property="messageId" column="message_id" />
<result property="name" column="name" />
<result property="path" column="path" />
<result property="delFlag" column="del_flag" />
</resultMap>
<sql id="selectSysMessageFileVo">
select id, message_id, name, path, del_flag from sys_message_file
</sql>
<update id="updateSysMessageFileByDelFlag" parameterType="SysMessageFile">
update sys_message_file set del_flag = '2' where message_id = #{messageId}
</update>
</mapper>