前言
自己学习这套课程,到毕业季找到工作,再到入职几个月,已经过去好长时间了,现在还没有学完这个课程也是惭愧,现在准备把这部分课程补完,不过不会像以前那样写的那么细了,毕竟自己工作那么一段时间,里面有些东西已经烂熟于心了,那么接下来就会记录课程中一些自己不太熟悉的内容,作为查漏补缺吧~
1、读取配置文件
自己现在的项目是使用spring cloud的配置中心,写配置只需要bean加个注解就好了,现在再看这个课程的写法还是有可以借鉴的地方的。
/**
* 读取配置文件的工具类,当然在这里限制了读happymall.properties这个文件
*/
public class PropertiesUtil {
private static Logger logger = LoggerFactory.getLogger(PropertiesUtil.class);
private static Properties props;
//写一点老生长谈的基础内容,一个类加载,静态块优于普通代码块,优于构造函数
//且静态块只加载一次
static {
String fileName = "happymall.properties";
props = new Properties();
try {
// getClassLoader().getResourceAsStream(fileName)其实就是一般获取resources文件夹下面文件的方法
// 因为打成jar包后,通过文件路径无法访问到文件,但是可以通过这个方法获取输入流
props.load(new InputStreamReader(PropertiesUtil.class.getClassLoader().getResourceAsStream(fileName),"UTF-8"));
} catch (IOException e) {
logger.error("配置文件读取异常",e);
}
}
public static String getProperty(String key){
String value = props.getProperty(key.trim());
if(StringUtils.isBlank(value)){
return null;
}
return value.trim();
}
public static String getProperty(String key,String defaultValue){
String value = props.getProperty(key.trim());
if(StringUtils.isBlank(value)){
value = defaultValue;
}
return value.trim();
}
}
2、Mybatis-pagehelper的具体使用
下面简单记录一下pagehelper的使用方法
pagehelper 会使用AOP,在PageHelper.startPage后面第一条mapper操作上加上分页的SQL
//startPage-start
PageHelper.startPage(pageNum, pageSize);
//填充自己的sql查询逻辑
List<Product> productList = productMapper.selectList();
//pageHelper-收尾
PageInfo pageResult = new PageInfo(productList);
3、mybatis的where标签
mybatis 的where标签,这个之前用的少,突然发现还是有点用的,记录一下,where标签会自动将第一个and或者or去掉,方便我们拼装多种条件判断
<where>
<if test="productName != null">
AND name LIKE #{productName}
</if>
<if test="productId != null">
AND id = #{productId}
</if>
</where>
4、ftp服务器调用
现在在大公司里面有专门的文件存储服务,只要引用jar包并适当配置就可以直接使用方法上传,不需要自己搞ftp服务器了,但是感觉作为一项技能掌握以下还是很好的,万一以后去小公司了呢····
这里把视频教学中的代码拿出来记录一下,为以后提供一个参考。
public class FTPUtil {
public static final Logger logger = LoggerFactory.getLogger(FTPUtil.class);
private static String ftpIp = PropertiesUtil.getProperty("ftp.server.ip");
private static String ftpUser = PropertiesUtil.getProperty("ftp.user");
private static String ftpPass = PropertiesUtil.getProperty("ftp.pass");
public FTPUtil(String ip, int port, String user, String pwd) {
this.ip = ip;
this.port = port;
this.user = user;
this.pwd = pwd;
}
public static boolean upload(List<File> fileList) throws IOException {
FTPUtil ftpUtil = new FTPUtil(ftpIp,21,ftpUser,ftpPass);
logger.info("开始连接FTP服务器");
//异常抛出,这样在服务层能够有相应的处理
boolean result = ftpUtil.upload("img", fileList);
logger.info("开始连接FTP服务器,结束上传,上传结果:{}", result);
return result;
}
private boolean upload(String remotePath, List<File> fileList) throws IOException {
boolean uploaded = true;
FileInputStream fis = null;
//连接FTP服务器
if(connectServer(this.ip, this.port, this.user, this.pwd)) {
try {
//这样可以修改文件目录
ftpClient.changeWorkingDirectory(remotePath);
//设置缓冲区
ftpClient.setBufferSize(1024);
ftpClient.setControlEncoding("UTF-8");
//设置为二进制编码形式可以防止乱码
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
//打开本地被动模式,详见vsftp安装
ftpClient.enterLocalPassiveMode();
//然后可以开始上传
for(File fileItem : fileList) {
fis = new FileInputStream(fileItem);
ftpClient.storeFile(fileItem.getName(), fis);
}
} catch (IOException e) {
logger.error("上传文件异常",e);
uploaded = false;
} finally {
//要释放连接,不然会占用资源,时间长了会有问题
// 这里释放资源的写法也不是很安全
fis.close();
ftpClient.disconnect();
}
}
return uploaded;
}
private boolean connectServer(String ip, int port, String user, String pwd) {
ftpClient = new FTPClient();
boolean isSuccess = false;
try {
ftpClient.connect(ip);
isSuccess = ftpClient.login(user, pwd);
} catch (IOException e) {
logger.error("连接FTP服务器异常",e);
}
return isSuccess;
}
private String ip;
private int port;
private String user;
private String pwd;
private FTPClient ftpClient;
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public FTPClient getFtpClient() {
return ftpClient;
}
public void setFtpClient(FTPClient ftpClient) {
this.ftpClient = ftpClient;
}
}
5、富文本处理
这里我没有试过前端的simditor,这里做个记录,可以使用这个玩意儿。
最后
毕竟我本人也工作一年左右了,现在回顾起来这些内容,大部分在工作中也碰到过了,值得记录的东西不多了,但还是感谢这个实战项目把我领进门的。后续还有一点云服务器的部署课程,看情况再补充一些吧。