(1)JDBC的数据库查询过程步骤
- 第一步:加载JDBC驱动——com.mysql.jdbc.Driver
- 第二步:建立数据连接Connection——DriverManager.getConnection
- 第三步:建立SQL语句
- 第四步:创建Statements对象——connection.prepareStatement
- 第五步:设置要传入SQL语句的参数
- 第六步:执行SQL语句获得查询结果——executeQuery
- 第七步:对查询结果转换处理并将结果返回——把每一条记录放到HashMap中,再把所有记录放到List中
- 第八步:释放资源(关闭Connection,关闭Statement,关闭ResultSet)——close
//加载JDBC驱动
Class.forName("com.mysql.jdbc.Driver").newInstance();
Class.forName("com.mysql.jdbc.Driver").newInstance();
//设置数据库连接的用户名、密码、数据库
String url = "jdbc:mysql://localhost:3306/db_springmvc";
String user = "root";
String password = "mysql";
//获取数据库连接
connection = DriverManager.getConnection(url,user,password);
//建立SQL语句
String sql = "select * from admin where id = ? ";
//创建Statement对象(每一个Statement为一次数据库执行请求)
stmt = connection.prepareStatement(sql);
//设置传入参数
stmt.setString(1, "zhangsan");
//执行SQL语句
rs = stmt.executeQuery();
//处理查询结果(将查询结果转换成List<Map>格式)
ResultSetMetaData rsmd = rs.getMetaData();
int num = rsmd.getColumnCount();
while(rs.next()){
Map map = new HashMap();
for(int i = 0;i < num;i++){
String columnName = rsmd.getColumnName(i+1);
map.put(columnName,rs.getString(columnName));
}
resultList.add(map);
}
//释放资源
//关闭结果集
rs.close();
//关闭执行
stmt.close();
//关闭连接
connection.close();
(2)Mybatis对JDBC的以上几个步骤哪些可以做封装
第一步和第二步的优化:数据库的连接获取和资源释放。
——存在的问题:每次执行SQL语句都会去建立数据库的连接,频繁的连接数据库会导致资源的浪费。
——解决办法:利用数据库连接池,频繁的利用现有的连接去执行SQL语句。
——Mybatis的做法:XXXXXX
第三步的优化:SQL语句的统一存取
——存在问题:SQL语句存在于Java代码中不利于维护。
——解决办法:把所有SQL语句统一放在配置文件当中统一管理,利于维护,每个SQL语句以key-value的形式存储,根据不同的key去执行对应的SQL语句。
第五步的优化:SQL语句参数传递
——存在问题:通常情况下都是通过设置占位符来传入参数,一定要按照一定的顺序进行传入,所以存在一定的局限性,否则就需要在Java代码中拼接SQL语句。
——解决办法:利用Mybatis的动态SQL语句。
第七步的优化:结果集的统一转换
——存在问题:执行SQL语句之后返回的是ResultSet结果集,必须要在资源释放之前取出来,如果想转为对应的数据类型,需要用Java代码做结果集的转换,例如转换成list,map等类型,每执行完一次就需要自己写Java代码转换会使代码冗余。
——解决办法:Mybatis提供了结果集映射,只需要给出返回什么类型的对象即可(ResultType)。为了提高效率还增加了
结果缓存,缓存数据都是key-value的形式,key为SQL语句和传入参数共同决定,value为对应的结果集。