1. BaseDao suplemento de la vía
1.1 Análisis de Requerimientos
Realizar una consulta, el tipo de retorno es Object [], y se almacena en la colección de lista, el tipo de valor de retorno real es List <Object []>
procesamiento de consultas los resultados de los datos no se pueden asignar a un objeto de clase, no el modo de completado ORM, resultados de la consulta, de acuerdo con el orden de lectura de los campos de la base de datos y los datos guardados en la matriz de objeto, con el fin de satisfacer las necesidades de múltiples filas de consulta de datos, almacenados en la matriz colección lista de objetos
1.2 Métodos de análisis
[Permiso] modificador: public
[volver] del tipo: List <Object []>
[nombre del método]: consulta
[lista de parámetros formales]:
1.String SQL, la consulta SELECT
2. los parámetros correspondientes para la actual sentencia SQL
declaración de método:
public List<Object[]> query(String sql, Object[] parameters)
operación específica:
/**
* 通用查询方法,返回值是对应字段数据的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 Optimización 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. El proyecto utiliza JdbcUtil, BaseDao operaciones de persistencia de datos completa
2.1 Requisitos
Usar la base de datos como datos de persistencia de las operaciones son muy comunes.
Pelar los datos originales guardar formato (antes de guardar los datos en formato JSON), y la capa Dao con el
se requiere capa de terminación Dao proyecto para heredar las operaciones CRUD BaseDao de datos. Y la base de datos de clase de entidad y el proyecto actual es la correspondencia entre:
la tabla de datos ==> nombre de la clase de entidad del mismo
nombre de campo ==> variable miembro nombre de
tipo de datos ==> miembro del tipo de datos variables
para completar una versión simple del Sistema de Gestión de Estudiantes:
dao
interface StudentDao
impl(package)
StudentDaoImpl
service
interface StudentService
impl(package)
StudentServiceImpl
view
interface ProjectView
impl(package)
ProjectViewImpl
mainproject
main方法
2. Base de datos de diseño
campo | Tipos de datos |
---|---|
carné de identidad | int PRI AI |
nombre | varchar (50) NN |
años | int NN |
género | booleano NN |
Puntuación | flotar (5,2) NN |
habla a | NN texto |