JDBC-04-JDBC動的問合せ、アプリケーション階層、一般的なパッケージBaseDao; JDBCドライバのロード原理;

 


 

 

A. JDBC動的問合せ

動的なクエリ:クエリ実行の種類を決定するために、ユーザによって与えられた条件に応じました。

1.1 コード

//動的問合せ

公共の一覧selectDeptByProperty(部署

部署){

接続でCONN = nullを

PreparedStatementのpsの= nullを

ResultSetのRS = nullを

リスト一覧= 新しい ArrayListを<>();

してみてください {

CONN = JdbcUtil。getConnection();

文字列のSQL = genSQL(部署)。

システム。アウト .println(SQL);

PS = conn.prepareStatement(SQL)。

RS = ps.executeQuery()。

一方、(rs.next()){

部門DEPT = 部門();

dept.setDepartmentId(rs.getInt( "DEPARTMENT_ID"));

dept.setDepartmentName(rs.getString( "DEPARTMENT_NAME"));

dept.setLocationId(rs.getInt( "location_idの"));

list.add(DEPT)。

}

} キャッチ(例外e){

e.printStackTrace();

} 最後に {

JdbcUtil。closeResource(PS、CONN、RS)。

}

戻り値のリスト。

}

//スプライシングのSQL文が実行されます

プライベート文字列genSQL(部門DEPT){

StringBufferのSB = 新しい StringBufferの( "1 = 1部門から選択*");

もし(dept.getDepartmentId()> 0){

sb.append(」およびDEPARTMENT_ID =

「).append(dept.getDepartmentId())。

}

もし(dept.getDepartmentName()!= nullを &&

dept.getDepartmentName()。長さ()> 0){

sb.append(」とDEPARTMENT_NAME =

' ").append(dept.getDepartmentName())付加("'」)。

} であれば(dept.getLocationId()> 0){

sb.append(」およびlocation_idの=

「).append(dept.getLocationId())。

}

返す sb.toStringを();

}

2.  アプリケーションの階層化

2.1 アプリケーション階層とは何ですか

異なる作成することによってアプリケーション  パッケージを 階層化プロジェクトには、プロジェクトは、特定の機能を実行するためのコードに応じて分割し、異なるパッケージに格納されます。

2.2 階層的な利点

  図1に示すように、階層構造が複数のアプリケーション層に分割され、それぞれの層は、層の協力を通じて、問題の一部を解決します

  トータルソリューションを提供しています。大きな問題はように、それぞれの層に局在し、比較的独立したサブ一連の問題に分解されます

  それが効果的に単一の問題の大きさと複雑さを軽減し、複雑なシステムの実現の最初のステップは、最も重要なステップのポイントです

  ソリューション。

  図2に示すように、階層構造を用いて、システムのアプリケーションにおける成長の進化のための柔軟なサポートを提供し、良好なスケーラビリティを有します

  グッドスケーラビリティ。既存のコードに変更を加えることなく、新しい機能を追加する場合は、ビジネス・ロジックは、上限を得ることができます

  再利用。

  図3に示すように、階層化アーキテクチャは、保守が容易です。システムの分解後、異なる機能が異なる層、及び層中に封入されています

  層の間の結合が大幅に低減されます。そのため、コードを変更する際層、彼らは、層と層との界面をしませ含みません

  他の層に深刻な影響。

2.3 3層構造

三層構造に分割されている全体のビジネスに適用されます。

  • 界面層(ユーザインターフェイス層)
  • ビジネスロジック層、サービス層(ビジネスロジック層)
  • ダオ層データアクセス層(データアクセス層)

すなわち、レベル「高凝集および低結合」と考えオブジェクトを区別します。ソフトウェアアーキテクチャの設計では、階層構造は、構造の最も重要な種類も最も一般的です。

 

 

3.  パッケージ共通BaseDao

3.1 パッケージの更新

異なるテーブルは、異なるDAO層のインタフェースを持っている、
とDAO層界面でなく、共通BaseDaoインタフェース(見ることができ、より抽象的なインタフェースBaseDao!)

basedaoインタフェースの実装クラス:

 

 

TablenameDaoインタフェースの実装クラス:

これらの3つの操作のためのテーブルにTablenameDaoImplクラス、追加および削除は、あなただけの更新方法のBaseDaoImplクラスが行うことができます呼び出すことができます!

 TablenameServiceインタフェースの実装クラス:

 

 

3.2 梱包クエリ操作

3.2.1 コード

BaseDaoインタフェース

パブリックインターフェース BaseDao {

公共INTのexecuteUpdate(文字列のSQL、[] PARAMオブジェクト)。

パブリックリストの検索(文字列のSQLは、オブジェクト[] PARAM、クラス

clazz);

}

BaseDaoImplインタフェースクラス

@オーバーライド

パブリックリストの検索(文字列のSQLは、オブジェクト[] PARAM、クラス

clazz){

接続でCONN = nullを

PreparedStatement ps =null;

ResultSet rs = null;

List list = new ArrayList<>();

try{conn = JdbcUtil.getConnection();

ps = conn.prepareStatement(sql);

//得到参数的个数

ParameterMetaData pmd = ps.getParameterMetaData();

//绑定参数

for(int i=0;i<pmd.getParameterCount();i++){

ps.setObject(i+1, param[i]);

}

//处理结果集

rs = ps.executeQuery();

//获取结果集的信息

ResultSetMetaData rsmd = rs.getMetaData();

while(rs.next()){

//完成 ORM 处理:通过 jdk 的反射

T bean =clazz.newInstance();//Departmens d = new

Department();

for(int i=0;i<rsmd.getColumnCount();i++){

//得到列名

String columnName = rsmd.getColumnName(i+1);

//获取列的值

Object value = rs.getObject(columnName);

//通过 BeanUtil 工具类将值当如到对象中

BeanUtils.setProperty(bean, columnName,

value);

}

list.add(bean);

}

}catch(Exception e){

e.printStackTrace();

}finally{

JdbcUtil.closeResource(ps, conn, rs);

}

return list;

}

DepartmentDao 接口

public interface DepartmentsDao extends BaseDao {

public List selectDeptByName(String

deptName);

public void insertDept(Departments dept);

public int updateDept(Departments dept);

public int deleteDeptById(int departmentId);

public List selectDeptByLikeName(String deptName);

}DepartmentDaoImpl 接口实现类

@Override

public List selectDeptByLikeName(String deptName) {

String sql ="select * from departments where

department_name like ?";

Object[] param = new Object[]{"%"+deptName+"%"};

return this.find(sql, param, Dept.class);

}

 

4. JDBC 驱动加载原理

4.1创建对象的方式

 

 

 

 

4.2创建对象时三个重要的步骤

•通过类加载器加载 class

•初始化所有静态部分

•为新生对象分配内存

4.3MySQL 驱动类的实例化过程

static {

try {

java.sql.DriverManager.registerDriver(new Driver());

} catch (SQLException E) {

throw new RuntimeException("Can't register driver!");

おすすめ

転載: www.cnblogs.com/EricShen/p/11573751.html