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();
}