重构代码好方法之函数式编程

haipali / 2023-07-17 / 原文

在日常编码中,总会出现不同功能有相似之处,比如Session的连接与关闭啊,等等等等
为了整理代码以获取眼睛的纯净,可以使用函数式编码
步骤:
重要的事说一遍
第一步:定义函数式接口

第二步:定义模板方法

第三步:传递lambda表达式

  1. 创建函数式接口
@FunctionalInterface
public interface DbOperation<R> {
    /**
     * 通用操作数据库接口
     * @param session 数据库连接session
     * @param mapperId 关联mapper文件id操作
     * @param params 操作参数
     * @return 返回值,R泛型
     */
    R operate(SqlSession session, String mapperId, Object params);
}
  1. 定义模板方法
    以定义的函数式接口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();
            }
        }
    }
  }
  1. 使用Lambda表达式连接
// 使用lambda传递具体的行为
Student studentObj = commonDao.proccess(
        (session, mappperId, params) -> session.selectOne(mappperId, params),
        mapperId, studentNo);