JdbcTemplateクラスは、データベーステーブルに対するさまざまなクエリ操作を処理するための多数のquery()メソッドも提供します。その中で、一般的に使用されるいくつかのquery()メソッドを次の表に示します。
方法 | 説明する |
---|---|
リストクエリ(String sql、RowMapper rowMapper) | 文字列型パラメータによって提供されるSQLステートメントを実行し、RowMapperを介してリスト型の結果を返します。 |
リストクエリ(String sql、PreparedStatementSetter pss RowMapper rowMapper) | 文字列型パラメーターによって提供されるSQLステートメントに従ってPreparedStatementオブジェクトを作成し、その結果をRowMapperを介してリストに返します。 |
リストクエリ(String sql、Object [] args、RowMapper rowMapper) | Object []の値を使用してSQLステートメントのパラメーター値を設定し、RowMapperコールバックメソッドを使用してList型のデータを直接返します。 |
queryForObject(String sql、RowMapper rowMapper、Object ... args) | argsパラメーターをSQLステートメントにバインドし、RowMapperを介してObject型の単一行レコードを返します。 |
queryForList(string sql、Object [] args、 class <T> elementType) |
このメソッドは複数行のデータの結果を返すことができますが、リストを返す必要があり、elementTypeパラメーターはListの要素タイプを返します。 |
コンテンツ
DBでのクエリ操作
JDBCテンプレートのクエリ結果は、すべてオブジェクトの形式で返されます。返されるオブジェクトの種類に応じて、クエリは単純なオブジェクトクエリとカスタムオブジェクトクエリの2つのカテゴリに分類できます。
- 単純なオブジェクトクエリ:クエリ結果は、StringやIntegerなどの単純なオブジェクトタイプ、またはListなどの要素としてのこのタイプのコレクションタイプです。
- カスタムオブジェクトクエリ:クエリ結果は、Userなどのカスタムタイプ、またはこのタイプを要素として使用するコレクションタイプ(Listなど)です。
フォアグラウンド接続
注:以下のケースは、クエリ操作を拡張するための前のケースに基づいています
ケースの実装
1.データベースにデータを挿入します
mysql> select * from account;
Empty set (0.00 sec)
mysql> insert into account(username,balance) value("孙悟空",100);
Query OK, 1 row affected (0.04 sec)
mysql> insert into account(username,balance) value("唐僧",1000.00);
Query OK, 1 row affected (0.01 sec)
mysql> insert into account(username,balance) value("猪八戒",2000.00);
Query OK, 1 row affected (0.01 sec)
mysql> insert into account(username,balance) value("沙僧",5000.00);
Query OK, 1 row affected (0.00 sec)
mysql> select * from account;
+----+-----------+---------+
| id | username | balance |
+----+-----------+---------+
| 1 | 孙悟空 | 100 |
| 2 | 唐僧 | 1000 |
| 3 | 猪八戒 | 2000 |
| 4 | 沙僧 | 5000 |
+----+-----------+---------+
4 rows in set (0.00 sec)
2.AccountDaoにクエリメソッドを追加します
// 通过id查询
public Account findAccountByid(int id);
// 查询所有账户
public List<Account> finfAllccount();
3.AccountDaoImplにクエリメソッドを追加します
// 查询账户信息
@Override
public Account findAccountByid(int id) {
// 定义SQL语句
String sql = "select * from account where id=?";
// 创建一个新的rowMapper对象
RowMapper<Account> rowMapper = new BeanPropertyRowMapper<Account>(Account.class);
// 将id 绑定到SQL语句中,通过RowMapper返回一个Object类型的当行记录
return this.jdbcTemplate.queryForObject(sql, rowMapper, id);
}
// 查询所有账户信息
@Override
public List<Account> finfAllccount() {
// 定义SQL
String sql = "select * from account";
// 创建一个新的rowMapper对象
RowMapper<Account> rowMapper = new BeanPropertyRowMapper<Account>(Account.class);
// 执行静态的SQL查询,通过RowMapper返回结果
return this.jdbcTemplate.query(sql, rowMapper);
}
4.テストクラスJdbcTemplateTest_deleteを作成します
package com.Example.jdbc;
import java.util.List;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class JdbcTemplateTest_delete {
public static void main(String[] args) {
// 加载配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
// 获取AccountDao实例
AccountDao accountDao = (AccountDao) applicationContext.getBean("accountDao");
// 执行deleteAccount()方法,并获取返回结果
int num = accountDao.deleteAccount(1);
if (num > 0) {
System.out.println("成功删除了" + num + "条数据!");
} else {
System.out.println("删除操作执行失败!");
}
}
@Test
public void findAccountByIdTest() {
// 加载配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
// 获取AccountDao实例
AccountDao accountDao = (AccountDao) applicationContext.getBean("accountDao");
// 执行findAccountById()方法
Account account = accountDao.findAccountById(1);
System.out.println(account);
}
@Test
public void findAllAccountTest() {
// 加载配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
// 获取AccountDao实例
AccountDao accountDao = (AccountDao) applicationContext.getBean("accountDao");
// 执行findAllAccount()方法,获取Account对象的集合
List<Account> account = accountDao.findAllAccount();
// 循环输出集合中的对象
for (Account act : account) {
System.out.println(act);
}
}
}
5.単一のデータを検索し、findAccountByIdTestメソッドを実行します
6.すべてのデータを検索し、findAllAccountTestメソッドを実行します
JDBCテンプレートオブジェクト複数のインスタンス
JdbcTemplateオブジェクトはマルチインスタンスです。つまり、システムはテンプレートオブジェクトを使用するスレッド(メソッド)ごとにJdbcTemplateインスタンスを作成し、スレッド(メソッド)が終了すると自動的にJdbcTemplateインスタンスを解放します。したがって、JdbcTemplateオブジェクトを使用するたびに、getJdbcTemplate()メソッドを介してオブジェクトを取得する必要があります。