SpringBoot(三)

复杂的结构的加载过程

例如文章中需要关联用户基本信息表示文章作者
数据表情况

id( 文章编号 )u_id( 作者 id)content( 文章内容 )pub_time( 发布时间 )

Java 类

public class Article {
    // 文章编号
    private int id;
    // 文章内容
    private String content;
    // 发布时间
    private String pubTime;
    // 发布者
    private User author;
    ...
}

定义数据接口:

@Mapper
public interface ArticleMapper {

    public List<Article> getAllArticles();
}

接口配置:

<?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.example.springdemo.mapper.ArticleMapper">
    <select id="getAllArticles" resultMap="articleResult">
        select * from articles
    </select>
    <resultMap type="com.example.springdemo.bean.Article"
        id="articleResult">
        <id property="id" column="id" />
        <result property="content" column="content" />
        <result property="pubTime" column="pub_time" />
        <association property="author" column="u_id"
            javaType="com.example.springdemo.bean.User"
            select="com.example.springdemo.mapper.UserMapper.getUserById">
        </association>
    </resultMap>
</mapper>
association 标签表示关联一个对象其中 select 属性就是通过子查询找到该对象内容

文件上传

可以在服务端中接收 MultipartFile 获取文件信息,比如注册时上传头像 ( 单个 )

@RequestMapping(value = "/regist", method = RequestMethod.POST)
public String regist(@RequestParam("nick") String userName,
        @RequestParam("psw") String password, String sex,
        Integer age, @RequestParam("photo") MultipartFile file) {
    //  检测用户名是否存在
    int count = userMapper.checkUserExist(userName);
    if (count > 0) {
        //  已经存在
        return Commom.fail(" 用户名已存在 ");
    } else {
        String photoPath = "";
        if (file != null && !file.isEmpty()) {
            String fileName = System.currentTimeMillis() + ".jpg";
            FileOutputStream out = null;
            try {
                out = new FileOutputStream(Commom.PHOTO_PATH + fileName);
                byte[] bytes = file.getBytes();
                out.write(bytes);
                out.flush();
                //  拟定一个相对路径保存在数据库中
                photoPath = "/images/" + fileName;
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (null != out) {
                    try {
                        out.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        int r = userMapper.addUser(userName, password, sex, age,photoPath);
        if (r > 0) {
            return Commom.success(" 注册成功 ");
        } else {
            return Commom.fail(" 注册失败 ");
        }
    }
}

注意:数据库一般保存的是文件的相对地址,在需要下载的时候拼接下载地址,在服务端中关联绝对地址, springBoot 中可以添加如下的配置,来实现映射

@Configuration
public class FileConfig extends WebMvcConfigurerAdapter {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 映射 将 /images/** -->file:/D:/photos/      registry.addResourceHandler("/images/**").addResourceLocations("file:/"+Commom.PHOTO_PATH);
        super.addResourceHandlers(registry);
    }
}
文件上传的通用处理

直接从 MultipartHttpServletRequest 中检测文件情况,依次遍历出上传的文件,

关键代码:

 Map<String, MultipartFile> files = ((MultipartHttpServletRequest) request).getFileMap();
@RequestMapping(value = "/publish", method = RequestMethod.POST)
public String publishArticle(Integer user_id, String text, HttpServletRequest request) {
    StringBuilder sb = new StringBuilder();
    sb.append("{\"text\":\"").append(text);
    sb.append("\",\"images\":[");
    //  填充图片地址
    Map<String, MultipartFile> files = ((MultipartHttpServletRequest) request).getFileMap();
    if (null != files) {
        boolean isHasFiles = false;
        //  使用迭代器遍历所上传的文件
        Iterator<Map.Entry<String, MultipartFile>> it = files.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry<String, MultipartFile> entry = it.next();
            // // 获取上传的参数
            // String key = entry.getKey();
            MultipartFile f = entry.getValue();
            if (null != f && !f.isEmpty()) {
                //  保存到 D:/photos/ 下
                String fileName = System.currentTimeMillis() + ".jpg";
                FileOutputStream out = null;
                    try {
                        out = new FileOutputStream(Commom.PHOTO_PATH + fileName);
                        out.write(f.getBytes());
                        out.flush();
                        //  记录相对路径
                        String path = "/images/" + fileName;
                        sb.append("\"").append(path).append("\",");
                        isHasFiles = true;
                    } catch (Exception e) {
                    } finally {
                        if (null != out) {
                            try {
                                out.close();
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }
                    }
                }
            }
            // ["/images/123.jpg","/images/456.jpg",
            //abc,
            if (isHasFiles) {
                int len = sb.length();
                sb.replace(len - 1, len, "");
            }
        }
        sb.append("]}");
        int r = articleMapper.addArticle(user_id, sb.toString(), String.valueOf(System.currentTimeMillis()));
        if (r > 0) {
            return Commom.success(" 发布成功 ");
        } else {
            return Commom.fail(" 发布失败 ");
        }
    }

这样文件的上传处理大致就完成了!租后说一下SpringBoot项目的打包

SpringBoot 项目的打包

1 、项目上有单击 –>Run As–>Run As Configration…

第一次进入时需要在左侧的列表中找到 maven build, 右单击 -->New ,分别输入
a 、在 Base directory 点击 Workspace 选择项目
b 、在 Name 中输入名称 ( 一般用项目名 )
c 、在 Goals 输入 package

2 、如果是有默认的编译过,则直接在配置界面上找到 Main ,在在 Goals 输入 package
3 、 Apply–>Run
4 、使用,在 target 文件夹下找到 xxx.jar 包,复制到要部署的文件夹中,进入控制台 (cmd), 进入 jar 包所在的位置,执行

java -jar xxx.jar

注意:处理 mybatis 的数据操作时, Mapper 接口的 xml 配置的包名以及文件名要跟 Mapper 接口的包名以及文件名相同,如:
com.example.springdemo.mapper.UserMapper.java 对应的配置为 com/example/springdemo/mapper/UserMapper.xml

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值