分页插件、文件上传、参数配置化和引用配置参数

一、通过分页插件实现分页查询

1、在pom.xml引入依赖

<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.4.2</version>
</dependency>

2、EmpMapper

public interface EmpMapper {
    //获取当前页的结果列表
    @Select("select * from emp where ....")
    public List<Emp> page(....条件参数...);
}

3、EmpServiceImpl

@Override
public PageBean page(Integer page, Integer pageSize) {
    // 设置分页参数
    PageHelper.startPage(page, pageSize); 
    // 执行分页查询
    List<Emp> empList = empMapper.list(name,gender,begin,end); //此参数为条件查询的条件
    // 获取分页结果
    Page<Emp> p = (Page<Emp>) empList;   
    //封装PageBean
    PageBean pageBean = new PageBean(p.getTotal(), p.getResult()); ->自行定义的一个类,两个属性,一个总数量,一个数据集合
    return pageBean;
}

二、文件上传

文件上传,由前端发起,后端需要选定参数进行接收,一般采用MultipartFile属性进行接收,

MultipartFile常用方法:

      • String getOriginalFilename(); //获取原始文件名
      • void transferTo(File dest); //将接收的文件转存到磁盘文件中
      • long getSize(); //获取文件的大小,单位:字节
      • byte[] getBytes(); //获取文件内容的字节数组
      • InputStream getInputStream(); //获取接收到的文件内容的输入流

示例代码:

    @PostMapping("/upload")
    public Result upload(String username, Integer age, MultipartFile image) throws IOException {
        log.info("文件上传:{},{},{}",username,age,image);

        //获取原始文件名
        String originalFilename = image.getOriginalFilename();

        //将文件存储在服务器的磁盘目录
        image.transferTo(new File("E:/images/"+originalFilename));

        return Result.success();
    }

将文件上传至云:

    //文件上传
    @PostMapping("/upload")
    public Result uploadFile(MultipartFile image) throws Exception {
        //文件后缀
        String sufxx = image.getOriginalFilename().substring(image.getOriginalFilename().lastIndexOf("."));
        //随机生成文件名称
        String fileName = UUID.randomUUID().toString()+sufxx;
       // image.transferTo(new File("tlias_web/utils" + fileName));

        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = "https://oss-cn-beijing.aliyuncs.com/";
        // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "wzp11";
        // 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
        String objectName = fileName;

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint,"LTAI5t5vFYFq8REpU7bAejhe",
                "h0g4yrhtJQOSN3BB4T1lpsAeDBj7yn");

        try {
            String content = "Hello OSS";
            PutObjectResult putObject = ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(image.getBytes()));
            log.error(putObject+"---------------------------------------------");

        }  finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }

        String url = "https://"+bucketName+"."+endpoint.split("//")[1]+fileName;

        return Result.success(aliOSSUtils.upload(image));
    }

三、参数配置化

在系统中某些容易发生修改的常量最好不要写死在代码中,例如数据库连接的信息,我们可已将这些信息写入到配置文件中,然后在代码中去读取,这样就算数据库连接信息发生变化,我们也不需要去修改代码,只需要修改配置文件即可,关于数据库连接信息,mybatis已经完成了参数配置化,这里我们使用一个云oss存储进行代码示例:

参数说明:

  • endpoint //alyunOSS域名
  • accessKeyID //用户身份ID
  • accessKeySecret //用户密钥
  • bucketName //存储空间的名字

1、将上述参数写入配置文件;

#自定义的云OSS配置信息
aliyun.oss.endpoint=https://oss-cn-hangzhou.aliyuncs.com
aliyun.oss.accessKeyId=LTAI4GCH1vX6DKqJWxd6nEuW
aliyun.oss.accessKeySecret=yBshYweHOpqDuhCArrVHwIiBKpyqSL
aliyun.oss.bucketName=web-tlias

2、读取配置文件:

@Component
public class AliOSSUtils {

    @Value("${aliyun.oss.endpoint}")
    private String endpoint;
    
    @Value("${aliyun.oss.accessKeyId}")
    private String accessKeyId;
    
    @Value("${aliyun.oss.accessKeySecret}")
    private String accessKeySecret;
    
    @Value("${aliyun.oss.bucketName}")
    private String bucketName;
     
     //省略其他代码...
 }  

通过上述两步即可完成参数配置化,已经配置参数的引用,这是基于spring项目原始的配置文件application.properties进行的。

上述代码虽然已经完成了配置参数,但是引用起来也有点繁琐,在每个参数都需要添加@value去引用,如果能将同一类的参数直接封装成对象,供代码调用,那么就会更方便,这时候就引用了另外一种配置文件,yml/yaml,相较于传统的properties配置文件,yml配置文件,结构更加清晰,可读写性更好。

properties配置文件:

yml配置文件:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/tlias
    username: root
    password: 1234
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 100MB
      
mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true
    
aliyun:
  oss:
    endpoint: https://oss-cn-hangzhou.aliyuncs.com
    accessKeyId: LTAI4GCH1vX6DKqJWxd6nEuW
    accessKeySecret: yBshYweHOpqDuhCArrVHwIiBKpyqSL
    bucketName: web-397

3、配置参数的批量引入:@ConfigurationProperties

当我们替换原始的properties配置文件为yml格式后我们即可使用@ConfigurationProperties注解批量引用同一类型的参数到一个实体类中

/*云OSS相关配置*/
@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliOSSProperties {
    //区域
    private String endpoint;
    //身份ID
    private String accessKeyId ;
    //身份密钥
    private String accessKeySecret ;
    //存储空间
    private String bucketName;
}

后续使用即可直接调用这个类的参数

@Component //当前类对象由Spring创建和管理
public class AliOSSUtils {

    //注入配置参数实体类对象
    @Autowired
    private AliOSSProperties aliOSSProperties;
   
    
    /**
     * 实现上传图片到OSS
     */
    public String upload(MultipartFile multipartFile) throws IOException {
        // 获取上传的文件的输入流
        InputStream inputStream = multipartFile.getInputStream();

        // 避免文件覆盖
        String originalFilename = multipartFile.getOriginalFilename();
        String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));

        //上传文件到 OSS
        OSS ossClient = new OSSClientBuilder().build(aliOSSProperties.getEndpoint(),
                aliOSSProperties.getAccessKeyId(), aliOSSProperties.getAccessKeySecret());
        ossClient.putObject(aliOSSProperties.getBucketName(), fileName, inputStream);

        //文件访问路径
        String url =aliOSSProperties.getEndpoint().split("//")[0] + "//" + aliOSSProperties.getBucketName() + "." + aliOSSProperties.getEndpoint().split("//")[1] + "/" + fileName;

        // 关闭ossClient
        ossClient.shutdown();
        return url;// 把上传到oss的路径返回
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值