您的位置:首页 > 其它

拥有了JDBC,为什么还要有Hibernate和Mybatis等持久层框架?

2017-05-05 14:25 344 查看
JDBC,我想对于学Java的人简直太熟悉了,如果谁说不知道,那么狠遗憾的告诉你,你不是Java人!

这篇文章的主要目的还是想把大家引入后面我们重点要说的内容,那就是Mybatis和Hibernate两个持久层框架。既然要研究这两个框架,那么就该知道为什么会出现这两个框架。

我记得,我刚步入Java的时候,那时候操作数据库是按照找个步骤写的:

(1)注册驱动;

(2)获取数据库连接;

(3)拼接sql语句,设置sql参数;

(4)执行sql语句;

(5)处理sql返回结果;

(6)关闭执行语句和数据库连接;

就像下面的一个简单示例一样:

private static Connection getConn() {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/samp_db";
String username = "root";
String password = "";
Connection conn = null;
try {
Class.forName(driver); //classLoader,加载对应驱动
conn = (Connection) DriverManager.getConnection(url, username, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}


然后获取到连接后再进行相应的sql操作,这里简单了拿插入语句来说吧:

private static int insert(Student student) {
Connection conn = getConn();
int i = 0;
String sql = "insert into students (Name,Sex,Age) values(?,?,?)";
PreparedStatement pstmt;
try {
pstmt = (PreparedStatement) conn.prepareStatement(sql);
pstmt.setString(1, student.getName());
pstmt.setString(2, student.getSex());
pstmt.setString(3, student.getAge());
i = pstmt.executeUpdate();
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
return i;
}


从上面的语句可以看出来,我们每次都要做大量的相同的操作,并且还要对执行sql语句过程中所出现的各种异常和资源释放进行处理,而真正涉及到业务功能的代码其实很少,这明显影响了效率。

每当这时候都会有牛人出来,帮助大伙解决问题。这时候Hibernate和Mybatis(前身ibatis)变横空出世了。它们帮我们把哪些复杂的重复性的工作进行了抽象,从业务处理逻辑中剥离了,使得我们不需要再写这些我们不想写还非要写的代码。

下面简单说说这两个框架。

Mybatis的前身其实是apache下面的一个开源项目ibatis,后来迁移到了Google Code,并且改名为了Mybatis。再之后,又被迁移到了GitHub。

Hibernate是澳大利亚墨尔本的一个年轻程序员开始的,正是和我们一样他也厌倦了这样写数据库操作,所以写了Hibernate的第一个版本,而后其他成员加入进来共同完善了Hibernate,Hibernate也变得原来越流行,我们常说的SSH中的H指的就是它了。

在接下来的日子里,我将分别开设两个专栏分别讲述Mybatis和Hibernate,从简单的使用用例着手,结合源码来分析其内部实现原理,敬请关注。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: