1. BaseDao方法サプリメント
1.1要求分析
クエリを実行し、戻り型がオブジェクト[]、リストコレクションに格納され、実際の戻り値の型は、<オブジェクト[]>リストされた
クエリデータ結果はクラスオブジェクトではなく、完了ORMモードにマッピングすることができない処理オブジェクトリスト収集アレイに格納されたデータクエリの複数の行の要求を満たすためにデータベースからのフィールドとオブジェクトのアレイに保存されたデータの読み出し順序に従って、クエリ結果、
1.2分析方法
[許可]修飾子:公共
タイプの[戻る]:リスト<オブジェクト[]>
[メソッド名]:クエリ
[仮パラメータ・リスト]:
1.String SQL、SELECTクエリ
2.現在のSQL文に対応するパラメータ
メソッドの宣言は:
public List<Object[]> query(String sql, Object[] parameters)
具体操作:
/**
* 通用查询方法,返回值是对应字段数据的Object类型数组,并且存储于List集合
*
* @param sql Select查询SQL语句
* @param parameters 对应当前SQL语句的参数
* @return 包含数据行数据的List<Object[]> 如果没有查询到数据,返回null
*/
public List<Object[]> query(String sql, Object[] parameters) {
ResultSet resultSet = null;
Connection connection = null;
PreparedStatement preparedStatement = null;
List<Object[]> list = new ArrayList<>();
try {
connection = JdbcUtil.getConnection();
preparedStatement = connection.prepareStatement(sql);
/*
获取SQL语句参数个数!!!通过SQL语句元数据获取(ParameterMetaData)
*/
int parameterCount = preparedStatement.getParameterMetaData().getParameterCount();
/*
parameterCount 参数个数不能为0
parameters != null 参数数组不为null,因为存在当前方法没有参数,数组传入null
parameterCount == parameters.length 参数个数和传入的Object类型参数数容量一致
*/
if (parameterCount != 0 && parameters != null && parameterCount == parameters.length)
for (int i = 0; i < parameters.length; i++) {
/*
SQL语句参数下标从1开始
数组数据下标从0开始
*/
preparedStatement.setObject(i + 1, parameters[i]);
}
}
resultSet = preparedStatement.executeQuery();
ResultSetMetaData metaData = resultSet.getMetaData();
int columnCount = metaData.getColumnCount();
while (resultSet.next()) {
Object[] values = new Object[columnCount];
for (int i = 1; i <= columnCount; i++) {
values[i - 1] = resultSet.getObject(i);
}
list.add(values);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
JdbcUtil.close(connection, preparedStatement, resultSet);
}
return list.size() != 0 ? list : null;
}
1.3 BaseDaoの最適化
// Ctrl + Alt + M 光标选择代码块生成一个方法
/**
* 类内私有化处理PreparedStatement预处理SQL语句和参数数组赋值操作
*
* @param preparedStatement 预处理SQL语句对应的PreparedStatement对象
* @param parameters 对应当前SQL语句的Object类型数组
* @throws SQLException SQL异常
*/
private void parseSqlParameter(PreparedStatement preparedStatement, Object[] parameters) throws SQLException {
/*
获取SQL语句参数个数!!!通过SQL语句元数据获取(ParameterMetaData)
*/
int parameterCount = preparedStatement.getParameterMetaData().getParameterCount();
/*
parameterCount 参数个数不能为0
parameters != null 参数数组不为null,因为存在当前方法没有参数,数组传入null
parameterCount == parameters.length 参数个数和传入的Object类型参数数容量一致
*/
if (parameterCount != 0 && parameters != null && parameterCount == parameters.length) {
for (int i = 0; i < parameters.length; i++) {
/*
SQL语句参数下标从1开始
数组数据下标从0开始
*/
preparedStatement.setObject(i + 1, parameters[i]);
}
}
}
2.プロジェクトはJdbcUtil、BaseDao完全なデータ永続操作を使用しています
2.1要件
データの永続操作は非常に共通しているように、データベースを使用してください。
保存形式(JSON形式のデータを保存する前に)元のデータを剥離し、使用してダオ層
プロジェクト完了ダオ層は、データのBaseDao CRUD操作を継承するために必要とされます。:そしてエンティティクラスのデータベースと、現在のプロジェクトはとの対応である
データテーブル==>エンティティクラス名と同じ
フィールド名==>メンバ変数名
データ型==>メンバ変数のデータ型
学生管理システムの簡易版を完了するためには:
dao
interface StudentDao
impl(package)
StudentDaoImpl
service
interface StudentService
impl(package)
StudentServiceImpl
view
interface ProjectView
impl(package)
ProjectViewImpl
mainproject
main方法
2.データベース設計
フィールド | データの種類 |
---|---|
ID | int型PRI AI |
名前 | VARCHAR(50)NN |
年齢 | int型NN |
性別 | ブールNN |
スコア | フロート(5,2)NN |
住所 | テキストNN |