一、通过分页插件实现分页查询
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的路径返回
}
}