重构代码好方法之函数式编程
在日常编码中,总会出现不同功能有相似之处,比如Session的连接与关闭啊,等等等等
为了整理代码以获取眼睛的纯净,可以使用函数式编码
步骤:
重要的事说一遍
第一步:定义函数式接口
第二步:定义模板方法
第三步:传递lambda表达式
- 创建函数式接口
@FunctionalInterface
public interface DbOperation<R> {
/**
* 通用操作数据库接口
* @param session 数据库连接session
* @param mapperId 关联mapper文件id操作
* @param params 操作参数
* @return 返回值,R泛型
*/
R operate(SqlSession session, String mapperId, Object params);
}
- 定义模板方法
以定义的函数式接口DbOperation为例
public class CommonDao<R> {
public R proccess(DbOperation<R> dbOperation, String mappperId, Object params) {
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
SqlSession session = null;
try {
session = sqlSessionFactory.openSession();
// 核心操作
return dbOperation.operate(session, mappperId, params);
} finally {
if (session != null) {
session.close();
}
}
}
}
- 使用Lambda表达式连接
// 使用lambda传递具体的行为
Student studentObj = commonDao.proccess(
(session, mappperId, params) -> session.selectOne(mappperId, params),
mapperId, studentNo);