DAOクラス(データベース操作オブジェクト)の説明

DAOクラスのさまざまな関係を図で表すことができます。
ここに画像の説明を挿入

1.DAOクラスの紹介:

1.はじめに
1)DAO =データベースアクセスオブジェクト;データベース操作オブジェクト
2)DAOクラスのテーブルの操作の詳細をカプセル化します
3)プロジェクト内のすべてのDAOクラスをdaoパッケージに格納する必要があります
4)DAOクラスの命名規則=テーブルname + Dao DeptDao / EmpDao

たとえば、そのようなテーブル。
ここに画像の説明を挿入
1.エンティティクラスの概要
エンティティクラスは、テーブルの構造を記述するために使用されます
2)エンティティクラスのクラス名は、テーブル名と同じである必要があります
dept.frm -------- Dept.class
3 )エンティティクラスの属性名前は、テーブルの匿名フィールドと同じである必要があります
。DEPTNOINT private Integer deptNo
DNAME VARCHAR private String dname
LOC VARCHAR private String loc
4)エンティティクラスのインスタンスオブジェクトは、テーブルファイル内のデータ
dept.frmdeptno
dname loc10
アカウンティングxx20
セールスBOSTON
部門dept1 = new Dept(10、 'Accounting'、 'xx');
Dept dept2 = new Dept(20、 'Sales'、 'BOSTON')
2.エンティティクラス関数:エンティティクラスはDAO開発の難しさを軽減し
ます1. Daoクラスのメソッドパラメータの数を効果的に軽減します
メソッドの開発と使用の
難しさを軽減します2.DaoクラスとResultSetの操作の難しさを効果的に軽減します

/**
 * 实体类属性的数据类型必须都是高级引用类型,目的方便存储null值
 * 2021/1/23
 */
public class Dept {
    
    

    private Integer deptNo ;
    private String  dname;
    private String  loc;

    public Integer getDeptNo() {
    
    
        return deptNo;
    }

    public Dept setDeptNo(Integer deptNo) {
    
    
        this.deptNo = deptNo;
        return this;
    }

    public String getDname() {
    
    
        return dname;
    }

    public Dept setDname(String dname) {
    
    
        this.dname = dname;
        return this;
    }

    public String getLoc() {
    
    
        return loc;
    }

    public Dept setLoc(String loc) {
    
    
        this.loc = loc;
        return this;
    }

    public Dept(Integer deptNo, String dname, String loc) {
    
    
        this.deptNo = deptNo;
        this.dname = dname;
        this.loc = loc;
    }

    public Dept() {
    
    
    }
}

関数パッケージに基づく-JdbcUtil1
。関数とは:
コマンド行は関数です。たとえば、int a = 10
2. JDBC開発プロセス:
1)接続チャネルを確立します
。2)トランスポートツールを作成します
。3)SQLをプッシュします。コマンドを実行して処理結果を取得する
4)リソース
を破棄する3. JdbcUtilの役割により、DAOクラスを開発する際のJDBCテクノロジの使用の難しさが軽減されます。

ReflectUtil

public class ReflectUtil {
    
    

    /*
    *  作用:动态生成INSERT语句
    *
    *  insert语句结构:
    *
    *  insert into  表    (字段名1,字段名2,字段名3) values(值1,值2)
    *  -----------  --    ---------------        ---------------
    *       1        2           3                     4
    *
    *   问题1:如何能够得到表名
    *         实体类的类名应该与对应的表名相同
    *
    *   问题2:如何得到表中字段名
    *         实体类的属性名应该与对应的表中字段名相同
    *
    *   问题3:如何得到要插入的数据行
    *         一个实体类的实例对象封装表文件中一个数据行
    */

    public String  createInsertSql(Object instance)throws Exception{
    
    

         String tableName = null;
         Class classManager = null;
         Field fieldArray[]=null;
         StringBuffer columns = new StringBuffer(" (");
         StringBuffer sql = new StringBuffer("insert into ");
         StringBuffer values = new StringBuffer(" values(");

         classManager= instance.getClass(); //得到实例对象,隶属的类文件的管理者
         fieldArray = classManager.getDeclaredFields();
        //1.得到插入语句关联的表名
        tableName = classManager.getSimpleName();

        //2.得到插入语句关联的字段名
        for(Field field:fieldArray){
    
    

            String fieldName = field.getName();//得到管理的属性的名称,这个名称就是字段名
            if(!columns.toString().equals(" (")){
    
    
                columns.append(",");
            }
            columns.append(fieldName);
        }
        columns.append(")");

        //3.得到插入语句对应的值
        for(Field field:fieldArray){
    
    
              field.setAccessible(true);
              Object value = field.get(instance);
              //如果添加的值不是第一个值,则在值添加的到StringBuffer之前,先添加一个","进入到StringBuffer
              if(!values.toString().equals(" values(")){
    
    
                  values.append(",");
              }
              values.append("'");
              values.append(value);
              values.append("'");
        }
        values.append(")");

        //拼接
        sql.append(tableName);
        sql.append(columns);
        sql.append(values);

        return sql.toString();
    }

おすすめ

転載: blog.csdn.net/m0_45311187/article/details/113060007