前段时间发现自己的的MyBatis的掌握的不好,很多细节地方没有理解到位。
最近有时间重新学习了一下,并整理了几篇博客。

一 Mybaits框架的由来

我们先来看下传统JDBC连接数据库的代码:

Public static void main(String[] args) {

			Connection connection = null;
			PreparedStatement preparedStatement = null;
			ResultSet resultSet = null;
			
			try {
				//加载数据库驱动
				Class.forName("com.mysql.jdbc.Driver");
				//通过驱动管理类获取数据库链接
				connection =  DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "root");
				//定义sql语句 ?表示占位符
		    	String sql = "select * from test_user where username = ?";
				//获取预处理statement
				preparedStatement = connection.prepareStatement(sql);
				//向数据库发出sql执行 查询,查询出结果集
				resultSet =  preparedStatement.executeQuery();
				//遍历查询结果集
				while (resultSet.next()) {
					System.out.println(*********);
				}
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				//释放资源
				if (resultSet != null){
					try {
						resultSet.close();
					} catch (SQLException e) {
						e.printStackTrace();
					}
				}
				if (preparedStatement != null) {
					try {
						preparedStatement.close();
					} catch (SQLException e) {
						e.printStackTrace();
					}
				}
				if (connection != null) {
					try {
						connection.close();
					} catch (SQLException e) {
						e.printStackTrace();
		         }
            }
        } 
   }

我们可以很容易看出,传统的JDBC代码有很多重复的内容,而且大部分是硬编码,效率低,系统不易维护。比如新增一个表时,所有的代码都要重写。(当然通过封装代码能够解决一部分问题,但仍不太好)

JDBC的设想:
1、数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响数据库性能。
设想:使用数据库连接池管理数据库连接。

2、将sql语句硬编码到java代码中,如果sql 语句修改,需要重新编译java代码,不利于系统维护。
设想:将sql语句配置在xml配置文件中,即使sql变化,不需要对java代码进行重新编译。

3、向Statement中设置参数,对占位符号位置和设置参数值,硬编码在java代码中,不利于系统维护。
设想:将sql语句及占位符号和参数全部配置在xml中。

4、从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,,不利于系统维护。
设想:将查询的结果集,自动映射成java对象。

当当当,在以上这些设想的基础上,Mybatis这个伟大的框架就诞生了,Apache公司的顶级项目之一。

二 Mybatis工作原理

mybatis是一个持久层的框架。
mybatis一开始托管到goolecode下,再后来托管到github下。
官网:https://github.com/mybatis/mybatis-3 logo是非常可爱的小鸟@_@

mybatis让程序将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成(半自动化,大部分需要程序员编写sql)满足需要sql语句。

mybatis可以将向 preparedStatement中的输入参数自动进行输入映射,将查询结果集灵活映射成java对象。(输出映射)

最后来张图镇楼,讲的是Mybatis的原理(这些底层原理,懂不懂没关系,会用就行了。。)

mybatis怎么连接mysql mybatis连接数据库的原理_硬编码