java: framework from BLL、DAL、IDAL、MODEL、Factory, using MySql 8.0


sql script:

drop table BookKindList;
#书目录
create table BookKindList
(
    BookKindID INT NOT NULL AUTO_INCREMENT, #自动增加
    BookKindName nvarchar(500) not null,
    BookKindParent int null,
   PRIMARY KEY(BookKindID)  #主键
);
#删除
DELIMITER $$
DROP PROCEDURE IF EXISTS `geovindu`.`DeleteBookKind` $$
CREATE PROCEDURE `geovindu`.`DeleteBookKind` (IN param1 INT)
BEGIN
         Delete From bookkindlist WHERE BookKindID = param1;
END $$
DELIMITER ;

delete from bookkindlist WHERE BookKindID =10;


SELECT * FROM bookkindlist;
   
 execute DeleteBookKind(10);
 
 
 
#查询所有
DELIMITER $$
DROP PROCEDURE IF EXISTS `geovindu`.`proc_Select_BookKindListAll` $$
CREATE PROCEDURE `geovindu`.`proc_Select_BookKindListAll` ()
BEGIN
    SELECT * FROM bookkindlist;
END $$
DELIMITER ;
 
 DROP PROCEDURE proc_Select_BookKindListAll;
 
 
 
select * from  `geovindu`.`bookkindlist`;
SELECT * FROM bookkindlist;
 
#统计
DELIMITER $$
DROP PROCEDURE IF EXISTS `geovindu`.`BookKindCount` $$
CREATE PROCEDURE `geovindu`.`BookKindCount` (OUT param1ID INT)
BEGIN
        select COUNT(*) into param1ID  From bookkindlist;
END $$
DELIMITER ;
 
#更新
DELIMITER $$
DROP PROCEDURE IF EXISTS `geovindu`.`proc_Update_BookKindList` $$
CREATE PROCEDURE `geovindu`.`proc_Update_BookKindList` (IN param1ID Int,IN param1Name NVarChar(1000),IN param1Parent Int)
BEGIN
IF NOT EXISTS (SELECT * FROM BookKindList WHERE BookKindName=param1Name) then #如果存在相同的记录,不更新名称
UPDATE BookKindList
    SET
        BookKindName=param1Name ,
        BookKindParent=param1Parent
    where
        BookKindID=param1ID;
ELSE
    UPDATE BookKindList
    SET BookKindParent=param1Parent
    where
        BookKindID=param1ID;
END IF;
END $$
DELIMITER ;
 
 
#查询一条
DELIMITER $$
DROP PROCEDURE IF EXISTS `geovindu`.`proc_Select_BookKindList` $$
CREATE PROCEDURE `geovindu`.`proc_Select_BookKindList` (IN param1 INT)
BEGIN
        SELECT * FROM BookKindList WHERE BookKindID = param1;
END $$
DELIMITER ;
 
#插入一条
DELIMITER $$
DROP PROCEDURE IF EXISTS `geovindu`.`proc_Insert_BookKindList` $$
CREATE PROCEDURE `geovindu`.`proc_Insert_BookKindList` (IN param1Name NVarChar(1000),IN param1Parent Int)
BEGIN
        insert into BookKindList(BookKindName,BookKindParent) values(param1Name,param1Parent);
END $$
DELIMITER ;
 
#插入一条返回值
DELIMITER $$
DROP PROCEDURE IF EXISTS `geovindu`.`proc_Insert_BookKindOut` $$
CREATE PROCEDURE `geovindu`.`proc_Insert_BookKindOut` (IN param1Name NVarChar(1000),IN param1Parent Int,OUT ID INT)
BEGIN
     IF NOT EXISTS (SELECT * FROM BookKindList WHERE BookKindName=param1Name) then   #如果存在相同的记录,不添加
        INSERT INTO BookKindList (BookKindName,BookKindParent)VALUES(param1Name ,param1Parent);
        #set ID=Last_insert_id()
        SELECT LAST_INSERT_ID() into ID;
      end if;
END $$
DELIMITER ;

MODEL:

/*
 * 版权所有 2021 涂聚文有限公司
 * 许可信息查看:
 * 描述:实体类,连接MySQL
 *
 * 历史版本:  JDK 14.02
 * 数据库:My SQL 8.0
 * IDE: IntelliJ IDEA 2021.2.3
 * OS: Windows 10 x64
 * 2021-12-12 创建者 geovindu
 * 2021-12-15 添加 Lambda
 * 2021-12-15 修改:date
 * 接口类
 * 2021-12-15 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc BookKind.java
 * 配置文件:
 * driver=com.mysql.jdbc.Driver
 *url=jdbc\:mysql\://localhost\:3306/数据库名称
 *user=root
 *password=root
 *
 * */


package Geovin.Model;


/**
 * 实体类
 *@author geovindu  涂聚文 Geovin Du
 * @
 *
 * */
public class BookKind {
    //
    private int bookKindID;


    private String bookKindName;


    private int bookKindParent;
    /**
     * @param
     * @return  得到ID
     * */
    public int getBookKindID() {
        return bookKindID;
    }
    /**
     * @param bookKindID 设置输入参数
     *
     * */
    public void setBookKindID(int bookKindID) {
        this.bookKindID = bookKindID;
    }
    /**
     * @param
     * @return 得到目录名称
     * */
    public String getBookKindName() {
        return bookKindName;
    }
    /**
     * @param bookKindName 设置输入参数
     *
     * */
    public void setBookKindName(String bookKindName) {
        this.bookKindName = bookKindName;
    }
    /**
     * @param
     * @return 得到父节点的值
     * */
    public int getBookKindParent() {
        return bookKindParent;
    }
    /**
     * @param bookKindParent 设置输入参数
     *
     * */
    public void setBookKindParent(int bookKindParent) {
        this.bookKindParent = bookKindParent;
    }

}

DAL:

/*
 * 版权所有 2021 涂聚文有限公司
 * 许可信息查看:
 * 描述:DAL数据访问层  数据业务层,连接MySQL
 *
 * 历史版本:  JDK 14.02
 * 数据库:My SQL 8.0
 * IDE: IntelliJ IDEA 2021.2.3
 * OS: Windows 10 x64
 * 2021-12-12 创建者 geovindu
 * 2021-12-15 添加 Geovin Du
 * 2021-12-15 修改:涂聚文
 * 接口类
 * 2021-12-15 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc BookKindDAL.java
 * 配置文件:
 * driver=com.mysql.jdbc.Driver  com.mysql.cj.jdbc.Driver
 *url=jdbc\:mysql\://localhost\:3306/数据库名称
 *user=root
 *password=root
 *
 * */

//#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end
package Geovin.DAL;


import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.sql.*;
import java.lang.reflect.Parameter;

import Geovin.Interface.BookKindInterface;
import Geovin.UtilitieDB.MySqlHelper;
import Geovin.Model.*;
import Geovin.Interface.*;
import Geovin.Factory.*;

/**
 *#parse("File Header.java")
 * @apiNote 数据业务层
 * @deprecated
 * @Description
 * @projectName
 * @author  geovindu 涂聚文 Geovin Du
 * @date
 * @version 1.0
 *
 */

public class BookKindDAL implements BookKindInterface {


    /**
     * @param info 输入一个实体
     * @return 返回int 1 是否插入一条记录
     * @Description 添加一条记录
     * */
    public int Add(BookKind info)
    {
        int ok=0;
        ResultSet resultSet = null;
        try
        {
            String sql = "{call proc_Insert_BookKindList(?,?)}";
            String[] parameters = {info.getBookKindName(), String.valueOf(info.getBookKindParent()) };
            MySqlHelper.CallProc(sql,parameters);
            ok=1;
        }
        catch (Exception exception)
        {
            ok=0;
            exception.printStackTrace();
        }
        finally {
            MySqlHelper.close(resultSet, MySqlHelper.getCs(), MySqlHelper.getConnection());
        }


        return ok;

    }

    /**
     * @param info  输入实体
     * @return 返回值
     *
     * */
    public int AddOut(BookKind info)
    {
        int ok=0;
        ResultSet resultSet = null;
        try
        {
            String sql = "{call proc_Insert_BookKindOut(?,?,?)}"; //多少个参数,多少个问号,包括输入,输出参数后面,输入,输出的个数量要明晰
            String[] parameters = {info.getBookKindName(), String.valueOf(info.getBookKindParent()) };
            Integer[] out = { Types.INTEGER };
            CallableStatement cs=(CallableStatement)MySqlHelper.CallProcOutInt(sql,parameters,out);
            ok= cs.getInt(3);

        }
        catch (Exception exception)
        {
            ok=0;
            exception.printStackTrace();
        }
        finally {
            MySqlHelper.close(resultSet, MySqlHelper.getCs(), MySqlHelper.getConnection());
        }
        return ok;

    }
    /**
     * 添加返回值
     * @param info  输入实体
     * @param outValue 返回值
     * @return 返回值
     *
     * */
    public int AddOut(BookKind info,OutValue outValue)
    {
        int ok=0;
        ResultSet resultSet = null;
        try
        {
            String sql = "{call proc_Insert_BookKindOut(?,?,?)}";
            String[] parameters = {info.getBookKindName(), String.valueOf(info.getBookKindParent()) };
            Integer[] out = { Types.INTEGER };
            CallableStatement cs=(CallableStatement)MySqlHelper.CallProcOutInt(sql,parameters,out);
            outValue.setIntValue(cs.getInt(3));
            ok=cs.getInt(3);

        }
        catch (Exception exception)
        {
            ok=0;
            exception.printStackTrace();
        }
        finally {
            MySqlHelper.close(resultSet, MySqlHelper.getCs(), MySqlHelper.getConnection());
        }
        return ok;

    }
    /**
     *添加返回值
     * @param info 一个实体记录
     * @return
     *
     * */
    public int AddOut2(BookKind info)
    {
        int ok=0;
        ResultSet resultSet = null;
        try
        {
            String sql = "{call proc_Insert_BookKindOut(?,?,?)}";

            String[] parameters = {info.getBookKindName(), String.valueOf(info.getBookKindParent()),""};
            Integer out =Types.INTEGER;
            MySqlHelper.callProcInputAndOutPutString(sql,parameters);

            ok=out; //不是添加的ID值
        }
        catch (Exception exception)
        {
            ok=0;
            exception.printStackTrace();
        }
        finally {
            MySqlHelper.close(resultSet, MySqlHelper.getCs(), MySqlHelper.getConnection());
        }
        return ok;

    }


    /**
     * #parse("更新记录")
     * @param info  输入实体
     * @return 返回参数
     *
     * */
    public int Update(BookKind info) {

        int ok=0;
        ResultSet resultSet = null;
        try
        {
            String sql = "{call proc_Update_BookKindList(?,?,?)}";
            String[] parameters = {String.valueOf(info.getBookKindID()), info.getBookKindName(), String.valueOf(info.getBookKindParent()) };
            MySqlHelper.CallProc(sql,parameters);
            ok=1; //
        }
        catch (Exception exception)
        {
            ok=0;
            exception.printStackTrace();
        }
        finally {
            MySqlHelper.close(resultSet, MySqlHelper.getCs(), MySqlHelper.getConnection());
        }
        return ok;



    }
    /**
     * 查询一条记录
     * @param id
     * @return BookKind 指定查找的ID记录
     * @author geovindu
     * @date 2021-12-20
     * */
    public BookKind SelectSQLBookKindInfo(String id)
    {
        BookKind info=null;
        String sql = "SELECT * FROM BookKindList where BookKindID=?";
        String[] parameters = { id };
        try {
            info=new BookKind();
            ResultSet rs = MySqlHelper.DuexecuteQuery(sql, parameters);
            while (rs.next()) {

                info.setBookKindID(rs.getInt("BookKindID"));
                info.setBookKindName(rs.getString("BookKindName"));
                info.setBookKindParent(rs.getInt("BookKindParent"));

            }
            //return info;
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            MySqlHelper.close(MySqlHelper.getRs(), MySqlHelper.getPs(), MySqlHelper
                    .getConnection());
        }

        return info;
    }
    /**
     * 查询所有记录
     * @param
     * @return BookKind 所有记录
     * @date 2021-12-20
     * @author geovindu
     * */
    public ArrayList SelectSQLBookKindAll()
    {

        ArrayList list=new ArrayList();

        String sql = "SELECT * FROM BookKindList";

        try {
            BookKind info=null;
            ResultSet rs = MySqlHelper.DuexecuteQuery(sql,null);
            while (rs.next()) {
                info=new BookKind();
                info.setBookKindID(rs.getInt("BookKindID"));
                info.setBookKindName(rs.getString("BookKindName"));
                info.setBookKindParent(rs.getInt("BookKindParent"));
                list.add(info);
            }
            //return info;
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            MySqlHelper.close(MySqlHelper.getRs(), MySqlHelper.getPs(), MySqlHelper
                    .getConnection());
        }
        return list;
    }
    /**
     * 存储过程查询
     * @param
     *
     * */
    public ArrayList SelectSProcBookKindAll()
    {

        ArrayList list=new ArrayList();

        String sql = "call proc_Select_BookKindListAll()";

        try {
            BookKind info=null;
            ResultSet rs = MySqlHelper.ExecuteQueryProcData(sql,null);
            while (rs.next()) {
                info=new BookKind();
                info.setBookKindID(rs.getInt("BookKindID"));
                info.setBookKindName(rs.getString("BookKindName"));
                info.setBookKindParent(rs.getInt("BookKindParent"));
                list.add(info);
            }
            //return info;
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            MySqlHelper.close(MySqlHelper.getRs(), MySqlHelper.getPs(), MySqlHelper
                    .getConnection());
        }
        return list;
    }


}

edit:

/*
 * 版权所有 2021 涂聚文有限公司
 * 许可信息查看:
 * 描述:DAL数据访问层  数据业务层,连接MySQL
 *
 * 历史版本:  JDK 14.02
 * 数据库:My SQL 8.0
 * IDE: IntelliJ IDEA 2021.2.3
 * OS: Windows 10 x64
 * 2021-12-22 创建者 geovindu
 * 2021-12-25 添加 Lambda
 * 2021-12-25 修改:date
 * 接口类
 * 2021-12-25 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc GeovinDuDAL.java
 * 配置文件:
 * driver=com.mysql.jdbc.Driver  com.mysql.cj.jdbc.Driver
 *url=jdbc\:mysql\://localhost\:3306/数据库名称
 *user=root
 *password=root
 *
 * */

//#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end


package Geovin.DAL;

import java.awt.print.Book;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.sql.*;
import java.lang.reflect.Parameter;
import Geovin.Model.*;
import Geovin.UtilitieDB.DuMySqlHelper;


/**
 * 数据业务层操作
 * @author geovindu 涂聚文 Geovin Du
 * @version 1.0
 *
 *
 * */

public class GeovinDuDAL {

    DuMySqlHelper duMySqlHelperr=new DuMySqlHelper();

    /**
     *SQL 语句添加
     * @param bookKind
     * @return bool
     * */
    public Boolean AddSql(BookKind bookKind)
    {
        Boolean isok=false;
        String sql="INSERT INTO BookKindList(BookKindName,BookKindParent) values(? ,?)";
        ArrayList duParameters=new ArrayList();
        DuParameter duParameter=null;
        duParameter=new DuParameter();
        duParameter.setParameterValue(bookKind.getBookKindName());
        duParameter.setDataType("String");
        duParameters.add(duParameter);
        duParameter=new DuParameter();
        duParameter.setParameterValue(bookKind.getBookKindParent());
        duParameter.setDataType("int");
        duParameters.add(duParameter);
        isok=duMySqlHelperr.ExecuteInsertSql(sql,duParameters);
        return isok;

    }
    /**
     * 存储过程添加
     * @param bookKind
     * @return bool
     * **/
    public Boolean AddProc(BookKind bookKind)
    {
        Boolean isok=false;
        String sql="{CALL proc_Insert_BookKindList(? ,?)}";
        ArrayList duParameters=new ArrayList();
        DuParameter duParameter=null;
        duParameter=new DuParameter();
        duParameter.setParameterValue(bookKind.getBookKindName());
        duParameter.setDataType("String");
        duParameters.add(duParameter);
        duParameter=new DuParameter();
        duParameter.setParameterValue(bookKind.getBookKindParent());
        duParameter.setDataType("int");
        duParameters.add(duParameter);
        isok=duMySqlHelperr.ExecuteInsert(sql,duParameters);
        return  isok;

    }
    /**
     * 添加有返回值
     * @param bookKind 输入参数
     * @param outValue 返回参数
     * @return  bool 返回添加是否成功
     *
     * */
    public Boolean AddProc(BookKind bookKind,int outValue)
    {
        Boolean isok=false;
        String sql="{CALL proc_Insert_BookKindList(? ,?)}";
        ArrayList duParameters=new ArrayList();
        DuParameter duParameter=null;
        duParameter=new DuParameter();
        duParameter.setParameterValue(bookKind.getBookKindName());
        duParameter.setDataType("String");
        duParameters.add(duParameter);
        duParameter=new DuParameter();
        duParameter.setParameterValue(bookKind.getBookKindParent());
        duParameter.setDataType("int");
        duParameters.add(duParameter);
        isok=duMySqlHelperr.ExecuteInsertOutSingleInt(sql,duParameters,outValue);
        return  isok;

    }

    /**
     * 修改 sql
     * @param bookKind
     * @return  int
     * */
    public  int EditSQL(BookKind bookKind)
    {
        int isok=0;
        String sql="UPDATE BookKindList SET BookKindName=?,BookKindParent=? where BookKindID=?";
        ArrayList duParameters=new ArrayList();
        DuParameter duParameter=null;
        duParameter=new DuParameter();
        duParameter.setParameterValue(bookKind.getBookKindName());
        duParameter.setDataType("String");
        duParameters.add(duParameter);
        duParameter=new DuParameter();
        duParameter.setParameterValue(bookKind.getBookKindParent());
        duParameter.setDataType("int");
        duParameters.add(duParameter);
        duParameter.setParameterValue(bookKind.getBookKindID());
        duParameter.setDataType("int");
        duParameters.add(duParameter);
        isok=duMySqlHelperr.ExecuteUpdateSql(sql,duParameters);
        return isok;
    }
    /**
     *修改 存储过程
     * @param bookKind
     * @return  int
     * */
    public  int EditProc(BookKind bookKind)
    {
        int isok=0;
        String sql="CALL proc_Update_BookKindList(?,?,?)";
        ArrayList duParameters=new ArrayList();
        DuParameter duParameter=null;
        duParameter=new DuParameter();
        duParameter.setParameterValue(bookKind.getBookKindID());
        duParameter.setDataType("int");
        duParameters.add(duParameter);
        duParameter=new DuParameter();
        duParameter.setParameterValue(bookKind.getBookKindName());
        duParameter.setDataType("String");
        duParameters.add(duParameter);
        duParameter=new DuParameter();
        duParameter.setParameterValue(bookKind.getBookKindParent());
        duParameter.setDataType("int");
        duParameters.add(duParameter);
        isok=duMySqlHelperr.ExecuteUpdate(sql,duParameters);
        return isok;
    }
   /**
    * 删除 SQL语句
    * @param id
    * @return  int
    *
    * */
    public  int DelSQL(int id) {
        int isok=0;
        String sql="Delete From bookkindlist WHERE BookKindID =?";
        ArrayList duParameters=new ArrayList();
        DuParameter duParameter=null;
        duParameter=new DuParameter();
        duParameter.setParameterValue(id);
        duParameter.setDataType("int");
        duParameters.add(duParameter);
        isok= duMySqlHelperr.ExecuteDeletSql(sql,duParameters);
        return isok;
    }
    /**
     * 删除 存储过程语句
     * @param id
     * @return  int
     *
     * */
    public  int DelProc(int id) {
        int isok=0;
        String sql="{CALL DeleteBookKind(?)}";
        ArrayList duParameters=new ArrayList();
        DuParameter duParameter=null;
        duParameter=new DuParameter();
        duParameter.setParameterValue(id);
        duParameter.setDataType("int");
        duParameters.add(duParameter);
        isok= duMySqlHelperr.ExecuteDelte(sql,duParameters);
        return isok;
    }
    /**
     *SQL语句查询
     * @param id
     * @return
     * */
    public BookKind selectSQL(int id)
    {
        ResultSet resultSet=null;
        BookKind bookKind=null;
        String sql = "SELECT * FROM BookKindList where BookKindID=?";
        ArrayList duParameters=new ArrayList();
        DuParameter duParameter=null;
        duParameter=new DuParameter();
        duParameter.setParameterValue(id);
        duParameter.setDataType("int");
        duParameters.add(duParameter);
        try {

            resultSet = duMySqlHelperr.ExecuteQuery(sql, duParameters);
            while (resultSet.next()) {
                bookKind =new BookKind();
                bookKind.setBookKindID(resultSet.getInt("BookKindID"));
                bookKind.setBookKindName(resultSet.getString("BookKindName"));
                bookKind.setBookKindParent(resultSet.getInt("BookKindParent"));

            }
        }
        catch (Exception exception)
        {
            exception.printStackTrace();
        }
        return bookKind;

    }
    /**
     *存储过程语句
     * @param id
     * @return
     * */
    public BookKind selectProc(int id)
    {
        ResultSet resultSet=null;
        BookKind bookKind=null;
        String sql = "{CALL proc_Select_BookKindList(?)}";
        ArrayList duParameters=new ArrayList();
        DuParameter duParameter=null;
        duParameter=new DuParameter();
        duParameter.setParameterValue(id);
        duParameter.setDataType("int");
        duParameters.add(duParameter);
        try {

            resultSet = duMySqlHelperr.ExecuteQuery(sql, duParameters);
            while (resultSet.next()) {
                bookKind =new BookKind();
                bookKind.setBookKindID(resultSet.getInt("BookKindID"));
                bookKind.setBookKindName(resultSet.getString("BookKindName"));
                bookKind.setBookKindParent(resultSet.getInt("BookKindParent"));

            }
        }
        catch (Exception exception)
        {
            exception.printStackTrace();
        }
        return bookKind;

    }




    /**
     *SQL语句查询
     * @param
     * @return
     * */
    public ArrayList selectAllSQL()
    {
        ArrayList list=new ArrayList();
        ResultSet resultSet=null;
        BookKind bookKind=null;
        String sql = "SELECT * FROM BookKindList";
        try {

            resultSet = duMySqlHelperr.ExecuteQuery(sql, null);
            while (resultSet.next()) {
                bookKind =new BookKind();
                bookKind.setBookKindID(resultSet.getInt("BookKindID"));
                bookKind.setBookKindName(resultSet.getString("BookKindName"));
                bookKind.setBookKindParent(resultSet.getInt("BookKindParent"));
                list.add(bookKind);
            }
        }
        catch (Exception exception)
        {
            exception.printStackTrace();
        }
        return list;

    }
    /**
     *存储过程语句
     * @param
     * @return
     * */
    public ArrayList selectAllProc()
    {
        ArrayList list=new ArrayList();
        ResultSet resultSet=null;
        BookKind bookKind=null;
        String sql = "{CALL proc_Select_BookKindListAll()}";
        try {

            resultSet = duMySqlHelperr.ExecuteQuery(sql, null);
            while (resultSet.next()) {
                bookKind =new BookKind();
                bookKind.setBookKindID(resultSet.getInt("BookKindID"));
                bookKind.setBookKindName(resultSet.getString("BookKindName"));
                bookKind.setBookKindParent(resultSet.getInt("BookKindParent"));
                list.add(bookKind);
            }
        }
        catch (Exception exception)
        {
            exception.printStackTrace();
        }
        return list;

    }






}

IDAL:

/*
 * 版权所有 2021 涂聚文有限公司
 * 许可信息查看:
 * 描述:Interface 接口层,连接MySQL
 *
 * 历史版本:  JDK 14.02
 * 数据库:My SQL 8.0
 * IDE: IntelliJ IDEA 2021.2.3
 * OS: Windows 10 x64
 * 2021-12-12 创建者 geovindu
 * 2021-12-15 添加 Lambda
 * 2021-12-15 修改:date
 * 接口类
 * 2021-12-15 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc BookKindInterface.java
 * 配置文件:
 * driver=com.mysql.jdbc.Driver  com.mysql.cj.jdbc.Driver
 *url=jdbc\:mysql\://localhost\:3306/数据库名称
 *user=root
 *password=root
 *
 * */


package Geovin.Interface;

import Geovin.Model.BookKind;

import java.util.ArrayList;

/**
 * #parse("接口")
 * @author geovindu 涂聚文 Geovin Du
 * @version 1.0
 * */

public interface BookKindInterface {


    /**
     * @param info
     * @return
     * */
    public int Add(BookKind info);
    /**
     *
     * @param info
     * @return
     *
     * */
    public int AddOut(BookKind info);
    /**
     *
     * @param info
     * @return
     *
     * */
    public int Update(BookKind info);
    /**
     *
     * @param id
     * @return
     *
     * **/
    public BookKind SelectSQLBookKindInfo(String id);

    /**
     *
     * @param
     * @return
     *
     * */
    public ArrayList SelectSQLBookKindAll();

}

Factory:

/*
 * 版权所有 2021 涂聚文有限公司
 * 许可信息查看:
 * 描述:工厂层,抽象工厂 连接MySQL
 *
 * 历史版本:  JDK 14.02
 * 数据库:My SQL 8.0
 * IDE: IntelliJ IDEA 2021.2.3
 * OS: Windows 10 x64
 * 2021-12-12 创建者 geovindu
 * 2021-12-15 添加 Lambda
 * 2021-12-15 修改:date
 * 接口类
 * 2021-12-15 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc BookKind.java
 * 配置文件:
 * driver=com.mysql.jdbc.Driver
 *url=jdbc\:mysql\://localhost\:3306/数据库名称
 *user=root
 *password=root
 *
 * */


package Geovin.Factory;


import Geovin.DAL.BookKindDAL;
import Geovin.Interface.BookKindInterface;

/**
 * #parse("抽象工厂")
 * @author geovindu 涂聚文 Geovin Du
 * @version 1.0
 *
 * */

public class AbstractFactory {


    /**
     *
     *
     * */
    public static  BookKindInterface CreateBookKind()
    {
        BookKindInterface iBookKindInterface=new BookKindDAL();
        return  iBookKindInterface;
    }

}

BLL:

/*
 * 版权所有 2021 涂聚文有限公司
 * 许可信息查看:
 * 描述:业务逻辑层,连接MySQL
 *
 * 历史版本:  JDK 14.02
 * 数据库:My SQL 8.0
 * IDE: IntelliJ IDEA 2021.2.3
 * OS: Windows 10 x64
 * 2021-12-12 创建者 geovindu
 * 2021-12-15 添加 Lambda
 * 2021-12-15 修改:date
 * 接口类
 * 2021-12-15 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc BookKind.java
 * 配置文件:
 * driver=com.mysql.jdbc.Driver
 *url=jdbc\:mysql\://localhost\:3306/数据库名称
 *user=root
 *password=root
 *
 * */


package Geovin.BLL;


import Geovin.Model.*;
import Geovin.Factory.AbstractFactory;
import Geovin.Interface.*;

import java.util.ArrayList;

/**
 * #parse("业务逻辑层")
 * @author geovindu 涂聚文 Geovin Du
 * @
 * */
public class BookKindBLL {

    private  static BookKindInterface dal=AbstractFactory.CreateBookKind();

    /**
     *
     * */
    public int Add(BookKind info)
    {
       return dal.Add(info);
    }
    /**
     *
     * */
    public int AddOut(BookKind info)
    {
        return dal.AddOut(info);
    }
    /**
     *
     * */
    public int Update(BookKind info)
    {
        return dal.Update(info);
    }
    /**
     *
     * */
    public BookKind SelectSQLBookKindInfo(String id)
    {
        return dal.SelectSQLBookKindInfo(id);
    }
    /**
     *
     * */
    public ArrayList SelectSQLBookKindAll()
    {
        return dal.SelectSQLBookKindAll();
    }
}

测试:

 //CustomerDAL dal=new CustomerDAL();
         //dal.SelectSQLCustomer("1");
        // BookKindDAL dal=new BookKindDAL();
        BookKindBLL dal=new BookKindBLL();
         BookKind info=dal.SelectSQLBookKindInfo("1");

         System.out.println("\t\n实体读出:id-"+info.getBookKindID()+";类目名称:"+info.getBookKindName()+";父节点ID:"+info.getBookKindParent());

         BookKind newinfo=new BookKind();

        newinfo.setBookKindID(5);
        newinfo.setBookKindName("聚文小说");
        newinfo.setBookKindParent(2);
         int ok=dal.Update(newinfo);
         if(ok>0) {
          System.out.println("更新记录,ok"+String.valueOf(ok));
         }
        else
        {
        System.out.println("更新不成功,no");
        }
         info=new BookKind();
        info=dal.SelectSQLBookKindInfo("5");
        System.out.println("\t\n"+info.getBookKindName());

 java Out Parameters

 from: https://docs.microsoft.com/en-us/sql/connect/jdbc/using-a-stored-procedure-with-output-parameters?view=sql-server-ver15

https://stackoverflow.com/questions/4455693/how-to-create-in-out-or-out-parameters-in-java

https://mkyong.com/jdbc/jdbc-callablestatement-stored-procedure-out-parameter-example/

http://javacamp.org/javavscsharp/outparam.html 这个没在有啥参考价值

https://stackoverflow.com/questions/50713653/multiple-out-parameters-in-simplejdbccall

http://kscodes.com/java/callablestatement-example-with-in-out-parameters/

https://docs.oracle.com/javase/tutorial/jdbc/basics/storedprocedures.html

https://www.codejava.net/java-se/jdbc/jdbc-examples-for-calling-stored-procedures-mysql

/*
 * 版权所有 2021 涂聚文有限公司
 * 许可信息查看:
 * 描述:实体层  ,连接MySQL
 *
 * 历史版本:  JDK 14.02
 * 数据库:My SQL 8.0
 * IDE: IntelliJ IDEA 2021.2.3
 * OS: Windows 10 x64
 * 2021-12-12 创建者 geovindu
 * 2021-12-15 添加 Lambda
 * 2021-12-15 修改:date
 * 接口类
 * 2021-12-15 修改者:Geovin Du
 * 生成API帮助文档的指令:
 *javadoc - -encoding Utf-8 -d apidoc BookKindDAL.java
 * 配置文件:
 * driver=com.mysql.jdbc.Driver  com.mysql.cj.jdbc.Driver
 *url=jdbc\:mysql\://localhost\:3306/数据库名称
 *user=root
 *password=root
 *
 * */



package Geovin.Model;

/**
 * 用于返回值
 * @author geovindu  涂聚文 Geovin Du
 * @date 2021-12-20
 * **/
public class OutValue {

    private int intValue;
    /**
     * 得到值
     * @param
     * @return
     *
     * */
    public int getIntValue()
    {
        return  intValue;
    }
    /**
     * 设定值
     * @param intValue  输入值
     * @param
     * */
    public  void setIntValue(int intValue )
    {
        this.intValue=intValue;
    }

    private String stringValue;
    /**
     * 得到值
     * @param
     * @return
     *
     * */
    public String getStringValue()
    {
        return stringValue;
    }
    /**
     * 设定值
     * @param stringValue  设定值
     * @param
     * */
    public void setStringValue(String stringValue)
    {
        this.stringValue=stringValue;
    }


}
/**
     * 存储过返回值
     * @param info  输入实体类型值
     * @return  返回添加的ID的值
     * @
     * */
    public  int proc(BookKind info)
    {
        int out=0;
        Connection connection=null;
        CallableStatement cstm =null;

        try {
            Class.forName(DRIVER_CLASS);
        }
        catch (ClassNotFoundException exception)
        {
            exception.printStackTrace();
        }
        try {
             connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
            String sql = "{CALL proc_Insert_BookKindOut(?,?,?)}"; //调用存储过程
            cstm = connection.prepareCall(sql); //实例化对象cstm,执行存储过程
            cstm.setString(1, info.getBookKindName()); //存储过程输入参数
            //也是可以的
            //cstm.setString(2,String.valueOf(info.getBookKindParent()));//可以判断什么类型,进行什么类型转换
            //
            cstm.setInt(2,info.getBookKindParent());
            cstm.registerOutParameter(3, Types.INTEGER); // 设置返回值类型 即返回值
            cstm.execute(); // 执行存储过程
            System.out.println(cstm.getInt(3));
            out=cstm.getInt(3);
            cstm.close();
            connection.close();

        }
        catch (SQLException sqlException)
        {
            sqlException.printStackTrace();

        }
        return out;

    }
    /**
     * 得到返回的值
     * @param info  输入参数
     * @param outValue  得到返回的值
     * @return  返回值
     * */
    public  int proc(BookKind info, OutValue outValue)
    {
        int out=0;
        Connection connection=null;
        CallableStatement cstm =null;

        try {
            Class.forName(DRIVER_CLASS);
        }
        catch (ClassNotFoundException exception)
        {
            exception.printStackTrace();
        }
        try {
            connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);
            String sql = "{CALL proc_Insert_BookKindOut(?,?,?)}"; //调用存储过程
            cstm = connection.prepareCall(sql); //实例化对象cstm,执行存储过程
            cstm.setString(1, info.getBookKindName()); //存储过程输入参数
            //也是可以的
            //cstm.setString(2,String.valueOf(info.getBookKindParent()));//可以判断什么类型,进行什么类型转换
            //
            cstm.setInt(2,info.getBookKindParent());
            cstm.registerOutParameter(3, Types.INTEGER); // 设置返回值类型 即返回值
            cstm.execute(); // 执行存储过程
            System.out.println(cstm.getInt(3));
            out=cstm.getInt(3);
            outValue.setIntValue(cstm.getInt(3));
            cstm.close();
            connection.close();

        }
        catch (SQLException sqlException)
        {
            sqlException.printStackTrace();

        }
        return out;

    }

 测试:

 OutValue value=new OutValue();

        BookKindDAL dal=new BookKindDAL();
        BookKind info=new BookKind();
        //info.setBookKindName("社会科学");
        //info.setBookKindName("自然科学");
        info.setBookKindName("文学");
        info.setBookKindParent(2);
       // int ok= dal.proc(info);
        int ok=dal.proc(info,value);

         if(ok>0) {
             System.out.println("ok:"+ok+",out:"+value.getIntValue());
         }
         else {
             System.out.println("no");
         }

如何判断值类型

变量的值类型

一个类的属性的值类型

public interface GoevinDuA

{}

public interface GoevinDuB

{}

public class Du implements GeovinDuA

{}

public interface GeovinDuC extends GeovinDuA

{}

public class AB extends Object implements GeovinDuA,GeovinDub

{}