在学习mybatis之前我们先了解一下jdbc。
Jdbc操作数据库的步骤:
1、 加载驱动
2、 获取数据库连接
3、 根据数据库连接操作数据库,实现增删改查
4、 关闭资源。
举例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25String URL = "jdbc:mysql://127.0.0.1:3306/bootdo?useUnicode=true&characterEncoding=utf-8";
String USER = "root";
String PASSWORD = "root";
//1.加载驱动程序
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//2.获得数据库链接
Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
//3.通过数据库的连接操作数据库,实现增删改查(使用Statement类)
Statement st = conn.createStatement();
ResultSet resultSet = st.executeQuery("select * from student");
long age = 0;
while (resultSet.next()) {
age = resultSet.getLong("age");
age++;
}
boolean rs = st.execute("update student set age = " + age + " where id = 13");
System.out.println(rs);
//关闭资源
st.close();
conn.close();
mybatis是由jdbc演变而来的,目的是简化jdbc操作步骤,提高jdbc操作性能。
mybatis解决了jdbc的什么问题?
1、 使用连接池代替了获取数据库连接,有效的循环利用连接资源。
我们知道,以mysql为例,如果mysql的连接数大于设置的最大连接数,就会因资源占用
而导致数据库宕机。
我们可以修改mysql最大连接数:打开my.ini,修改max_connections=100(默认为100)。
此外还有执行sql来设置最大连接数,此处就不多讲。
2、 操作方便,使用简单,简单数据库操作可以使用面向接口编程,特别适合一些大型
企业项目,减少重复性代码。
3、 待补充。。
mybatis的整体结构
在分析mybatis源码之前,我们先看看mybatis的整体结构,这样在深入读源码的时候不会绕晕。
mybatis可以整体分成四层分析。
接口层,也是最上层,提供了给咋们用的增删改查的接口,而接口的调用方式分成,
第一种基于Mapper接口,也就是我们常常说的dao层映射到xml映射文件,或者采用
注解的形式,接口化编程的风格,也是我们集成spring的时候最常用的一种形式。
此外第二种是mybatis传统的调用方式,如sqlSession.selectList(statementId, Map形式的参数),
statementId一般是类的全限定名。
数据处理层,分别是参数映射,sql解析,sql执行,结果集映射。参数映射是java数据格式转
化成sql参数格式,期间也会通过TypeHandler来操作java格式和sql格式参数之间的转换。但
主要的操作是在ParameterHandler这个类中进行的。它会调起TypeHandler进行操作。Sql解析,
也就是将sql和参数拼凑起来形成一个完整的可执行的sql,它的操作是在sqlSource中进行的。
而sql执行,是在Executor类中执行的,它底层封装了Statement相关实现类。调用的是statement
类的execute方法或者是executeQuery方法。最后是结果集映射,我们知道jdbc执行sql后生成的
结果集,我们还得自己去转成java数据格式或者封装对象属性相关的数据。这时mybatis提供了
结果集映射成java类型的ResultSetHandler类,期间也会调用TypeHandler来完成原生结果集转
换成我们想要的java数据格式。
框架支撑层,无非就是连接池、事务、和缓存,这些来支撑我们执行sql提供了一系列相关的保障。
连接池保证了咋们的宝贵的连接资源可重复利用。事务保证了执行sql的一致性、隔离性、永久性、
原子性。缓存提高了相同查询结果的性能。
引导层,不多说了,怎么用这个框架,引导去用的相关问题。