Mybatis原理学习1:从JDBC过渡到Mybatis

(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();  

//设置数据库连接的用户名、密码、数据库
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格式)  
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为对应的结果集。

你可能感兴趣的:(Mybatis)