java: framework from BLL、DAL、IDAL、MODEL、Factory using postgresql 17.0

postgresql sql:

sql 复制代码
CREATE TABLE School (
    SchoolId CHAR(5) PRIMARY KEY,  -- 主键
    SchoolName VARCHAR(500) NOT NULL,
    SchoolTelNo VARCHAR(8) NULL
);
 
 
CREATE OR REPLACE FUNCTION addschool(
    p_school_id CHAR(5),
    p_school_name VARCHAR(500),
    p_school_tel_no VARCHAR(8)
) RETURNS VOID AS $$
BEGIN
    INSERT INTO School (SchoolId, SchoolName, SchoolTelNo)
    VALUES (p_school_id, p_school_name, p_school_tel_no);
END;
$$ LANGUAGE plpgsql;
 
 
CREATE OR REPLACE FUNCTION deleteschool(
    p_school_id CHAR(5)
) RETURNS VOID AS $$
BEGIN
    DELETE FROM School WHERE SchoolId = p_school_id;
END;
$$ LANGUAGE plpgsql;
 
 
CREATE OR REPLACE FUNCTION updateschool(
    p_school_id CHAR(5),
    p_school_name VARCHAR(500),
    p_school_tel_no VARCHAR(8)
) RETURNS VOID AS $$
BEGIN
    UPDATE School
    SET SchoolName = p_school_name, SchoolTelNo = p_school_tel_no
    WHERE SchoolId = p_school_id;
END;
$$ LANGUAGE plpgsql;
 
 
CREATE OR REPLACE FUNCTION getschoolbyid(
    p_school_id CHAR(5)
) RETURNS TABLE (
    SchoolId CHAR(5),
    SchoolName VARCHAR(500),
    SchoolTelNo VARCHAR(8)
) AS $$
BEGIN
    RETURN QUERY
    SELECT SchoolId, SchoolName, SchoolTelNo
    FROM School
    WHERE SchoolId = p_school_id;
END;
$$ LANGUAGE plpgsql;
 
 
DROP FUNCTION IF EXISTS getallschools();
CREATE OR REPLACE FUNCTION getallschools()
RETURNS TABLE (
    school_id CHAR(5),
    school_name VARCHAR(500),
    school_tel_no VARCHAR(8)
) AS $$
BEGIN
    RETURN QUERY
    SELECT School.SchoolId, School.SchoolName, School.SchoolTelNo
    FROM School;
END;
$$ LANGUAGE plpgsql;

java: 只需写DAL有点区别,其它和上篇基本一样

java 复制代码
/**
 * encoding: utf-8
 * 版权所有 2025 涂聚文有限公司
 * 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
 * 描述:
 * # Author    : geovindu,Geovin Du 涂聚文.
 * # IDE       : IntelliJ IDEA 2023.1 Java 21
 * # database  : Oracle21c,MySQL 9.0,SQL Server 2019,PostgreSQL 17.1
 * # OS        : window10
 * # Datetime  : 2025 - 2025/2/9 - 16:36
 * # User      : geovindu
 * # Product   : IntelliJ IDEA
 * # Project   : oracledemo
 * # File      : DAL/SchoolDAL.java  类
 * # explain   : 学习
 **/
 
package Geovin.DAL;
import java.sql.*;
import java.sql.Driver.*;
 
import java.util.ArrayList;
import java.util.List;
import Geovin.Model.School;
import Geovin.Interface.ISchool;
import Geovin.UtilitieDB.SqlHelper;
 
/**
 * 数据处理
 */
public class SchoolDAL implements ISchool {
 
 
    /**
     * 构造方法
     */
    public SchoolDAL() {
    }
 
    /**
     *
     * @param school
     */
    @Override
    public void addSchool(School school) {
        String sql = "INSERT INTO School (SchoolId, SchoolName, SchoolTelNo) VALUES (?, ?, ?)";
        try (PreparedStatement pstmt = SqlHelper.getConnect().prepareStatement(sql)) {
            pstmt.setString(1, school.getSchoolId());
            pstmt.setString(2, school.getSchoolName());
            pstmt.setString(3, school.getSchoolTelNo());
            pstmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
 
    /**
     *
     * @param schoolId
     */
    @Override
    public void deleteSchool(String schoolId) {
        String sql = "DELETE FROM School WHERE SchoolId = ?";
        try (PreparedStatement pstmt = SqlHelper.getConnect().prepareStatement(sql)) {
            pstmt.setString(1, schoolId);
            pstmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
 
    /**
     *
     * @param school
     */
    @Override
    public void updateSchool(School school) {
        String sql = "UPDATE School SET SchoolName = ?, SchoolTelNo = ? WHERE SchoolId = ?";
        try (PreparedStatement pstmt = SqlHelper.getConnect().prepareStatement(sql)) {
            pstmt.setString(1, school.getSchoolName());
            pstmt.setString(2, school.getSchoolTelNo());
            pstmt.setString(3, school.getSchoolId());
            pstmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
 
    /**
     *
     * @param schoolId
     * @return
     */
    @Override
    public School getSchoolById(String schoolId) {
        String sql = "SELECT * FROM School WHERE SchoolId = ?";
        try (PreparedStatement pstmt = SqlHelper.getConnect().prepareStatement(sql)) {
            pstmt.setString(1, schoolId);
            ResultSet rs = pstmt.executeQuery();
            if (rs.next()) {
                return new School(
                        rs.getString("SchoolId"),
                        rs.getString("SchoolName"),
                        rs.getString("SchoolTelNo")
                );
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
 
    /**
     *
     * @return
     */
    @Override
    public List<School> getAllSchools() {
        List<School> schools = new ArrayList<>();
        String sql = "SELECT * FROM School";
        try (Statement stmt =SqlHelper.getConnect().createStatement();
             ResultSet rs = stmt.executeQuery(sql)) {
            while (rs.next()) {
                schools.add(new School(
                        rs.getString("SchoolId"),
                        rs.getString("SchoolName"),
                        rs.getString("SchoolTelNo")
                ));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return schools;
    }
 
    /**
     * 储存过程 添加
     * @param school
     * @return
     */
    public boolean addProc(School school) {
        String sql = "{call ADDSCHOOL(?,?,?)}";
        try (
             CallableStatement cstmt = SqlHelper.getConnect().prepareCall(sql)) {
            cstmt.setString(1, school.getSchoolId());
            cstmt.setString(2, school.getSchoolName());
            cstmt.setString(3, school.getSchoolTelNo());
            cstmt.execute();
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
    }
 
    /**
     * 储存过程
     * @param schoolId
     * @return
     */
    public boolean deleteProc(String schoolId) {
        String sql = "{call DELETESCHOOL(?)}";
        try (
             CallableStatement cstmt = SqlHelper.getConnect().prepareCall(sql)) {
            cstmt.setString(1, schoolId);
            cstmt.execute();
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
    }
 
    /**
     * 储存过程
     * @param school
     * @return
     */
    public boolean updateProc(School school) {
        String sql = "{call UPDATESCHOOL(?,?,?)}";
        try (
             CallableStatement cstmt = SqlHelper.getConnect().prepareCall(sql)) {
            cstmt.setString(1, school.getSchoolId());
            cstmt.setString(2, school.getSchoolName());
            cstmt.setString(3, school.getSchoolTelNo());
            cstmt.execute();
            return true;
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
    }
 
    /**
     * 储存过程
     * @param schoolId
     * @return
     */
    public School getProcById(String schoolId) {
        String sql = "{call GETSCHOOLBYID(?,?)}";
        try (
             CallableStatement cstmt = SqlHelper.getConnect().prepareCall(sql)) {
            cstmt.setString(1, schoolId);
            cstmt.registerOutParameter(2, Types.OTHER);
            cstmt.execute();
            ResultSet rs = (ResultSet) cstmt.getObject(2);
            if (rs.next()) {
                String id = rs.getString("SchoolId");
                String name = rs.getString("SchoolName");
                String telNo = rs.getString("SchoolTelNo");
                return new School(id, name, telNo);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
 
    /**
     * 储存过程
     * @return
     */
    public List<School> getAllProc() {
        List<School> schoolList = new ArrayList<>();
        String sql = "select * from getallschools()";
        try (
             CallableStatement cstmt = SqlHelper.getConnect().prepareCall(sql)) {
            //cstmt.registerOutParameter(1, Types.OTHER);
            //cstmt.execute();
            ResultSet rs = cstmt.executeQuery();//(ResultSet) cstmt.getObject(1);
            while (rs.next()) {
                String id = rs.getString("school_id");
                String name = rs.getString("school_name");
                String telNo = rs.getString("school_tel_no");
                schoolList.add(new School(id, name, telNo));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return schoolList;
    }
 
}

调用:

java 复制代码
/**
 * encoding: utf-8
 * 版权所有 2025 涂聚文有限公司
 * 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
 * 描述:https://jdbc.postgresql.org/download/
 * # Author    : geovindu,Geovin Du 涂聚文.
 * # IDE       : IntelliJ IDEA 2023.1 Java JDK 21
 * # database  : Oracle 21c
 * # OS        : window10
 * # Datetime  : 2025 - 2025/2/9 - 12:27
 * # User      : geovindu
 * # Product   : IntelliJ IDEA
 * # Project   : oracledemo
 * # File      : Main.java  类
 * # explain   : 学习
 **/
 
 
import Geovin.BLL.SchoolBLL;
import Geovin.Model.School;
 
 
public class Main {
    public static void main(String[] args) {
 
        SchoolBLL schoolBLL = new SchoolBLL();
        //sql
        //schoolBLL.getAllSchools().forEach(System.out::println);
        System.out.println(schoolBLL.getSchoolById("U0001").getSchoolName());
        schoolBLL.getAllProc().forEach(System.out::println);
        System.out.println("Hello Java world!");
    }
}

输出:

相关推荐
朦胧之8 小时前
AI 编程-老项目改造篇
java·前端·后端
程序猿大帅12 小时前
别再只当调包侠了:用 Spring AI 落地 Function Calling,我被大模型硬生生砸出了三个大坑
java
程序员晓琪13 小时前
约定大于配置:基于 Java 包名自动生成 API 版本路由的最佳实践
java·spring boot·后端
Flittly13 小时前
【AgentScope Java新手村系列】(11)中断与恢复
java·spring boot·spring
众少成多积小致巨14 小时前
JNI (Java Native Interface) 技术手册中文参考指南
android·java·c++
东坡白菜14 小时前
破局全栈:前端开发的Java入门实战记录—JPA(2)
java·后端
SimonKing20 小时前
艹,维护AI写的代码,我心态崩了......
java·后端·程序员
用户2986985301421 小时前
Java Word 文档样式进阶:段落与文本背景色设置完全指南
java·后端
小bo波2 天前
从"任意文件复制"深挖Java I/O:字符流与字节流的本质抉择
java·nio·io流·后端开发·文件复制
nanxun8863 天前
记一次诡异的 Docker 容器"串包"故障排查
java