原始jdbc操作:
//加载数据库驱动。
Class.forName("com.mysql.jdbc.Driver");
//通过驱动管理类获取连接。
Connection connection=DriverManager.getConnection("jdbc:mysql://localhost:3306","username","password");
上面两行代码的问题:
1、上面()里得内容可以写到配置文件中,解决硬编码问题。-----------》》解决方案:将不容易改变的编码写到properties配置文件中
2、数据库创建连接、释放频繁(需要从后往前释放,先释放resultset结果集,再释放preparement,最后释放connection)造成系统资源浪费,从而影响系统性能。---------------》》解决方案:建立连接池
--------------------------------------------------------------------------------------------------------------------------
//定义sql语句?表示占位符
String sql="select * from user where username=? ";
//获取预处理statement
PreparedStatement preparedStatement=connection.prepareStatement(sql);
//设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值preparedStatement.setString(1,"tom");
//向数据库发出sql执行查询,查询出结果集
ResuSet resultSet =preparedStatement.executeQuery();
上述代码问题:
1、sql语句存在硬编码问题,造成代码不易维护,实际应用中sql变化的可能性较大,sql变动需要改变java代码。---------------》》将语句写到xml文件中
2、使用preparedStatement向占位符传参存在硬编码,因为sql语句的where条件不一定,可能参数多,可能参数少,修改sql还得修改代码,系统不易维护。---------------》》将语句写到xml文件中
--------------------------------------------------------------------------------------------------------------------------------------------
//遍历查询结果集
while (resultSet.next()){
int id=rresultSet.getInt("id");
String username=resultSet.getString("username");
//封装user
user.setId(id);
user.setUsername(username);
}
1、对结果集解析存在硬编码问题(如果列名很多,要写很多get),sql变化导致解析代码变化,系统不易维护,如果能将数据库返回结果封装成pojo对象(其实就是JavaBeans)解析比较方便---------------》》使用反射、内省等底层技术,自动将实体与表进行属性与字段的自动映射