この記事では、Spring をベースにした基本的な JDBC フレームワークの構築、Spring をベースにした JDBC の追加、削除、変更、クエリ、設定ファイル内のデータの読み込みなどを紹介するので、非常に参考になります。以下のエディターで見てみましょう
データベース接続プール
単純なデータベース アプリケーションの場合、データベースへのアクセスはそれほど頻繁ではないため、データベースにアクセスする必要があるときに単に新しい接続を作成することができます。完了したら閉じてください。パフォーマンスのオーバーヘッドは発生しません。しかし、複雑なデータベース アプリケーションの場合、接続の使用がシステム パフォーマンスのボトルネックになるため、接続の確立と終了が頻繁に行われると、システムのパフォーマンスが大幅に低下します。
データベース接続プールと一連の接続使用管理ポリシーを確立することにより、接続再利用の効果が得られ、データベース接続を安全かつ効率的に再利用できるようになり、データベース接続の頻繁な確立と終了によるオーバーヘッドが回避されます。 データベース接続プールの基本原理は、
内部オブジェクトプール内で一定数のデータベース接続を維持し、データベース接続の取得メソッドと戻りメソッドを外部に公開することです。たとえば、外部ユーザーは getConnection メソッドを通じて接続を取得し、使用後に releaseConnection メソッドを通じて接続を返すことができます。この時点では接続は閉じられていませんが、接続プール マネージャーによってリサイクルされ、次の接続に備えられることに注意してください。使用。
データベース接続プールテクノロジーの利点:
1. リソースの再利用データベース接続が再利用されるため、リンクの頻繁な作成と解放によって引き起こされる大量のパフォーマンスのオーバーヘッドが回避されます。一方、システム消費量の削減に基づいて、システムのオペレーティング環境の安定性も向上します (メモリの断片化とデータベースの一時的なプロセス/スレッドの数が減少します)
2. システムの応答が高速になります データベース接続 プールの初期化プロセス中に、バックアップのために複数のデータベース接続プールが作成され、プールに配置されることがよくあります。この時点で、接続の初期化は完了しています。ビジネス リクエストの処理では、データベース接続の初期化と解放プロセスの時間オーバーヘッドを回避するために、既存の利用可能な接続が直接使用され、システム全体の応答時間が短縮されます
。 3. データベース接続の漏洩を回避するための統合接続管理比較的完全なデータベース接続プールの実装では、事前に設定された接続占有タイムアウトに従って、占有されている接続を強制的に回復できるため、通常のデータベース接続操作で発生する可能性のあるリソースを回避できます。 。 道を譲る。
現在、主に次のようなデータベース接続プール製品があります:
1、dbcpdbcp。これは、Apache によって作成され、Spring 開発チームによって推奨されているデータベース接続プールです。開発は比較的進んでいます。これは、非常に広く使用されているデータベース接続プール製品です。しかし、インターネット
2、c3p0から、Hibernate開発チームはデータソースとJNDIのバインディングを実装するデータベース接続プールの使用を推奨しました
3、ProxoolProxoolは評判は良く、否定的なコメントはありません (たとえば、dbcp はバグが多すぎると Hibernate が考えているため、Hibernate では推奨されていません)。これは Hibernate 開発チームによって推奨されているデータベース接続プールでもありますが、ユーザー数はそれほど多くありません。開発は十分に活発ではありません。この接続プールは、便利で使いやすい接続プール監視の機能を提供し、接続プールのリークを簡単に検出できます
Spring に基づいた基本的な JDBC フレームワークの構築まず、Spring を使用して次のことを行う方法について説明します。 JDBC を実装します。データベース接続プールは、グループによって推奨されている DBCP を使用して開発されています。DBCP には 3 つの jar パッケージが必要です。まず、公式 Web サイトで入手可能な
1、commons-dbcp-1.4.jar をダウンロードしてください。
2、commons.pool-1.6.jar、公式 Web サイト はい、ここをクリックして
3 と commons.collections4-4.0.jar をダウンロードします。これらは公式 Web サイトから入手できます
これら 3 つの jar パッケージをダウンロードした後、インポートしてください。それらを独自のプロジェクトに追加します (注:
MySqlパッケージをインポートすることを忘れないでください)。dbcp と pool の両方に dbcp2 と pool2 のバージョンがあり、Apache 公式 Web サイトからダウンロードできますが、ここで dbcp1 と pool1 が提供されている理由の 1 つは、dbcp2 と pool2 はバージョン 7 以降でのみ使用できるのに対し、dbcp1 と pool1 は JDK1.6 で実行できることです。 MyEclipse10 はバージョン 1.6 に付属しています。ここから dbcp1 と pool1 をダウンロードして使用します。 dbcp2 と pool2 が必要な場合は、Apache 公式 Web サイトからダウンロードできます。ただし、dbcp2 は pool2 とペアにし、dbcp1 は pool1 とペアにする必要があることに注意してください。 JDBC については、以前にも記事を書きましたが、ここではネイティブ JDBC を Spring JDBC に移行するだけで、その後、関数を追加していきます。学生管理カテゴリは次のとおりです:
public class StudentManager { private JdbcTemplate jdbcTemplate; private static StudentManager instance = new StudentManager(); public static StudentManager getInstance() { return instance; } public JdbcTemplate getJdbcTemplate() { return jdbcTemplate; } public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } }
Spring のXML設定ファイルは jdbc.xml という名前です。 jdbc.xml の記述は次のとおりです。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> <!-- 驱动包名 --> <property name="driverClassName" value="com.mysql.jdbc.Driver" /> <!-- 数据库地址 --> <property name="url" value="jdbc:mysql://localhost:3306/school?useUnicode=true&characterEncoding=utf8;" /> <!-- 用户名 --> <property name="username" value="root" /> <!-- 密码 --> <property name="password" value="root" /> <!-- 最大连接数量 --> <property name="maxActive" value="150" /> <!-- 最小空闲连接 --> <property name="minIdle" value="5" /> <!-- 最大空闲连接 --> <property name="maxIdle" value="20" /> <!-- 初始化连接数量 --> <property name="initialSize" value="30" /> <!-- 连接被泄露时是否打印 --> <property name="logAbandoned" value="true" /> <!-- 是否自动回收超时连接 --> <property name="removeAbandoned" value="true" /> <!-- 超时等待时间(以秒为单位) --> <property name="removeAbandonedTimeout" value="10" /> </bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> <property name="dataSource" ref="dataSource" /> </bean> <bean id="studentManager" class="com.xrq.jdbc.StudentManager" factory-method="getInstance"> <property name="jdbcTemplate" ref="jdbcTemplate" /> </bean> </beans>
メインの 関数 は次のとおりです。
リファレンスは取得できます。 StudentManager のアドレスと StudentManager 内のアドレス Attribute jdbcTemplate の参照アドレスは、接続全体と注入が正常であることを示します。 JDBCTemple は Spring の最も基本的な JDBC テンプレートであり、JDBC と単純な
indexparametersquery を使用してデータベースへの簡単なアクセスを提供します。 JDBCTemplate に加えて、Spring は 2 つのクラスも提供します: NamedParameterJdbcTemplate と SimpleJdbcTemplate 前者は、インデックスを使用する代わりに、SQL の名前付きパラメーターに値をバインドできます。後者は、オートボックス化、ジェネリックス、 などの Java 5 機能を利用します。 JDBC テンプレートの使用を簡素化するための可変引数パラメーターリスト。どちらを使用するかは個人の好みによって異なります。ここでは JdbcTemplate を使用するため、JdbcTemplate を学生管理クラスに追加します。 1. dbcp はユーザー設定用の多くのパラメータを提供します。2. dbcp の属性 url は、
が発生した場合に参照します。
特殊文字、エスケープする必要がありますので、ここの「&」は「&」になります。そうでないとエラーが報告されます
SpringのJDBCの追加、削除、変更、チェックに基づいて上記の部分Spring JDBC の基本フレームワークを構築します。Java コードが CRUD を実装する方法を見てみましょう。このプロセスでは、jdbc.xml を変更する必要はありません。 1. 生徒情報を追加します。コードは
public static void main(String[] args) { ApplicationContext ac = new ClassPathXmlApplicationContext("jdbc.xml"); System.out.println(StudentManager.getInstance()); System.out.println(StudentManager.getInstance().getJdbcTemplate()); }
です。2. ID に基づいて、指定された生徒情報を削除します。コードは、// 添加学生信息
public boolean addStudent(Student student)
{
try
{
jdbcTemplate.update("insert into student values(null,?,?,?)",
new Object[]{student.getStudentName(), student.getStudentAge(), student.getStudentPhone()},
new int[]{Types.VARCHAR, Types.INTEGER, Types.VARCHAR});
return true;
}
catch (Exception e)
{
return false;
}
}
// 根据Id删除单个学生信息 public boolean deleteStudent(int id) { try { jdbcTemplate.update("delete from student where studentId = ?", new Object[]{id}, new int[]{Types.INTEGER}); return true; } catch (Exception e) { return false; } }
// 根据Id更新指定学生信息 public boolean updateStudent(int Id, Student student) { try { jdbcTemplate.update("update student set studentName = ?, studentAge = ?, studentPhone = ? where studentId = ?", new Object[]{student.getStudentName(), student.getStudentAge(), student.getStudentPhone(), Id}, new int[]{Types.VARCHAR, Types.INTEGER, Types.VARCHAR, Types.INTEGER}); return true; } catch (Exception e) { return false; } }
// 根据学生Id查询单个学生信息 public Student getStudent(int id) { try { return (Student)jdbcTemplate.queryForObject("select * from student where studentId = ?", new Object[]{id}, new int[]{Types.INTEGER}, new RowMapper<Student>(){ public Student mapRow(ResultSet rs, int arg1) throws SQLException { Student student = new Student(rs.getInt(1), rs.getString(2), rs.getInt(3), rs.getString(4)); return student; } }); } // 根据Id查询学生信息抛异常, 不管什么原因, 认为查询不到该学生信息, 返回null catch (DataAccessException e) { return null; } }
オブジェクト指向の設計原則。第二に、仮パラメータリストには多くのフィールドがあり、エラーが発生しやすいです
3. プレースホルダーがある場合は、
オーバーロードメソッドを選択することをお勧めします。上記のコードで書いたのと同じように、パラメーターの型を指定し、各プレースホルダーのフィールドの型を指定します
最後に、ここで話しているのは
jdbcTemplateの基本的な使い方ですjdbcTemplateには多くのメソッドがあるので、私が勝ちました。 1 つずつ詳しく説明することはできません。自分で試すことも、Spring API ドキュメントを確認することもできます。
設定ファイル内のデータを読み取ります前に、変更に便利な db.properties でデータベース接続のいくつかのプロパティを設定しましたが、ここでは jdbc.xml にハードコーディングされているため、 db.properties から設定を読み取る方法を考えてください。コンテキストは、jdbc.xml の記述方法を見てください:
JAVA チュートリアル マニュアル以上がSpringのJDBCデータベースのメソッドの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。