第一个问题Mybatis是什么?
这是我们首先得知道的一个问题,Mybatis是由apache提供的一个针对数据持久层开源框架,对JDBC访问数据库的过程进行了简化和封装。
第二个问题JDBC是什么?
JDBC(java DataBase Connectivity) java数据库连接,这是一门技术,一门利用java程序连接并访问数据库的技术。当然我们也可以使用cmd或者Navicat连接数据库,操作数据表等操作。但是在开发中,这样使用未免太不方便了,所以通过java程序连接数据库,就必须要使用JDBC这门技术。
JDBC是如何实现连接数据库的呢?
1.首先注册数据库驱动
Class.forName("com.mysql.jdbc.Driver");
2.获取数据库连接(url指向数据库所在位置,user,password为数据库账户名以及密码,传入getConnection()里时,user和password均为字符串形式传入)。
"utf-8"为编码名,Asia/Shanghai为时区对应地址。
Connection conn=null;
String url="http:mysql:///数据库名?characterEncoding=utf-8&serverTimezone=Asia/Shanghai";
conn=DriverManager.getConnection(url,user,password); //获取连接对象
3.获取传输器对象(Statement),通过数据库连接对象获取
Statement stat=conn.CreateStatement();
4.发送sql语句到服务器执行,并返回结果
String sql="select user,password from user"
Result rs=stat.executeQuery(sql);//执行查询则需要一个结果集来接受查询结果
while(rs.next()){//遍历结果集
......
}
//若是执行添加,删除,修改操作,当然这不需要结果集来接受,返回的仅为一个int类型值
int rows=stat.executeUpdate();
5.处理执行结果
6.关闭资源(资源关闭需要遵循顺序关闭)
//若有结果集
rs.close();
stat.close();
conn.close();
//若无结果集
stat.close();
conn.close();
以上就是JDBC的大致操作。
由JDBC固定模板代码而发现的问题
- 执行一次操作(增删改查),就需要重复以上的操作,这就出现了一个代码重复过多的问题,也就是代码冗余。
- 连接对象创建过于多,这不利于项目的维护,举个例子,若有一个项目有100个操作都跟增删改查有关,就需要创建100次,如果真要这样做,也未免太恶心了,而且这会拖慢项目运行速度,占用过多的内存,配置过低的电脑还可能真运行不了该项目。
由此我们引入了连接池。
连接池
什么是连接池?(是什么?有什么用?)
池:常量池、线程池、连接池等中的池都是一个容器。是指内存中的一片空间。
连接池:就是将一批连接资源存入到一个容器中。目的是为了实现连接的复用,减少连接创建和关闭的次数,以此来提高程序执行的效率!
为什么要使用连接池?
传统方式中,每次需要连接都是直接创建一个连接(对象/资源),再基于这个创建的连接去访问数据库,最后用完连接还要关闭!
而每次【创建连接】和【关闭连接】相比使用连接是要消耗大量的时间和资源,导致程序的执行效率非常低下!
为了提高程序执行的效率,我们可以在程序一启动时,就创建一批连接放在一个连接池中,供整个程序共享。
当用户需要连接时,不用再去创建连接,而是直接从连接池中获取一个连接进行使用,在用完连接后,也不需要关闭,而是直接将连接还回到连接池中。这样一来,用来用去都是连接池中的这一批连接,必然可以实现连接的复用,减少连接创建和关闭的次数。提高程序执行的效率!
连接复用的代码体现在close()上,不使用的连接池的close()方法时直接销毁连接对象,而使用了连接池的close()方法是将连接对象放回连接池。
为何会使用Mybatis而不是原生JDBC?
开发软件项目这种有工期的任务,自然是越省时间越好,时间就是金钱,当然开发效率也是如此。为此就出现了一些一系列的开源框架,例如Mybatis。
与JDBC相比,Mybatis有什么优势值得我们去学习?
使用mybatis可以只关注SQL语句本身,而不需要关注注册驱动,获取连接,获取传输器,释放资源等过程(底层当然也实现了这些操作,有兴趣可以翻翻源码瞅瞅,多多学习嘛,不寒碜)。
mybatis可以将要执行的SQL语句使用xml文件的方式或者注解方式配置起来,在执行时,将Java对象中携带的参数值和SQL骨架进行映射,生成最终要执行的SQL,将执行的结果处理后再返回。
mybatis的一些优势
- JDBC连接访问数据库有大量重复的代码,而mybatis可以极大的简化JDBC代码:注册驱动、获取连接、获取传输器、释放资源。
- JDBC没有自带连接池,而mybatis自带的有连接池。
- JDBC中是将SQL语句、连接参数写死在程序中,而mybatis是将SQL语句以及连接参数都写在配置文件中。
- JDBC执行查询后得到的ResultSet我们需要手动处理,而mybatis执行查询后得到的结果会处理完后,将处理后的结果返回。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。