从JDBC到手写一个简单的ORM框架的演变
JDBC
使用代码连接数据库
首先我们来看下直接用JDBC来连接数据库并进行查询需要写哪些代码
public List<UserEntity> getLists() throws SQLException {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
List<UserEntity> userEntities = new LinkedList<>();
try {
Class.forName("com.mysql.cj.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://192.168.56.10:3306/common_sherlock?characterEncoding=utf-8", "root", "root");
String sql = "SELECT * FROM `user` WHERE `name`= ?";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setString(1, "sherlock");
resultSet = preparedStatement.executeQuery();
while(resultSet.next()) {
UserEntity userEntity = new UserEntity();
userEntity.setAge(resultSet.getInt("age"));
userEntity.setId(resultSet.getInt("id"));
userEntity.setName(resultSet.getString("name"));
userEntities.add(userEntity);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
resultSet.close();
preparedStatement.close();
connection.close();
}
return userEntities;
}
直接使用JDBC连接数据库产生的问题
- 不难看出, 每个操作数据库的方法, 都需要建立连接, 然后释放连接,这很浪费资源
- 加载的驱动类名称, 获取连接需要的url、账号、密码,编写的SQl语句,绑定的参数值,到最后的获取数据到实体类里面, 都是硬编码, 不利于维护
- 取出数据到实体类时,需要把每个元组中的每个属性一个一个的以硬编码的方式放到实体类里面去
解决方案
- 对于第一个问题,我们可以采用 连接池 的技术来解决与数据库的连接释放频繁的问题
- 对于第二个问题,我们可以采用配置文件的方式的解决硬编码的问题
2.1 对于驱动类名称,连接需要的url,账号,密码这种不常变动的,我们应该放在一个配置文件里面
2.2 对于SQL语句这类经常变化的,应当单独设置放在一个配置文件中 - 对于第三个问题,我们可以采用反射技术来进行赋值到实体类中
手写简单ORM框架
博主正在准备中…