// 获取sql语句 // 获取的sql // select * from user where id = #{id} and username = #{username} // 转换后的sql // select * from user where id = ? and username = ? val sql = mappedStatement.sql
// 转换sql语句 val boundSql = getBoundSql(sql)
// 获取预处理对象 val preparedStatement = connection.prepareStatement(boundSql.sqlText)
// 设置参数 // 参数全路径 val parameterType = mappedStatement.parameterType val parameterClass = getClassType(parameterType) val parameterMappingList = boundSql.parameterMappingList for (i in parameterMappingList.indices) { val parameterMapping = parameterMappingList[i] val content = parameterMapping.content val field = parameterClass!!.getDeclaredField(content) field.isAccessible = true val value = field[params[0]] preparedStatement.setObject(i + 1, value) }
// 执行sql val resultSet = preparedStatement.executeQuery() val returnType = mappedStatement.resultType val resultTypeClass = getClassType(returnType) val objects = ArrayList<Any>()
// 封装返回结果集 while (resultSet.next()) { val o = resultTypeClass!!.newInstance() val metaData = resultSet.metaData for (i in1..metaData.columnCount) { val columnName = metaData.getColumnName(i) // 获取字段值 val value = resultSet.getObject(columnName)
// 使用反射或者内省,根据数据库表和实体的对应关系完成封装 val propertyDescriptor = PropertyDescriptor(columnName, resultTypeClass) val writeMethod = propertyDescriptor.writeMethod writeMethod.invoke(o, value) } objects.add(o) } return objects as List<E> }
// 获取sql语句 // 获取的sql // select * from user where id = #{id} and username = #{username} // 转换后的sql // select * from user where id = ? and username = ? Stringsql= mappedStatement.getSql();
/Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home/bin/java -... com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 com.terwergreen.test.IPersistenceTest,test2 Connected to the target VM, address: '127.0.0.1:50317', transport: 'socket' log4j:WARN No appenders could be found for logger (com.mchange.v2.log.MLog). log4j:WARN Please initialize the log4j system properly. User{id=5, username='dali'} User{id=5, username='dali'} User{id=5, username='dali'} User{id=5, username='dali'} Disconnected from the target VM, address: '127.0.0.1:50317', transport: 'socket'
Process finished with exit code 0
修正方案
修正后
1 2 3 4 5 6 7 8 9 10 11
/Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home/bin/java -... com.intellij.rt.junit.JUnitStarter -ideVersion5 -junit4 com.terwergreen.test.IPersistenceTest,test2 Connected to the target VM, address: '127.0.0.1:50820', transport: 'socket' log4j:WARN No appenders could be found for logger (com.mchange.v2.log.MLog). log4j:WARN Please initialize the log4j system properly. User{id=1, username='tyw'} User{id=2, username='张月'} User{id=4, username='haha'} User{id=5, username='dali'} Disconnected from the target VM, address: '127.0.0.1:50820', transport: 'socket'